mirror of
https://gitlab.com/hacklab01/pivilion.git
synced 2026-08-06 16:08:22 +00:00
Move MOTD into TTY login banner
This commit is contained in:
parent
ed0b168ab6
commit
bbbf80c25f
11 changed files with 137 additions and 29 deletions
61
install.sh
61
install.sh
|
|
@ -42,13 +42,14 @@ export DEBIAN_FRONTEND=noninteractive
|
|||
BACKUP_DIR=""
|
||||
TRANSACTION_ACTIVE=0
|
||||
declare -a MANAGED_PATHS=(
|
||||
/etc/pivilion.defaults /etc/pivilion.php /etc/profile.d/pivilion-motd.sh
|
||||
/etc/pivilion.defaults /etc/pivilion.php /etc/profile.d/pivilion-motd.sh /etc/issue.d/90-pivilion.issue
|
||||
/etc/apache2/ports.conf /etc/apache2/conf-available/pivilion.conf
|
||||
/etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/000-upload.conf
|
||||
/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-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
|
||||
|
|
@ -117,7 +118,7 @@ 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-dnsmasq.service pivilion-hostapd.service tor.service tor@default.service; do
|
||||
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
|
||||
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
|
||||
|
|
@ -146,9 +147,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 tor.service tor@default.service 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
|
||||
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-dnsmasq.service pivilion-hostapd.service tor.service tor@default.service; do
|
||||
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
|
||||
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 +172,7 @@ deploy_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" \
|
||||
"$SOURCE_DIR/usr/local/lib/pivilion/boot-greeter.sh" /usr/local/lib/pivilion/
|
||||
"$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/
|
||||
install -m 0644 "$SOURCE_DIR/etc/tor/torrc.d/pivilion.conf" /etc/tor/torrc.d/pivilion.conf
|
||||
|
|
@ -211,6 +212,43 @@ EOF
|
|||
install -m 0644 "$SOURCE_DIR/etc/php/pivilion.ini" "/etc/php/$php_version/apache2/conf.d/99-pivilion.ini"
|
||||
}
|
||||
|
||||
migrate_legacy_console_greeter() {
|
||||
local tmp signatures=0
|
||||
systemctl disable --now pivilion-boot-greeter.service 2>/dev/null || true
|
||||
rm -f /etc/systemd/system/pivilion-boot-greeter.service /usr/local/lib/pivilion/boot-greeter.sh
|
||||
|
||||
[ -f /etc/rc.local ] || return 0
|
||||
grep -q 'hostapd -B' /etc/rc.local && signatures=$((signatures + 1)) || true
|
||||
grep -q 'ifconfig br0' /etc/rc.local && signatures=$((signatures + 1)) || true
|
||||
grep -q 'iptables -t nat' /etc/rc.local && signatures=$((signatures + 1)) || true
|
||||
grep -q 'service dnsmasq start' /etc/rc.local && signatures=$((signatures + 1)) || true
|
||||
grep -q '/usr/local/lib/pivilion/mode.sh' /etc/rc.local && signatures=4 || true
|
||||
if [ "$signatures" -ge 4 ]; then
|
||||
cp -a /etc/rc.local "$BACKUP_DIR/legacy-rc.local"
|
||||
atomic_from_stdin /etc/rc.local 0755 <<'EOF'
|
||||
#!/bin/sh -e
|
||||
# Pivilion startup is managed by pivilion-mode.service.
|
||||
exit 0
|
||||
EOF
|
||||
log "Migrated legacy Pivilion rc.local; original saved in $BACKUP_DIR/legacy-rc.local"
|
||||
elif grep -q '/var/lib/tor/hidden_service/hostname.*home/pi/torname' /etc/rc.local; then
|
||||
cp -a /etc/rc.local "$BACKUP_DIR/legacy-rc.local"
|
||||
if grep -Fq '_IP=$(hostname -I)' /etc/rc.local && grep -Fq 'My IP address is' /etc/rc.local; then
|
||||
atomic_from_stdin /etc/rc.local 0755 <<'EOF'
|
||||
#!/bin/sh -e
|
||||
# Pivilion startup and the TTY banner are managed by systemd and agetty.
|
||||
exit 0
|
||||
EOF
|
||||
else
|
||||
tmp=$(mktemp)
|
||||
grep -v '/var/lib/tor/hidden_service/hostname.*home/pi/torname' /etc/rc.local > "$tmp"
|
||||
install -m 0755 "$tmp" /etc/rc.local
|
||||
rm -f "$tmp"
|
||||
fi
|
||||
log "Migrated legacy Pivilion onion rc.local; original saved in $BACKUP_DIR/legacy-rc.local"
|
||||
fi
|
||||
}
|
||||
|
||||
configure_services() {
|
||||
local tmp
|
||||
log "Configuring services"
|
||||
|
|
@ -228,10 +266,13 @@ EOF
|
|||
if ! grep -Fqx '%include /etc/tor/torrc.d/*.conf' /etc/tor/torrc; then
|
||||
tmp=$(mktemp); cp /etc/tor/torrc "$tmp"; printf '\n%%include /etc/tor/torrc.d/*.conf\n' >> "$tmp"; install -m 0644 "$tmp" /etc/tor/torrc; rm -f "$tmp"
|
||||
fi
|
||||
migrate_legacy_console_greeter
|
||||
systemctl daemon-reload
|
||||
systemctl enable apache2 pivilion-mode.service pivilion-boot-greeter.service
|
||||
systemctl enable apache2 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
|
||||
command -v agetty >/dev/null 2>&1 && agetty --reload >/dev/null 2>&1 || true
|
||||
}
|
||||
|
||||
validate_install() {
|
||||
|
|
@ -243,6 +284,9 @@ validate_install() {
|
|||
dnsmasq --test || failed=1
|
||||
php -l "$PIVILION_WEBROOT/gen.php" || failed=1
|
||||
systemd-analyze verify /etc/systemd/system/pivilion-*.service || failed=1
|
||||
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
|
||||
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"
|
||||
}
|
||||
|
|
@ -259,7 +303,10 @@ EOF
|
|||
|
||||
check_install() {
|
||||
local failed=0 file
|
||||
for file in /etc/pivilion.defaults /var/lib/pivilion/install-state /usr/local/lib/pivilion/common.sh /usr/local/lib/pivilion/mode.sh /usr/local/lib/pivilion/diagnose.sh /etc/systemd/system/pivilion-mode.service; do
|
||||
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/issue-banner.sh /etc/systemd/system/pivilion-mode.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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue