mirror of
https://gitlab.com/hacklab01/pivilion.git
synced 2026-08-06 16:08:22 +00:00
Add canonical boot configuration synchronization
This commit is contained in:
parent
254a9b9cf3
commit
eda151065c
14 changed files with 424 additions and 50 deletions
33
install.sh
33
install.sh
|
|
@ -1,7 +1,7 @@
|
|||
#!/bin/bash
|
||||
set -Eeuo pipefail
|
||||
|
||||
INSTALL_VERSION=2
|
||||
INSTALL_VERSION=3
|
||||
ACTION=install
|
||||
case "${1:-}" in
|
||||
'') ;;
|
||||
|
|
@ -15,6 +15,8 @@ esac
|
|||
|
||||
SOURCE_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)
|
||||
source "$SOURCE_DIR/usr/local/lib/pivilion/common.sh"
|
||||
PIVILION_CONFIG_PATHS="$(pivilion_boot_config_path) /etc/pivilion.conf /etc/pivilion.defaults"
|
||||
export PIVILION_CONFIG_PATHS
|
||||
pivilion_load_config || exit "$PIVILION_E_CONFIG"
|
||||
|
||||
cat <<'PIVILION_LOGO'
|
||||
|
|
@ -48,12 +50,13 @@ declare -a MANAGED_PATHS=(
|
|||
/etc/apache2/conf-enabled/pivilion.conf /etc/apache2/sites-enabled/000-default.conf
|
||||
/etc/tor/torrc /etc/tor/torrc.d/pivilion.conf
|
||||
/etc/systemd/system/pivilion-mode.service /etc/systemd/system/pivilion-dnsmasq.service
|
||||
/etc/systemd/system/pivilion-config.service
|
||||
/etc/systemd/system/pivilion-hostapd.service /etc/systemd/system/pivilion-boot-greeter.service
|
||||
/etc/systemd/system/pivilion-login-banner.service /etc/rc.local
|
||||
/usr/local/lib/pivilion /usr/local/bin/pivilion /usr/local/bin/pivilion-diagnose
|
||||
/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
|
||||
/var/lib/pivilion/install-state
|
||||
/var/lib/pivilion/install-state /var/lib/pivilion/pivilion.conf.last-good
|
||||
/etc/php/7.4/apache2/conf.d/99-pivilion.ini
|
||||
/etc/php/8.2/apache2/conf.d/99-pivilion.ini
|
||||
/etc/php/8.4/apache2/conf.d/99-pivilion.ini
|
||||
|
|
@ -118,10 +121,11 @@ backup_managed_files() {
|
|||
BACKUP_DIR=$(mktemp -d /var/backups/pivilion/install-$(date +%Y%m%d-%H%M%S).XXXXXX)
|
||||
install -d -m 0700 "$BACKUP_DIR/files"
|
||||
: > "$BACKUP_DIR/present"; : > "$BACKUP_DIR/missing"; : > "$BACKUP_DIR/enabled-services"; : > "$BACKUP_DIR/active-services"
|
||||
for service in apache2 pivilion-mode.service pivilion-boot-greeter.service pivilion-login-banner.service pivilion-dnsmasq.service pivilion-hostapd.service tor.service tor@default.service; do
|
||||
for service in apache2 pivilion-config.service pivilion-mode.service pivilion-boot-greeter.service pivilion-login-banner.service pivilion-dnsmasq.service pivilion-hostapd.service tor.service tor@default.service; do
|
||||
systemctl is-enabled --quiet "$service" 2>/dev/null && printf '%s\n' "$service" >> "$BACKUP_DIR/enabled-services" || true
|
||||
systemctl is-active --quiet "$service" 2>/dev/null && printf '%s\n' "$service" >> "$BACKUP_DIR/active-services" || true
|
||||
done
|
||||
MANAGED_PATHS+=("$(pivilion_boot_config_path)" "$(pivilion_boot_error_path)")
|
||||
for path in "${MANAGED_PATHS[@]}"; do
|
||||
relative=${path#/}
|
||||
if [ -e "$path" ] || [ -L "$path" ]; then
|
||||
|
|
@ -147,9 +151,9 @@ rollback() {
|
|||
relative=${path#/}; rm -rf -- "$path"; install -d -m 0755 "$(dirname "$path")"; cp -a "$BACKUP_DIR/files/$relative" "$path"
|
||||
done < "$BACKUP_DIR/present"
|
||||
systemctl daemon-reload 2>/dev/null || true
|
||||
systemctl disable apache2 pivilion-mode.service pivilion-boot-greeter.service pivilion-login-banner.service tor.service tor@default.service 2>/dev/null || true
|
||||
systemctl disable apache2 pivilion-config.service pivilion-mode.service pivilion-boot-greeter.service pivilion-login-banner.service tor.service tor@default.service 2>/dev/null || true
|
||||
while IFS= read -r path; do [ -n "$path" ] && systemctl enable "$path" 2>/dev/null || true; done < "$BACKUP_DIR/enabled-services"
|
||||
for service in apache2 pivilion-mode.service pivilion-boot-greeter.service pivilion-login-banner.service pivilion-dnsmasq.service pivilion-hostapd.service tor.service tor@default.service; do
|
||||
for service in apache2 pivilion-config.service pivilion-mode.service pivilion-boot-greeter.service pivilion-login-banner.service pivilion-dnsmasq.service pivilion-hostapd.service tor.service tor@default.service; do
|
||||
grep -Fqx "$service" "$BACKUP_DIR/active-services" || systemctl stop "$service" 2>/dev/null || true
|
||||
done
|
||||
while IFS= read -r service; do [ -n "$service" ] && systemctl start "$service" 2>/dev/null || true; done < "$BACKUP_DIR/active-services"
|
||||
|
|
@ -171,7 +175,7 @@ deploy_files() {
|
|||
log "Deploying Pivilion files"
|
||||
install -d -m 0755 /usr/local/lib/pivilion /usr/local/bin /etc/systemd/system /etc/tor/torrc.d /etc/profile.d /var/lib/pivilion
|
||||
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" "$SOURCE_DIR/usr/local/lib/pivilion/diagnose.sh" \
|
||||
install -m 0755 "$SOURCE_DIR/usr/local/lib/pivilion/mode.sh" "$SOURCE_DIR/usr/local/lib/pivilion/config-sync.sh" "$SOURCE_DIR/usr/local/lib/pivilion/diagnose.sh" \
|
||||
"$SOURCE_DIR/usr/local/lib/pivilion/issue-banner.sh" /usr/local/lib/pivilion/
|
||||
install -m 0755 "$SOURCE_DIR"/usr/local/bin/* /usr/local/bin/
|
||||
install -m 0644 "$SOURCE_DIR"/etc/systemd/system/*.service /etc/systemd/system/
|
||||
|
|
@ -186,6 +190,14 @@ PIVILION_WEBROOT=$PIVILION_WEBROOT
|
|||
PIVILION_MODE=$PIVILION_MODE
|
||||
PIVILION_HOTSPOT_SSID=$PIVILION_HOTSPOT_SSID
|
||||
PIVILION_WIFI_INTERFACE=$PIVILION_WIFI_INTERFACE
|
||||
PIVILION_WIFI_SSID=$PIVILION_WIFI_SSID
|
||||
PIVILION_WIFI_PSK=$PIVILION_WIFI_PSK
|
||||
PIVILION_WIFI_PSK_FOR_SSID=$PIVILION_WIFI_PSK_FOR_SSID
|
||||
PIVILION_WIFI_COUNTRY=$PIVILION_WIFI_COUNTRY
|
||||
PIVILION_HOTSPOT_CHANNEL=$PIVILION_HOTSPOT_CHANNEL
|
||||
PIVILION_HOSTNAME=$PIVILION_HOSTNAME
|
||||
PIVILION_GENERATOR_ENABLED=$PIVILION_GENERATOR_ENABLED
|
||||
PIVILION_UPLOAD_MAX_SIZE=$PIVILION_UPLOAD_MAX_SIZE
|
||||
EOF
|
||||
|
||||
install -d -m 0755 -o "$PIVILION_USER" -g "$PIVILION_GROUP" "$PIVILION_DIR" "$PIVILION_DIR/config"
|
||||
|
|
@ -268,7 +280,7 @@ EOF
|
|||
fi
|
||||
migrate_legacy_console_greeter
|
||||
systemctl daemon-reload
|
||||
systemctl enable apache2 pivilion-mode.service pivilion-login-banner.service
|
||||
systemctl enable apache2 pivilion-config.service pivilion-mode.service pivilion-login-banner.service
|
||||
systemctl enable tor@default.service 2>/dev/null || systemctl enable tor.service
|
||||
systemctl disable pivilion-dnsmasq.service pivilion-hostapd.service 2>/dev/null || true
|
||||
/usr/local/lib/pivilion/issue-banner.sh
|
||||
|
|
@ -287,6 +299,8 @@ validate_install() {
|
|||
grep -q '^My IP address is ' /etc/issue.d/90-pivilion.issue || failed=1
|
||||
grep -q '^@@@@@@@@@@@@@@@@@@@' /etc/issue.d/90-pivilion.issue || failed=1
|
||||
grep -q 'StandardOutput=null' /etc/systemd/system/pivilion-login-banner.service || failed=1
|
||||
[ -s "$(pivilion_boot_config_path)" ] || failed=1
|
||||
[ -s /var/lib/pivilion/pivilion.conf.last-good ] || failed=1
|
||||
if command -v shellcheck >/dev/null 2>&1; then shellcheck /usr/local/lib/pivilion/*.sh /usr/local/bin/pivilion* /usr/local/bin/hotspot /usr/local/bin/onion /usr/local/bin/pikey || failed=1; fi
|
||||
[ "$failed" -eq 0 ] || return "$PIVILION_E_INSTALL"
|
||||
}
|
||||
|
|
@ -305,8 +319,9 @@ check_install() {
|
|||
local failed=0 file
|
||||
for file in /etc/pivilion.defaults /var/lib/pivilion/install-state /etc/issue.d/90-pivilion.issue \
|
||||
/usr/local/lib/pivilion/common.sh /usr/local/lib/pivilion/mode.sh /usr/local/lib/pivilion/diagnose.sh \
|
||||
/usr/local/lib/pivilion/config-sync.sh \
|
||||
/usr/local/lib/pivilion/issue-banner.sh /etc/systemd/system/pivilion-mode.service \
|
||||
/etc/systemd/system/pivilion-login-banner.service; do
|
||||
/etc/systemd/system/pivilion-config.service /etc/systemd/system/pivilion-login-banner.service; do
|
||||
if [ ! -e "$file" ]; then echo "Missing: $file" >&2; failed=1; fi
|
||||
done
|
||||
if [ "$failed" -eq 0 ]; then validate_install || failed=1; fi
|
||||
|
|
@ -324,9 +339,11 @@ case "$ACTION" in
|
|||
esac
|
||||
|
||||
backup_managed_files
|
||||
PIVILION_COMMON_PATH="$SOURCE_DIR/usr/local/lib/pivilion/common.sh" bash "$SOURCE_DIR/usr/local/lib/pivilion/config-sync.sh" initialize
|
||||
install_packages
|
||||
deploy_files
|
||||
configure_services
|
||||
/usr/local/lib/pivilion/config-sync.sh apply
|
||||
validate_install
|
||||
write_install_state
|
||||
systemctl is-active --quiet apache2 2>/dev/null && systemctl reload apache2 || true
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue