Files
ubuntu-based-kiosk/menus/complete_uninstall.sh
T
Claude 24c95c91f2 Add Library Catalog addon, lib/docker.sh and tests
- lib/docker.sh: shared Docker/Compose tooling (on-demand install via apt or
  get.docker.com, compose wrapper, container state/health, HTTP wait)
- menus/addon_library.sh: install/update/uninstall the Koha + Quick Add stack
  from library/ to /opt/kiosk-library, add the catalogue as a kiosk page
  (duration 0), choose kiosk-only vs LAN access, show addresses and login
- wire into install.sh menu, complete_uninstall and clone_settings
- tests/addon_library.test.sh: 41 checks against a stub sudo/docker and a
  fixture stack (no root, Docker or network needed)

Note: the 'network access' choice relies on a BIND_ADDR setting in the
library stack, added in a follow-up commit.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013wi3ZSot4XbUViwRFgLpRf
2026-11-06 10:29:22 +00:00

160 lines
5.9 KiB
Bash

#!/bin/bash
################################################################################
# menus/complete_uninstall.sh - "Complete Uninstall" (Core Settings): full
# teardown, returning the machine to its pre-kiosk state.
#
# Composed from every other addon's own silent uninstall helper
# (cups_do_uninstall, vnc_do_uninstall, wireguard_do_uninstall,
# tailscale_do_uninstall, netbird_do_uninstall, lms_do_uninstall,
# squeezelite_do_uninstall, asterisk_intercom_do_uninstall,
# webui_do_uninstall, library_do_uninstall, power_schedule_do_remove_all,
# emergency_hotspot_do_disable, time_sync_do_reset) instead of
# re-implementing removal logic for each addon a second time here - if an
# addon's uninstall logic changes, this picks it up automatically. Only
# the pieces no single addon owns - the kiosk user/files, Node.js/
# LightDM/Openbox, polkit rules, leftover systemd units - are handled
# directly below, same as the legacy script.
#
# Ordering matters: every addon teardown runs before the kiosk user is
# removed, because asterisk_intercom_do_uninstall still needs
# `id -u "$KIOSK_USER"` to resolve that user's systemd --user session.
#
# After this runs, the kiosk user (and therefore is_kiosk_installed) is
# gone - install.sh itself will refuse to start against this machine
# again until a fresh install re-provisions it. That's intentional:
# there is nothing left here for this tool to manage.
#
# Depends on: lib/menu.sh, lib/config.sh, and every menus/addon_*.sh /
# menus/power_schedule.sh / menus/advanced_emergency_hotspot.sh being
# sourced first (for the *_do_uninstall helpers above).
################################################################################
complete_uninstall_status() {
echo "⚠ Removes the kiosk user, every addon, and returns this machine"
echo " to its pre-kiosk state. Cannot be undone."
}
complete_uninstall_menu_builder() {
MENU_LABELS=("Completely uninstall the kiosk")
MENU_HANDLERS=(action_complete_uninstall)
}
complete_uninstall_menu() {
run_menu "COMPLETE UNINSTALL" complete_uninstall_menu_builder complete_uninstall_status
}
################################################################################
# Actions
################################################################################
action_complete_uninstall() {
echo
echo "⚠️ This will COMPLETELY REMOVE:"
echo " • Kiosk user and all data"
echo " • All kiosk configuration and sites"
echo " • All Electron/Node.js installations"
echo " • All browser caches and data"
echo " • CUPS printer system"
echo " • Squeezelite and LMS (Lyrion Music Server)"
echo " • Remote access (VNC, WireGuard, Tailscale, Netbird)"
echo " • Asterisk Intercom (Baresip)"
echo " • Web UI"
echo " • Library Catalog (Koha) and ALL the books in it"
echo " • LightDM and Openbox"
echo " • All kiosk schedules and services"
echo " • Emergency hotspot configuration"
echo " • LAN time server setting (back to Ubuntu's defaults)"
echo
echo "⚠️ This CANNOT be undone!"
echo
local confirm
confirm=$(ask_text "Type UNINSTALL to confirm" "")
if [[ "$confirm" != "UNINSTALL" ]]; then
echo "Cancelled"
pause
return
fi
echo
echo "Beginning complete uninstall..."
echo "[1/12] Stopping kiosk display..."
sudo systemctl stop lightdm 2>/dev/null || true
echo "[2/12] Removing addons..."
cups_do_uninstall
vnc_do_uninstall
wireguard_do_uninstall
tailscale_do_uninstall
netbird_do_uninstall
lms_do_uninstall purge
squeezelite_do_uninstall
asterisk_intercom_do_uninstall purge
webui_do_uninstall
library_do_uninstall purge
echo "[3/12] Removing schedules, emergency hotspot and time server setting..."
power_schedule_do_remove_all
emergency_hotspot_do_disable
time_sync_do_reset
# Must come after every addon teardown above - Asterisk Intercom's
# helper still needs this user to resolve its systemd --user session.
echo "[4/12] Removing kiosk user..."
if id "$KIOSK_USER" &>/dev/null; then
sudo pkill -u "$KIOSK_USER" 2>/dev/null || true
sudo userdel -r "$KIOSK_USER" 2>/dev/null || true
log_success "Kiosk user removed"
fi
echo "[5/12] Removing kiosk files..."
sudo rm -rf "$KIOSK_DIR"
sudo rm -rf "$KIOSK_HOME"
echo "[6/12] Removing remaining systemd units..."
sudo rm -f "$SYSTEMD_DIR"/kiosk-*.service
sudo rm -f "$SYSTEMD_DIR"/kiosk-*.timer
sudo systemctl daemon-reload 2>/dev/null || true
echo "[7/12] Removing remaining scripts..."
sudo rm -f "$BIN_DIR"/kiosk-*
sudo rm -f "$SUDOERS_D_DIR/kiosk-wifi"
sudo rm -f /etc/udev/rules.d/99-kiosk-hotplug.rules
sudo udevadm control --reload-rules 2>/dev/null || true
echo "[8/12] Removing Node.js..."
sudo apt-get purge -y nodejs npm 2>/dev/null || true
sudo rm -rf /usr/local/lib/node_modules
sudo rm -rf /usr/local/bin/node
sudo rm -rf /usr/local/bin/npm
echo "[9/12] Removing LightDM and Openbox..."
sudo systemctl disable lightdm 2>/dev/null || true
sudo apt-get purge -y lightdm openbox 2>/dev/null || true
echo "[10/12] Removing polkit rules..."
sudo rm -f "$POLKIT_DIR/kiosk-power.pkla"
sudo rm -f "$POLKIT_DIR/kiosk-printing.pkla"
echo "[11/12] Re-enabling virtual consoles..."
for i in {1..8}; do
sudo systemctl unmask "getty@tty${i}.service" 2>/dev/null || true
done
sudo systemctl daemon-reload 2>/dev/null || true
echo "[12/12] Cleaning up packages..."
sudo apt-get autoremove -y 2>/dev/null || true
sudo apt-get autoclean 2>/dev/null || true
echo
log_success "Kiosk completely uninstalled"
echo "The system has been returned to its pre-kiosk state."
echo "You may want to reboot to ensure all changes take effect."
echo
if ask_yes_no "Reboot now?" "n"; then
echo "Rebooting in 3 seconds..."
sleep 3
sudo reboot
fi
}