#!/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 < /etc/pivilion.php < /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 < Options Indexes FollowSymLinks AllowOverride All Require all granted 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."