Add modern Raspberry Pi OS compatibility

This commit is contained in:
v3d 2026-06-29 09:42:14 +02:00
parent 4636a4f4f6
commit 3b7a16564b
35 changed files with 725 additions and 15678 deletions

View file

@ -1,25 +1,31 @@
#!/bin/bash
set -euo pipefail
source /usr/local/lib/pivilion/common.sh
[ "$(id -u)" -eq 0 ] || exec sudo "$0" "$@"
pivilion_load_config
echo "Would you like to enable or disable the Static Generator Script?"
select stagen in "Enable" "Disable"; do
case $stagen in
Enable ) sudo a2ensite 000-upload.conf > /dev/null;
sudo systemctl reload apache2;
echo "Static Generator Script enabled, access it by adding :81 to your Rpi IP in your browser";
sudo rm -rf /var/www/html/piviliomn/gen/*
sudo chown -R pi:pi /home/pi
sudo chown -R www-data:www-data /var/www/;
sudo chmod -R 775 /var/www;
sudo mkdir /var/www/html/pivilion/gen/upload
sudo chmod -R 777 /var/www/html/pivilion/gen/upload
break;;
Disable ) sudo a2dissite 000-upload.conf > /dev/null;
sudo systemctl reload apache2;
echo "Static Generator Script disabled";
sudo chown -R pi:pi /home/pi
sudo chown -R www-data:www-data /var/www/;
sudo chmod -R 775 /var/www;
break;;
esac
done
exit 0
backup_gallery() {
local destination="$PIVILION_DIR/backups/gen-$(date +%Y%m%d-%H%M%S)"
install -d -m 0755 -o "$PIVILION_USER" -g "$PIVILION_GROUP" "$PIVILION_DIR/backups"
cp -a "$PIVILION_WEBROOT/gen" "$destination"
chown -R "$PIVILION_USER:$PIVILION_GROUP" "$destination"
echo "Gallery backup: $destination"
}
select choice in "Enable" "Disable"; do
case "$choice" in
Enable)
backup_gallery
a2ensite 000-upload.conf >/dev/null
systemctl reload apache2
install -d -m 2775 -o www-data -g www-data "$PIVILION_WEBROOT/gen/upload"
echo "Generator enabled at http://<device-address>:81/"
break ;;
Disable)
a2dissite 000-upload.conf >/dev/null || true
systemctl reload apache2
echo "Generator disabled."
break ;;
*) echo "Choose 1 or 2." ;;
esac
done

View file

@ -1,31 +1,56 @@
#!/bin/bash
echo "Would you like to install or restore Hotglue? Installing will overwrite any existing files in /var/www/html/pivilion/gen"
select sres in "Install" "Restore"; do
case $sres in
Install ) wget https://hotglue.org/download/hotglue-latest-dev.zip -P /home/pi/pivilion/hotglue/;
unzip /home/pi/pivilion/hotglue/hotglue-latest-dev.zip -d /home/pi/pivilion/hotglue/;
sudo mv /home/pi/pivilion/hotglue/k0a1a-*/* /home/pi/pivilion/hotglue/;
echo "Enter Hotglue admin user";
read user;
echo "Enter Hotglue admin password";
read password;
echo -e "<?php\n@define('AUTH_USER', '$user');\n@define('AUTH_PASSWORD', '$password');" > /home/pi/pivilion/hotglue/user-config.inc.php
sudo rm -rf /var/www/html/pivilion/gen/{,.[!.],..?}*;
sudo cp -rT /home/pi/pivilion/hotglue /var/www/html/pivilion/gen;
sudo chmod 777 /var/www/html/pivilion/gen/content;
sudo chown -R pi:pi /home/pi;
sudo chown -R www-data:www-data /var/www/;
sudo chmod -R 775 /var/www;
break;;
Restore ) sudo rm -rf /var/www/html/pivilion/gen/{,.[!.],..?}*;
sudo cp -aR /home/pi/pivilion/hotglue/backup /var/www/html/pivilion/gen;
sudo mv /var/www/html/pivilion/gen/backup/* /var/www/html/pivilion/gen
sudo chmod -R 777 /var/www/html/pivilion/gen/content;
sudo chown -R pi:pi /home/pi;
sudo chown -R www-data:www-data /var/www/;
sudo chmod -R 775 /var/www;
break;;
esac
done
exit 0
set -euo pipefail
source /usr/local/lib/pivilion/common.sh
[ "$(id -u)" -eq 0 ] || exec sudo "$0" "$@"
pivilion_load_config
backup_gallery() {
local destination="$PIVILION_DIR/hotglue/backup-$(date +%Y%m%d-%H%M%S)"
cp -a "$PIVILION_WEBROOT/gen" "$destination"
chown -R "$PIVILION_USER:$PIVILION_GROUP" "$destination"
printf '%s\n' "$destination"
}
replace_gallery() {
local source=$1
[ -d "$source" ] || { echo "Restore source does not exist: $source" >&2; return 1; }
find "$PIVILION_WEBROOT/gen" -mindepth 1 -maxdepth 1 -exec rm -rf -- {} +
cp -a "$source/." "$PIVILION_WEBROOT/gen/"
chown -R www-data:www-data "$PIVILION_WEBROOT/gen"
find "$PIVILION_WEBROOT/gen" -type d -exec chmod 2775 {} +
find "$PIVILION_WEBROOT/gen" -type f -exec chmod 0664 {} +
[ ! -d "$PIVILION_WEBROOT/gen/content" ] || chmod 2775 "$PIVILION_WEBROOT/gen/content"
}
install -d -m 0755 -o "$PIVILION_USER" -g "$PIVILION_GROUP" "$PIVILION_DIR/hotglue"
select choice in "Install" "Restore latest backup"; do
case "$choice" in
Install)
work=$(mktemp -d "$PIVILION_DIR/hotglue/download.XXXXXX")
trap 'rm -rf "$work"' EXIT
wget --https-only https://hotglue.org/download/hotglue-latest-dev.zip -O "$work/hotglue.zip"
unzip -q "$work/hotglue.zip" -d "$work/unpacked"
source_dir=$(find "$work/unpacked" -mindepth 1 -maxdepth 1 -type d -name 'k0a1a-*' -print -quit)
[ -n "$source_dir" ] || { echo "Unexpected Hotglue archive layout." >&2; exit 1; }
read -r -p "Hotglue admin user: " admin_user
read -r -s -p "Hotglue admin password: " admin_password
printf '\n'
escaped_user=$(printf '%s' "$admin_user" | sed "s/\\\\/\\\\\\\\/g; s/'/\\\\'/g")
escaped_password=$(printf '%s' "$admin_password" | sed "s/\\\\/\\\\\\\\/g; s/'/\\\\'/g")
printf "<?php\n@define('AUTH_USER', '%s');\n@define('AUTH_PASSWORD', '%s');\n" \
"$escaped_user" "$escaped_password" > "$source_dir/user-config.inc.php"
unset admin_password escaped_password
backup=$(backup_gallery)
replace_gallery "$source_dir"
echo "Hotglue installed. Original backup: $backup"
break ;;
"Restore latest backup")
backup=$(find "$PIVILION_DIR/hotglue" -maxdepth 1 -type d -name 'backup-*' -printf '%T@ %p\n' | sort -nr | sed -n '1s/^[^ ]* //p')
[ -n "$backup" ] || { echo "No Hotglue backup is available." >&2; exit 1; }
current=$(backup_gallery)
replace_gallery "$backup"
echo "Restored $backup. Previous gallery saved at $current"
break ;;
*) echo "Choose 1 or 2." ;;
esac
done

View file

@ -1,29 +1,7 @@
#!/bin/bash
echo "Checking for required packages and installing what's missing"
if [ $(dpkg-query -W -f='${Status}' apache2 2>/dev/null | grep -c "ok installed") -eq 0 ];
then
sudo apt update
sudo apt -y install hostapd dnsmasq apache2 php
sudo cp -rT /home/pi/pivilion/config/html /var/www/html/pivilion/gen
fi
echo "Configuring components..."
if ! test -f /etc/hostapd/hostapd.conf;
then sudo cp -f /home/pi/pivilion/config/hostapd.hotspot /etc/hostapd/hostapd.conf
fi
sudo cp -f /home/pi/pivilion/config/dnsmasq.hotspot /etc/dnsmasq.conf
sudo cp /home/pi/pivilion/config/html/.htaccess /var/www/html/pivilion/gen/.htaccess
sudo chown -R www-data:www-data /var/www/html
sudo chown root:www-data /var/www/html/pivilion/gen/.htaccess
sudo cp -f /home/pi/pivilion/config/rc.hotspot /etc/rc.local
sudo cp -f /home/pi/pivilion/config/override.hotspot /etc/apache2/conf-available/override.conf
sudo a2enconf override
sudo a2enmod rewrite
echo "Backing up wireless network configuration..."
sudo mv /etc/wpa_supplicant/wpa_supplicant.conf /etc/wpa_supplicant/wpa_supplicant.bak
echo "Captive portal enabled. Reboot to execute."
sudo bash -c 'echo "hotspot" > /home/pi/pivilion/mode'
exit 0
set -euo pipefail
source /usr/local/lib/pivilion/common.sh
[ "$(id -u)" -eq 0 ] || exec sudo "$0" "$@"
pivilion_load_config
pivilion_set_mode hotspot
echo "Pivilion will start in open hotspot mode after the next reboot."

View file

@ -1,9 +1,17 @@
#!/bin/bash
set -euo pipefail
source /usr/local/lib/pivilion/common.sh
[ "$(id -u)" -eq 0 ] || exec sudo "$0" "$@"
pivilion_load_config
echo "Would you like to remove or reset htaccess redirection"
select hson in "Reset" "Remove"; do
case $hson in
Reset) sudo cp /home/pi/pivilion/config/html/.htaccess /var/www/html/pivilion/gen; break;;
Remove) sudo rm /var/www/html/pivilion/gen/.htaccess; break;;
esac
select choice in "Reset" "Remove"; do
case "$choice" in
Reset)
install -m 0644 -o root -g www-data "$PIVILION_DIR/config/html/.htaccess" "$PIVILION_WEBROOT/gen/.htaccess"
break ;;
Remove)
rm -f "$PIVILION_WEBROOT/gen/.htaccess"
break ;;
*) echo "Choose 1 or 2." ;;
esac
done

View file

@ -1,16 +1,13 @@
#!/bin/bash
cat /home/pi/pivilion/config/dhcpcd.orig > /etc/dhcpcd.conf
sudo bash -c 'cat /home/pi/pivilion/config/interfaces.onion > /etc/network/interfaces'
sudo update-rc.d dnsmasq disable
sudo bash -c 'cat /home/pi/pivilion/config/rc.local.onion > /etc/rc.local'
sudo mv /etc/wpa_supplicant/wpa_supplicant.bak /etc/wpa_supplicant/wpa_supplicant.conf
sudo rm /var/www/html/pivilion/gen/.htaccess
sudo echo "The next time you reboot, your Pi will start in onion mode"!
sudo echo "Your onion domain is `cat /home/pi/pivilion/torname`"
sudo bash -c 'echo "onion" > /home/pi/pivilion/mode'
set -euo pipefail
source /usr/local/lib/pivilion/common.sh
[ "$(id -u)" -eq 0 ] || exec sudo "$0" "$@"
pivilion_load_config
pivilion_set_mode onion
rm -f "$PIVILION_WEBROOT/gen/.htaccess"
echo "Pivilion will start in onion mode after the next reboot."
if [ -s "$PIVILION_DIR/torname" ]; then
printf 'Your onion domain is %s\n' "$(tr -d '\r\n' < "$PIVILION_DIR/torname")"
else
echo "The onion domain will appear after Tor starts successfully."
fi

View file

@ -1,12 +1,35 @@
#!/bin/bash
set -euo pipefail
source /usr/local/lib/pivilion/common.sh
[ "$(id -u)" -eq 0 ] || exec sudo "$0" "$@"
pivilion_load_config
IFACE=$(pivilion_wifi_interface)
[ -n "$IFACE" ] || { echo "No Wi-Fi interface found." >&2; exit 1; }
echo "Enter SSID"
read name
echo "Enter password"
read password
sudo bash -c "cp /etc/wpa_supplicant/wpa_supplicant.conf /home/pi/pivilion/config/wpa_supplicant.conf"
sudo bash -c "wpa_passphrase "$name" "$password" >> /home/pi/pivilion/config/wpa_supplicant.conf"
sudo bash -c "cp /home/pi/pivilion/config/wpa_supplicant.conf /etc/wpa_supplicant/wpa_supplicant.conf"
echo "Configured Wifi networks"
sudo bash -c "cat /etc/wpa_supplicant/wpa_supplicant.conf"
echo "If this is correct set your Pi to restart in onion mode by running the onion command!"
read -r -p "Wi-Fi SSID: " ssid
read -r -s -p "Wi-Fi password: " password
printf '\n'
[ -n "$ssid" ] || { echo "SSID cannot be empty." >&2; exit 1; }
[ "${#password}" -ge 8 ] && [ "${#password}" -le 63 ] || {
echo "WPA password must contain 8-63 characters." >&2; exit 1;
}
if pivilion_uses_networkmanager; then
nmcli connection delete pivilion-onion >/dev/null 2>&1 || true
nmcli connection add type wifi ifname "$IFACE" con-name pivilion-onion ssid "$ssid" >/dev/null
nmcli connection modify pivilion-onion 802-11-wireless.mode infrastructure \
802-11-wireless-security.key-mgmt wpa-psk 802-11-wireless-security.psk "$password" \
ipv4.method auto ipv6.method auto connection.autoconnect yes
else
tmp=$(mktemp)
trap 'rm -f "$tmp"' EXIT
wpa_passphrase "$ssid" "$password" | sed '/^[[:space:]]*#psk=/d' > "$tmp"
install -d -m 0755 /etc/wpa_supplicant
install -m 0600 "$tmp" /etc/wpa_supplicant/pivilion.conf
touch /etc/wpa_supplicant/wpa_supplicant.conf
grep -Fqx 'include=/etc/wpa_supplicant/pivilion.conf' /etc/wpa_supplicant/wpa_supplicant.conf || \
printf '\ninclude=/etc/wpa_supplicant/pivilion.conf\n' >> /etc/wpa_supplicant/wpa_supplicant.conf
chmod 0600 /etc/wpa_supplicant/wpa_supplicant.conf
fi
unset password
echo "Wi-Fi credentials saved. Run onion and reboot when ready."

View file

@ -1,44 +1,31 @@
#!/bin/bash
set -euo pipefail
source /usr/local/lib/pivilion/common.sh
pivilion_load_config
pause(){
read -n1 -rsp $'\nPress any key to continue or Ctrl+C to exit...\n\n'
}
sudo bash -c 'cat /var/lib/tor/hidden_service/hostname > /home/pi/pivilion/torname'
sudo bash -c 'echo "onion" > /home/pi/pivilion/mode'
sudo chown -R pi:www-data /var/www/html/pivilion/gen
mode=$(pivilion_current_mode)
torname="not generated yet"
[ ! -s "$PIVILION_DIR/torname" ] || torname=$(tr -d '\r\n' < "$PIVILION_DIR/torname")
uptime_text=$(uptime -p 2>/dev/null || true)
echo -e "\nWelcome to pivilion!"
cat <<EOF
let upSeconds="$(/usr/bin/cut -d. -f1 /proc/uptime)"
let secs=$((${upSeconds}%60))
let mins=$((${upSeconds}/60%60))
let hours=$((${upSeconds}/3600%24))
let days=$((${upSeconds}/86400))
UPTIME=`printf "%d days, %02dh%02dm%02ds" "$days" "$hours" "$mins" "$secs"`
Welcome to Pivilion!
# get the load averages
read one five fifteen rest < /proc/loadavg
echo "
@@@@@@@@@@@@@@@@@@@ `date +"%A, %e %B %Y, %r"`
@@@@@@, &@& *@@@@@@ `uname -srnmo`
@@@@@@@. .@@@@@@@ Uptime.............: ${UPTIME}
@@@@ .@@@. @@@@ Memory.............: `cat /proc/meminfo | grep MemFree | awk {'print $2'}`kB (Free) / `cat /proc/meminfo | grep MemTotal | awk {'print $2'}`kB (Total)
@ &@@@@.@@@@# @ Load Averages......: ${one}, ${five}, ${fifteen} (1, 5, 15 min)
@ @ . #@@@# . @ @ Running Processes..: `ps ax | wc -l | tr -d " "`
@ @@@, # ,@@@ @ Manual / more info.: pivilion.net
@@, @ ,@@ Onion Address......: `cat /home/pi/pivilion/torname`
@@@@@#@@@@@@@#@@@@@ Running in `cat /home/pi/pivilion/mode` mode"
pause
echo -e "There are four commands for you to use: \n \n 1) \"pivilion\" will display this message. \n \n 2) \"onion\" will set your Pi to start in onion mode on next reboot. This is the default mode. \n \n 3) \"hotspot\" will set your Pi to start in hotspot mode on next reboot. \n Please remember to set the mode properly before each reboot or you might have to access your Pi via ethernet cable or screen. \n \n 4) \"pikey\" is used to setup a Wifi network and password to be used in onion mode. \n \n A more thorough explanation is available at pivilion.net.\n"
Host...............: $(uname -n)
System.............: $(uname -srmo)
Uptime.............: ${uptime_text:-unknown}
Mode after reboot..: $mode
Onion address......: $torname
Web root...........: $PIVILION_WEBROOT
echo -e "The following is a usage scenario."
pause
echo -e "You are in a queue in a bank and they let you have their Wifi password. It's taking ages...\n\nYou already setup your gallery by either using our PHP gallery generation script or by uploading your own website to /var/www/html on your Pivilion box and set your Pi to run in hotspot mode."
pause
echo -e "All you have to do now is \n - connect your phone to your Pivilion box, powered by a battery pack in your backpack, \n - ssh to it using a terminal emulator for your phone, \n - run pikey to input the network SSID and password, \n - run onion to set Pivilion to run as a tor hidden service on the next boot and \n - reboot "
pause
echo -e "And there you have it! \nYou just hosted an online darknet exhibition powered by your local bank! =P"
pause
echo -e "For detailed info and support visit http://pivilion.net or https://gitlab.com/hacklab01/pivilion/"
exit 0
Commands:
pivilion show this status
onion select Tor onion mode for the next reboot
hotspot select open captive-hotspot mode for the next reboot
pikey save upstream Wi-Fi credentials for onion mode
generator enable or disable the gallery generator on port 81
static convert the current gallery to static files
hotglue install or restore Hotglue
htaccess reset or remove captive redirect rules
EOF

View file

@ -1,18 +1,35 @@
#!/bin/bash
sudo rm -rf /home/pi/pivilion/static/{,.[!.],..?}*
sudo cp -a -R /var/www/html/pivilion/gen /home/pi/pivilion/hotglue/backup
wget --mirror --convert-links --adjust-extension --page-requisites --restrict-file-names=ascii,windows http://127.0.0.1 -P /home/pi/pivilion/static
sudo rm -rf /var/www/html/pivilion/gen/{,.[!.],..?}*
sudo cp -rT /home/pi/pivilion/static/127.0.0.1 /var/www/html/pivilion/gen
sudo mv /var/www/html/pivilion/gen/index.html //var/www/html/pivilion/gen/index.php
sudo chown -R pi:pi /home/pi
sudo chown -R www-data:www-data /var/www/;
sudo chmod -R 775 /var/www;
echo "Are you using static HTML with hotspot or onion mode?"
select hson in "Hotspot" "Onion"; do
case $hson in
Hotspot ) sudo cp /home/pi/pivilion/config/html/.htaccess /var/www/html/pivilion/gen; break;;
Onion ) sudo rm /var/www/html/pivilion/gen/.htaccess; break;;
esac
done
exit 0
set -euo pipefail
source /usr/local/lib/pivilion/common.sh
[ "$(id -u)" -eq 0 ] || exec sudo "$0" "$@"
pivilion_load_config
work=$(mktemp -d "$PIVILION_DIR/static.XXXXXX")
backup="$PIVILION_DIR/backups/gen-$(date +%Y%m%d-%H%M%S)"
trap 'rm -rf "$work"' EXIT
install -d -m 0755 -o "$PIVILION_USER" -g "$PIVILION_GROUP" "$PIVILION_DIR/backups"
cp -a "$PIVILION_WEBROOT/gen" "$backup"
wget --mirror --convert-links --adjust-extension --page-requisites \
--restrict-file-names=ascii,windows http://127.0.0.1/ -P "$work"
[ -f "$work/127.0.0.1/index.html" ] || { echo "Static capture did not produce index.html; gallery was not changed." >&2; exit 1; }
find "$PIVILION_WEBROOT/gen" -mindepth 1 -maxdepth 1 -exec rm -rf -- {} +
cp -a "$work/127.0.0.1/." "$PIVILION_WEBROOT/gen/"
mv "$PIVILION_WEBROOT/gen/index.html" "$PIVILION_WEBROOT/gen/index.php"
chown -R www-data:www-data "$PIVILION_WEBROOT/gen"
find "$PIVILION_WEBROOT/gen" -type d -exec chmod 2775 {} +
find "$PIVILION_WEBROOT/gen" -type f -exec chmod 0664 {} +
echo "Static gallery installed. Original backup: $backup"
select choice in "Hotspot" "Onion"; do
case "$choice" in
Hotspot)
install -m 0644 -o root -g www-data "$PIVILION_DIR/config/html/.htaccess" "$PIVILION_WEBROOT/gen/.htaccess"
break ;;
Onion)
rm -f "$PIVILION_WEBROOT/gen/.htaccess"
break ;;
*) echo "Choose 1 or 2." ;;
esac
done