Files
mirage/scripts/uninstall.sh

132 lines
3.7 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
MIRAGE_USER="${MIRAGE_USER:-mirage}"
MIRAGE_GROUP="${MIRAGE_GROUP:-mirage}"
MIRROR_ROOT="${MIRAGE_MIRROR_ROOT:-/srv/www/mirrors}"
DATA_DIR="${MIRAGE_DATA_DIR:-/var/lib/mirage}"
LOG_DIR="${MIRAGE_LOG_DIR:-/var/log/mirage}"
VENV_DIR="${MIRAGE_VENV_DIR:-/opt/mirage/venv}"
MIRAGE_BIN_LINK="${MIRAGE_BIN_LINK:-/usr/local/bin/mirage}"
CONFIG_DIR="/etc/mirage"
CONFIG_FILE="$CONFIG_DIR/config.toml"
PURGE_DATA=0
if [ "${1:-}" = "--purge" ]; then
PURGE_DATA=1
fi
if [ "$(id -u)" -ne 0 ]; then
echo "ERROR: uninstall.sh must be run as root (e.g. via sudo)" >&2
exit 1
fi
echo "==> Uninstalling Mirage"
echo " Mirage user: $MIRAGE_USER"
echo " Mirage group: $MIRAGE_GROUP"
echo " Mirror root: $MIRROR_ROOT"
echo " Data dir: $DATA_DIR"
echo " Log dir: $LOG_DIR"
echo " Venv dir: $VENV_DIR"
echo " Config file: $CONFIG_FILE"
echo " CLI symlink: $MIRAGE_BIN_LINK"
echo " Purge data: $PURGE_DATA"
echo
safe_rm_dir() {
local d="$1"
if [ -z "$d" ] || [ "$d" = "/" ]; then
echo " Refusing to remove unsafe directory '$d'" >&2
return 1
fi
if [ -d "$d" ]; then
echo " Removing directory: $d"
rm -rf "$d"
fi
}
# -------------------------------
# Stop/disable systemd units
# -------------------------------
if command -v systemctl >/dev/null 2>&1; then
echo "==> Stopping systemd units (if running)"
systemctl stop mirage.service mirage-update.service mirage-update.timer 2>/dev/null || true
echo "==> Disabling systemd units"
systemctl disable mirage.service mirage-update.timer 2>/dev/null || true
echo "==> Removing systemd unit files"
rm -f /etc/systemd/system/mirage.service
rm -f /etc/systemd/system/mirage-update.service
rm -f /etc/systemd/system/mirage-update.timer
echo "==> Reloading systemd"
systemctl daemon-reload || true
else
echo "==> systemctl not found; skipping systemd cleanup."
fi
# -------------------------------
# Remove venv
# -------------------------------
if [ -d "$VENV_DIR" ]; then
echo "==> Removing virtualenv at $VENV_DIR"
rm -rf "$VENV_DIR"
fi
# -------------------------------
# Remove CLI symlink (if ours)
# -------------------------------
if [ -L "$MIRAGE_BIN_LINK" ]; then
TARGET="$(readlink -f "$MIRAGE_BIN_LINK")"
if [ "$TARGET" = "$VENV_DIR/bin/mirage" ]; then
echo "==> Removing CLI symlink $MIRAGE_BIN_LINK"
rm -f "$MIRAGE_BIN_LINK"
else
echo "==> Not touching $MIRAGE_BIN_LINK (points to $TARGET, not $VENV_DIR/bin/mirage)"
fi
elif [ -e "$MIRAGE_BIN_LINK" ]; then
echo "==> Not touching $MIRAGE_BIN_LINK (exists but is not a symlink)"
fi
# -------------------------------
# Optional purge of data/config/mirrors/user/group
# -------------------------------
if [ "$PURGE_DATA" -eq 1 ]; then
echo "==> Purging Mirage data/config/mirrors"
# Remove config dir
if [ -d "$CONFIG_DIR" ]; then
echo " Removing config dir: $CONFIG_DIR"
rm -rf "$CONFIG_DIR"
fi
safe_rm_dir "$MIRROR_ROOT"
safe_rm_dir "$DATA_DIR"
safe_rm_dir "$LOG_DIR"
# Remove user/group (best-effort)
if id "$MIRAGE_USER" >/dev/null 2>&1; then
echo " Removing user: $MIRAGE_USER"
userdel "$MIRAGE_USER" 2>/dev/null || true
fi
if getent group "$MIRAGE_GROUP" >/dev/null 2>&1; then
echo " Removing group: $MIRAGE_GROUP"
groupdel "$MIRAGE_GROUP" 2>/dev/null || true
fi
else
echo "==> Leaving mirrors, data, logs, and config on disk."
echo " - Mirrors root: $MIRROR_ROOT"
echo " - Data dir : $DATA_DIR"
echo " - Log dir : $LOG_DIR"
echo " - Config : $CONFIG_FILE"
echo
echo " Run with '--purge' to remove these as well (including user/group)."
fi
echo
echo "==> Mirage uninstall complete."