Activate offline mode changes on next boot

This commit is contained in:
v3d 2026-06-30 17:02:54 +02:00
parent eda151065c
commit b5e19f08f6
9 changed files with 94 additions and 14 deletions

View file

@ -46,7 +46,7 @@ state_contract() {
grep -q "printf 'desired_mode" "$ROOT/usr/local/lib/pivilion/common.sh" &&
grep -q "printf 'active_mode" "$ROOT/usr/local/lib/pivilion/common.sh" &&
grep -q "printf 'health" "$ROOT/usr/local/lib/pivilion/common.sh" &&
grep -q 'degraded' "$ROOT/usr/local/lib/pivilion/mode.sh"
grep -q 'pivilion_write_state none.*failed' "$ROOT/usr/local/lib/pivilion/mode.sh"
}
tty_banner_contract() {
@ -67,6 +67,16 @@ boot_config_contract() {
grep -q 'config-sync.sh set-wifi' "$ROOT/usr/local/bin/pikey"
}
same_boot_mode_contract() {
grep -q 'ExecStart=/usr/local/lib/pivilion/mode.sh --boot-selected' "$ROOT/etc/systemd/system/pivilion-mode.service" &&
grep -q 'Requires=pivilion-config.service' "$ROOT/etc/systemd/system/pivilion-mode.service" &&
grep -q 'RequiresMountsFor=/boot /boot/firmware' "$ROOT/etc/systemd/system/pivilion-config.service" &&
grep -q 'PIVILION_SELECTED_MODE_FILE' "$ROOT/usr/local/lib/pivilion/config-sync.sh" &&
grep -q 'MODE=$(pivilion_selected_mode)' "$ROOT/usr/local/lib/pivilion/mode.sh" &&
grep -q 'wait_for_diagnostics hotspot' "$ROOT/usr/local/lib/pivilion/mode.sh" &&
grep -q 'wait_for_diagnostics onion' "$ROOT/usr/local/lib/pivilion/mode.sh"
}
shellcheck_scripts() {
command -v shellcheck >/dev/null 2>&1 || return 0
shellcheck "$ROOT/install.sh" "$ROOT"/usr/local/lib/pivilion/*.sh "$ROOT"/usr/local/bin/pivilion* "$ROOT/usr/local/bin/hotspot" "$ROOT/usr/local/bin/onion" "$ROOT/usr/local/bin/pikey"
@ -81,6 +91,7 @@ run "transactional installer safety contract" installer_safety
run "truthful runtime state contract" state_contract
run "agetty login-banner contract" tty_banner_contract
run "canonical boot configuration contract" boot_config_contract
run "same-boot hotspot and onion activation contract" same_boot_mode_contract
run "ShellCheck (when installed)" shellcheck_scripts
[ "$failures" -eq 0 ] || { echo "$failures test group(s) failed." >&2; exit 1; }

View file

@ -23,6 +23,7 @@ EOF
export PIVILION_CONFIG_PATHS="$TMP/primary.conf $TMP/fallback.conf"
export PIVILION_STATE_DIR="$TMP/run"
export PIVILION_STATE_FILE="$TMP/run/status.tsv"
export PIVILION_SELECTED_MODE_FILE="$TMP/run/selected-mode"
source "$ROOT/usr/local/lib/pivilion/common.sh"
PIVILION_BOOT_ROOT="$TMP/boot"
export PIVILION_BOOT_ROOT
@ -47,6 +48,12 @@ EOF
[ "$(pivilion_state_value active_mode)" = hotspot ]
[ "$(pivilion_state_value health)" = degraded ]
[ "$(pivilion_state_value missing fallback)" = fallback ]
printf 'hotspot\n' > "$PIVILION_SELECTED_MODE_FILE"
[ "$(pivilion_selected_mode)" = hotspot ]
printf 'onion\n' > "$PIVILION_SELECTED_MODE_FILE"
[ "$(pivilion_selected_mode)" = onion ]
printf 'invalid\n' > "$PIVILION_SELECTED_MODE_FILE"
if pivilion_selected_mode >/dev/null 2>&1; then exit 1; fi
pivilion_print_issue > "$TMP/pivilion.issue"
grep -Fqx 'My IP address is \4{wlan-test}' "$TMP/pivilion.issue"