mirror of
https://gitlab.com/hacklab01/pivilion.git
synced 2026-08-06 16:08:22 +00:00
134 lines
5.9 KiB
Bash
134 lines
5.9 KiB
Bash
|
|
#!/bin/bash
|
||
|
|
set -euo pipefail
|
||
|
|
|
||
|
|
if [ "$(id -u)" -ne 0 ]; then
|
||
|
|
echo "Run this installer with sudo: sudo ./install.sh" >&2
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
SOURCE_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)
|
||
|
|
source "$SOURCE_DIR/usr/local/lib/pivilion/common.sh"
|
||
|
|
pivilion_load_config
|
||
|
|
|
||
|
|
export DEBIAN_FRONTEND=noninteractive
|
||
|
|
|
||
|
|
is_networkmanager_system() {
|
||
|
|
command -v nmcli >/dev/null 2>&1 && {
|
||
|
|
systemctl is-enabled --quiet NetworkManager 2>/dev/null ||
|
||
|
|
systemctl is-active --quiet NetworkManager 2>/dev/null
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
install_packages() {
|
||
|
|
local packages=(apache2 libapache2-mod-php php php-cli tor dnsmasq nftables iproute2 iw rfkill wget unzip wpasupplicant)
|
||
|
|
apt-get update
|
||
|
|
apt-get install -y "${packages[@]}"
|
||
|
|
if is_networkmanager_system; then
|
||
|
|
echo "Using the installed NetworkManager backend."
|
||
|
|
elif command -v dhcpcd >/dev/null 2>&1 || dpkg-query -W dhcpcd5 >/dev/null 2>&1; then
|
||
|
|
apt-get install -y hostapd dhcpcd5
|
||
|
|
echo "Using the installed dhcpcd/hostapd backend."
|
||
|
|
else
|
||
|
|
apt-get install -y network-manager
|
||
|
|
systemctl enable NetworkManager
|
||
|
|
echo "No active networking backend was found; installed NetworkManager."
|
||
|
|
fi
|
||
|
|
}
|
||
|
|
|
||
|
|
deploy_files() {
|
||
|
|
local php_version
|
||
|
|
install -d -m 0755 /usr/local/lib/pivilion /usr/local/bin /etc/systemd/system /etc/tor/torrc.d
|
||
|
|
install -m 0644 "$SOURCE_DIR/usr/local/lib/pivilion/common.sh" /usr/local/lib/pivilion/common.sh
|
||
|
|
install -m 0755 "$SOURCE_DIR/usr/local/lib/pivilion/mode.sh" /usr/local/lib/pivilion/mode.sh
|
||
|
|
install -m 0755 "$SOURCE_DIR"/usr/local/bin/* /usr/local/bin/
|
||
|
|
install -m 0644 "$SOURCE_DIR/etc/systemd/system/pivilion-mode.service" /etc/systemd/system/pivilion-mode.service
|
||
|
|
install -m 0644 "$SOURCE_DIR/etc/systemd/system/pivilion-dnsmasq.service" /etc/systemd/system/pivilion-dnsmasq.service
|
||
|
|
install -m 0644 "$SOURCE_DIR/etc/tor/torrc.d/pivilion.conf" /etc/tor/torrc.d/pivilion.conf
|
||
|
|
|
||
|
|
cat > /etc/pivilion.defaults <<EOF
|
||
|
|
PIVILION_USER=$PIVILION_USER
|
||
|
|
PIVILION_HOME=$PIVILION_HOME
|
||
|
|
PIVILION_DIR=$PIVILION_DIR
|
||
|
|
PIVILION_WEBROOT=$PIVILION_WEBROOT
|
||
|
|
PIVILION_MODE=$PIVILION_MODE
|
||
|
|
PIVILION_HOTSPOT_SSID=$PIVILION_HOTSPOT_SSID
|
||
|
|
PIVILION_WIFI_INTERFACE=$PIVILION_WIFI_INTERFACE
|
||
|
|
EOF
|
||
|
|
chmod 0644 /etc/pivilion.defaults
|
||
|
|
|
||
|
|
install -d -m 0755 -o "$PIVILION_USER" -g "$PIVILION_GROUP" "$PIVILION_DIR" "$PIVILION_DIR/config"
|
||
|
|
cp -a "$SOURCE_DIR/home/pi/pivilion/config/." "$PIVILION_DIR/config/"
|
||
|
|
chown -R "$PIVILION_USER:$PIVILION_GROUP" "$PIVILION_DIR/config"
|
||
|
|
install -d -m 0755 -o "$PIVILION_USER" -g "$PIVILION_GROUP" \
|
||
|
|
"$PIVILION_DIR/static" "$PIVILION_DIR/hotglue" "$PIVILION_DIR/hotglue/backup"
|
||
|
|
[ -s "$PIVILION_DIR/mode" ] || pivilion_set_mode "$PIVILION_MODE"
|
||
|
|
[ -e "$PIVILION_DIR/torname" ] || install -m 0644 -o "$PIVILION_USER" -g "$PIVILION_GROUP" /dev/null "$PIVILION_DIR/torname"
|
||
|
|
|
||
|
|
install -d -m 2775 -o www-data -g www-data "$PIVILION_WEBROOT" "$PIVILION_WEBROOT/gen"
|
||
|
|
cp -a "$SOURCE_DIR/var/www/html/pivilion/scripts" "$PIVILION_WEBROOT/"
|
||
|
|
cp -a "$SOURCE_DIR/var/www/html/pivilion/images" "$PIVILION_WEBROOT/"
|
||
|
|
cp -a "$SOURCE_DIR/var/www/html/pivilion/skeleton" "$PIVILION_WEBROOT/"
|
||
|
|
install -m 0664 -o www-data -g www-data "$SOURCE_DIR/var/www/html/pivilion/gen.php" "$PIVILION_WEBROOT/gen.php"
|
||
|
|
install -m 0644 -o www-data -g www-data "$SOURCE_DIR/var/www/html/pivilion/index.html" "$PIVILION_WEBROOT/index.html"
|
||
|
|
install -m 0644 -o www-data -g www-data "$SOURCE_DIR/var/www/html/pivilion/pi-logo_128.png" "$PIVILION_WEBROOT/pi-logo_128.png"
|
||
|
|
if [ ! -e "$PIVILION_WEBROOT/gen/index.php" ]; then
|
||
|
|
cp -a "$SOURCE_DIR/var/www/html/pivilion/gen/." "$PIVILION_WEBROOT/gen/"
|
||
|
|
fi
|
||
|
|
chown -R www-data:www-data "$PIVILION_WEBROOT/scripts" "$PIVILION_WEBROOT/images" "$PIVILION_WEBROOT/skeleton"
|
||
|
|
chown -R www-data:www-data "$PIVILION_WEBROOT/gen"
|
||
|
|
find "$PIVILION_WEBROOT" -type d -exec chmod 2775 {} +
|
||
|
|
find "$PIVILION_WEBROOT" -type f -exec chmod 0664 {} +
|
||
|
|
|
||
|
|
cat > /etc/pivilion.php <<EOF
|
||
|
|
<?php
|
||
|
|
define('PIVILION_DIR', ${PIVILION_DIR@Q});
|
||
|
|
define('PIVILION_WEBROOT', ${PIVILION_WEBROOT@Q});
|
||
|
|
EOF
|
||
|
|
chmod 0644 /etc/pivilion.php
|
||
|
|
|
||
|
|
php_version=$(php -r 'echo PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')
|
||
|
|
install -d -m 0755 "/etc/php/$php_version/apache2/conf.d"
|
||
|
|
install -m 0644 "$SOURCE_DIR/etc/php/pivilion.ini" "/etc/php/$php_version/apache2/conf.d/99-pivilion.ini"
|
||
|
|
}
|
||
|
|
|
||
|
|
configure_services() {
|
||
|
|
sed "s|/var/www/html/pivilion|$PIVILION_WEBROOT|g" "$SOURCE_DIR/etc/apache2/sites-available/000-default.conf" > /etc/apache2/sites-available/000-default.conf
|
||
|
|
sed "s|/var/www/html/pivilion|$PIVILION_WEBROOT|g" "$SOURCE_DIR/etc/apache2/sites-available/000-upload.conf" > /etc/apache2/sites-available/000-upload.conf
|
||
|
|
install -m 0644 "$SOURCE_DIR/etc/apache2/ports.conf" /etc/apache2/ports.conf
|
||
|
|
cat > /etc/apache2/conf-available/pivilion.conf <<EOF
|
||
|
|
<Directory "$PIVILION_WEBROOT">
|
||
|
|
Options Indexes FollowSymLinks
|
||
|
|
AllowOverride All
|
||
|
|
Require all granted
|
||
|
|
</Directory>
|
||
|
|
EOF
|
||
|
|
a2enmod rewrite
|
||
|
|
a2enconf pivilion
|
||
|
|
a2ensite 000-default.conf
|
||
|
|
|
||
|
|
if ! grep -Fqx '%include /etc/tor/torrc.d/*.conf' /etc/tor/torrc; then
|
||
|
|
printf '\n%%include /etc/tor/torrc.d/*.conf\n' >> /etc/tor/torrc
|
||
|
|
fi
|
||
|
|
systemctl daemon-reload
|
||
|
|
systemctl enable apache2 pivilion-mode.service
|
||
|
|
systemctl enable tor@default.service 2>/dev/null || systemctl enable tor.service
|
||
|
|
systemctl disable --now dnsmasq 2>/dev/null || true
|
||
|
|
systemctl disable pivilion-dnsmasq.service 2>/dev/null || true
|
||
|
|
}
|
||
|
|
|
||
|
|
validate_install() {
|
||
|
|
apache2ctl configtest
|
||
|
|
tor --verify-config -f /etc/tor/torrc
|
||
|
|
dnsmasq --test
|
||
|
|
bash -n /usr/local/lib/pivilion/common.sh /usr/local/lib/pivilion/mode.sh /usr/local/bin/pivilion \
|
||
|
|
/usr/local/bin/hotspot /usr/local/bin/onion /usr/local/bin/pikey /usr/local/bin/generator \
|
||
|
|
/usr/local/bin/static /usr/local/bin/hotglue /usr/local/bin/htaccess
|
||
|
|
}
|
||
|
|
|
||
|
|
install_packages
|
||
|
|
deploy_files
|
||
|
|
configure_services
|
||
|
|
validate_install
|
||
|
|
|
||
|
|
echo "Pivilion installed for $PIVILION_USER. Reboot to enter $(pivilion_current_mode) mode."
|