diff --git a/pbs-client-uninstaller.sh b/pbs-client-uninstaller.sh new file mode 100644 index 0000000..ea3cd87 --- /dev/null +++ b/pbs-client-uninstaller.sh @@ -0,0 +1,242 @@ +#!/bin/bash +set -e + +# Colors for output +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' # No Color + +CONFIG_DIR="/etc/proxmox-backup-client" + +# Helper functions +log() { + echo -e "${GREEN}[$(date +'%Y-%m-%d %H:%M:%S')]${NC} $1" +} + +error() { + echo -e "${RED}[ERROR]${NC} $1" >&2 +} + +warn() { + echo -e "${YELLOW}[WARN]${NC} $1" +} + +info() { + echo -e "${BLUE}[INFO]${NC} $1" +} + +prompt() { + local prompt_text="$1" + local default_value="$2" + local user_input + + if [ -n "$default_value" ]; then + read -p "$(echo -e ${BLUE}${prompt_text}${NC} [${default_value}]: )" user_input + echo "${user_input:-$default_value}" + else + read -p "$(echo -e ${BLUE}${prompt_text}${NC}: )" user_input + echo "$user_input" + fi +} + +# Check if running as root +check_root() { + if [ "$EUID" -ne 0 ]; then + error "This script must be run as root (use sudo)" + exit 1 + fi +} + +# Detect Linux distribution +detect_distro() { + if [ -f /etc/os-release ]; then + . /etc/os-release + OS=$ID + else + error "Cannot detect Linux distribution" + exit 1 + fi + + OS=$(echo "$OS" | tr '[:upper:]' '[:lower:]') +} + +# Confirm uninstallation +confirm_uninstall() { + echo + echo "╔════════════════════════════════════════╗" + echo "║ PBS Client Uninstaller ║" + echo "╚════════════════════════════════════════╝" + echo + + warn "This will remove:" + echo " - Proxmox Backup Client software" + echo " - Systemd service and timer" + echo " - Configuration files in $CONFIG_DIR" + echo " - Repository configuration" + echo + info "This will NOT remove:" + echo " - Your backups on the PBS server" + echo " - Encryption keys in /root/.config/proxmox-backup/" + echo + + CONFIRM=$(prompt "Are you sure you want to uninstall? (yes/no)" "no") + if [[ "$CONFIRM" != "yes" ]]; then + info "Uninstallation cancelled" + exit 0 + fi + + KEEP_ENCRYPTION_KEY=$(prompt "Keep encryption key? (yes/no)" "yes") +} + +# Stop and disable systemd service +remove_systemd_service() { + log "Stopping and disabling systemd services..." + + if systemctl is-active --quiet pbs-backup.timer; then + systemctl stop pbs-backup.timer + fi + + if systemctl is-enabled --quiet pbs-backup.timer; then + systemctl disable pbs-backup.timer + fi + + if systemctl is-active --quiet pbs-backup.service; then + systemctl stop pbs-backup.service + fi + + # Remove service files + rm -f /etc/systemd/system/pbs-backup.service + rm -f /etc/systemd/system/pbs-backup.timer + + systemctl daemon-reload + + log "Systemd services removed" +} + +# Remove configuration +remove_config() { + log "Removing configuration files..." + + if [ -d "$CONFIG_DIR" ]; then + rm -rf "$CONFIG_DIR" + log "Configuration directory removed: $CONFIG_DIR" + fi + + # Remove encryption key if requested + if [[ "$KEEP_ENCRYPTION_KEY" == "no" ]]; then + if [ -d /root/.config/proxmox-backup ]; then + rm -rf /root/.config/proxmox-backup + log "Encryption keys removed" + fi + + # Remove paper backups + rm -f /root/pbs-encryption-key-*.txt + else + warn "Encryption keys preserved in /root/.config/proxmox-backup/" + warn "Paper backups preserved: /root/pbs-encryption-key-*.txt" + fi +} + +# Uninstall PBS client on Ubuntu/Debian +uninstall_debian_based() { + log "Uninstalling PBS client on $OS..." + + if dpkg -l | grep -q proxmox-backup-client; then + apt-get remove -y proxmox-backup-client + apt-get autoremove -y + log "PBS client package removed" + fi + + # Remove repository files + rm -f /etc/apt/sources.list.d/pbs-client.list + rm -f /etc/apt/sources.list.d/focal-security.list + + # Remove GPG keys + rm -f /etc/apt/trusted.gpg.d/proxmox-release-*.gpg + + apt-get update -qq + + log "Repository configuration removed" +} + +# Uninstall PBS client on Arch +uninstall_arch() { + log "Uninstalling PBS client on Arch Linux..." + + # Get the user who invoked sudo + if [ -n "$SUDO_USER" ]; then + REAL_USER="$SUDO_USER" + else + warn "Cannot determine original user, attempting removal as root" + REAL_USER="root" + fi + + if pacman -Q proxmox-backup-client-bin &>/dev/null; then + if [ "$REAL_USER" != "root" ]; then + sudo -u "$REAL_USER" yay -R --noconfirm proxmox-backup-client-bin + else + pacman -R --noconfirm proxmox-backup-client-bin + fi + log "PBS client package removed" + elif pacman -Q proxmox-backup-client &>/dev/null; then + if [ "$REAL_USER" != "root" ]; then + sudo -u "$REAL_USER" yay -R --noconfirm proxmox-backup-client + else + pacman -R --noconfirm proxmox-backup-client + fi + log "PBS client package removed" + fi +} + +# Main uninstall function +uninstall_pbs_client() { + case "$OS" in + ubuntu|debian) + uninstall_debian_based + ;; + arch|archlinux) + uninstall_arch + ;; + *) + warn "Unknown distribution: $OS" + warn "Manual package removal may be required" + ;; + esac +} + +# Show completion message +show_completion() { + echo + echo "======================================" + echo " Uninstallation Complete" + echo "======================================" + echo + log "PBS client has been uninstalled" + + if [[ "$KEEP_ENCRYPTION_KEY" == "yes" ]]; then + info "Encryption keys preserved:" + echo " /root/.config/proxmox-backup/encryption-key.json" + echo " /root/pbs-encryption-key-*.txt" + echo + warn "Remember to backup these keys before removing the system!" + fi + + info "Your backups on the PBS server remain intact" + info "You can reinstall the client at any time to access them" + echo +} + +# Main execution +main() { + check_root + detect_distro + confirm_uninstall + remove_systemd_service + remove_config + uninstall_pbs_client + show_completion +} + +main "$@"