132 lines
3.7 KiB
Bash
Executable File
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."
|