This repository has been archived on 2026-10-28. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files

114 lines
2.8 KiB
Bash
Executable File

#!/bin/sh
set -eu
KARLDNS_INSTALL_MODE="${KARLDNS_INSTALL_MODE:-auto}"
KARLDNS_DELETE_CONFIG="${KARLDNS_DELETE_CONFIG:-0}"
usage() {
cat <<'EOF'
KarlDNS Linux uninstaller
Usage:
uninstall-linux.sh [options]
Options:
--mode MODE auto, system, or user. Default: auto
--delete-config Also delete saved private URLs and the last-IP cache
-h, --help Show this help
EOF
}
while [ "$#" -gt 0 ]; do
case "$1" in
--mode) KARLDNS_INSTALL_MODE="${2:?missing value for --mode}"; shift 2 ;;
--delete-config) KARLDNS_DELETE_CONFIG=1; shift ;;
-h|--help) usage; exit 0 ;;
*) echo "KarlDNS uninstaller: unknown option: $1" >&2; usage >&2; exit 1 ;;
esac
done
remove_user() {
config_dir="${XDG_CONFIG_HOME:-$HOME/.config}/karldns"
cache_dir="${XDG_CACHE_HOME:-$HOME/.cache}/karldns"
updater_path="${HOME}/.local/bin/karldns-update"
cron_file="$(mktemp)"
if command -v crontab >/dev/null 2>&1; then
crontab -l 2>/dev/null | awk '
$0 == "# karldns-update start" {skip = 1; next}
$0 == "# karldns-update end" {skip = 0; next}
skip != 1 {print}
' > "$cron_file" || true
crontab "$cron_file"
fi
rm -f "$cron_file" "$updater_path"
if [ "$KARLDNS_DELETE_CONFIG" = "1" ]; then
rm -rf "$config_dir" "$cache_dir"
fi
}
remove_marked_crontab_file() {
cron_file="$1"
[ -f "$cron_file" ] || return 0
tmp_file="$(mktemp)"
awk '
$0 == "# karldns-update start" {skip = 1; next}
$0 == "# karldns-update end" {skip = 0; next}
skip != 1 {print}
' "$cron_file" > "$tmp_file"
cat "$tmp_file" > "$cron_file"
rm -f "$tmp_file"
}
remove_marked_root_crontab() {
if ! command -v crontab >/dev/null 2>&1; then
return 0
fi
tmp_file="$(mktemp)"
crontab -l 2>/dev/null | awk '
$0 == "# karldns-update start" {skip = 1; next}
$0 == "# karldns-update end" {skip = 0; next}
skip != 1 {print}
' > "$tmp_file" || true
crontab "$tmp_file"
rm -f "$tmp_file"
}
remove_system() {
if [ "$(id -u)" -ne 0 ]; then
echo "System uninstall needs root. Re-run with sudo or set --mode user." >&2
exit 1
fi
rm -f /etc/cron.d/karldns-updater /usr/local/bin/karldns-update
remove_marked_crontab_file /etc/crontabs/root
remove_marked_root_crontab
if [ "$KARLDNS_DELETE_CONFIG" = "1" ]; then
rm -rf /etc/karldns /var/cache/karldns
fi
}
case "$KARLDNS_INSTALL_MODE" in
auto)
if [ "$(id -u)" -eq 0 ]; then
KARLDNS_INSTALL_MODE="system"
else
KARLDNS_INSTALL_MODE="user"
fi
;;
user|system) ;;
*) echo "KARLDNS_INSTALL_MODE must be auto, user, or system" >&2; exit 1 ;;
esac
if [ "$KARLDNS_INSTALL_MODE" = "system" ]; then
remove_system
else
remove_user
fi
echo "KarlDNS uninstalled from $KARLDNS_INSTALL_MODE mode."
if [ "$KARLDNS_DELETE_CONFIG" = "0" ]; then
echo "Saved private URLs were kept. Re-run with --delete-config to remove them."
fi