autoNAS / scripts / autonas-uninstall.sh
5bf8614 3 months ago History
1 contributor
116 lines | 3.628kb
#!/bin/bash

set -euo pipefail

PROJECT_ID="autonas"
ORG_ID="xdev"
RUNTIME_DIR="/usr/local/lib/${ORG_ID}/${PROJECT_ID}"
LEGACY_RUNTIME_DIR="/usr/local/lib/autonas"
COMMAND_PATH="/usr/local/sbin/autonas"
UNINSTALL_WRAPPER="/usr/local/sbin/${ORG_ID}-${PROJECT_ID}-uninstall"
DOC_DIR="/usr/local/share/doc/${ORG_ID}/${PROJECT_ID}"
DEFAULTS_PATH="/etc/default/${ORG_ID}-${PROJECT_ID}"
CONFIG_DIR="/etc/pve/autonas"
ATTACH_UNIT="autonas-attach@.service"
MAIN_UNIT="autonas.service"
BOOT_SCAN_UNIT="autonas-boot-scan.service"
DISK_RULES="99-autonas-disk.rules"
INTERFACE_RULES="98-autonas-interfaces.rules"
NFS_DROPIN_DIR="/etc/systemd/system/nfs-server.service.d"
NFS_DROPIN_FILE="${NFS_DROPIN_DIR}/50-autonas-self-hosted-proxmox.conf"

FORCE_MODE=0

log_message() {
    if [[ "${FORCE_MODE}" -eq 0 ]]; then
        echo "$@"
    fi
}

require_root() {
    if [[ "${EUID}" -ne 0 ]]; then
        echo "ERROR: this script must be run as root" >&2
        exit 1
    fi
}

main() {
    while [[ $# -gt 0 ]]; do
        case "$1" in
            --force)
                FORCE_MODE=1
                shift
                ;;
            -h|--help)
                echo "Usage: $0 [--force]"
                exit 0
                ;;
            *)
                echo "ERROR: unknown option: $1" >&2
                exit 1
                ;;
        esac
    done

    require_root

    log_message "=== Uninstalling AutoNAS ==="

    systemctl disable --now autonas-boot-scan.service >/dev/null 2>&1 || true
    systemctl disable --now autonas.service >/dev/null 2>&1 || true
    systemctl stop "autonas-attach@*.service" >/dev/null 2>&1 || true
    systemctl disable "autonas-attach@*.service" >/dev/null 2>&1 || true

    rm -f "/etc/systemd/system/${ATTACH_UNIT}"
    rm -f "/etc/systemd/system/${MAIN_UNIT}"
    rm -f "/etc/systemd/system/${BOOT_SCAN_UNIT}"
    rm -f "${NFS_DROPIN_FILE}"
    rmdir "${NFS_DROPIN_DIR}" 2>/dev/null || true
    systemctl daemon-reload

    rm -f "/etc/udev/rules.d/${DISK_RULES}"
    rm -f "/etc/udev/rules.d/${INTERFACE_RULES}"
    udevadm control --reload-rules >/dev/null 2>&1 || true

    rm -f "${UNINSTALL_WRAPPER}"
    rm -f "${COMMAND_PATH}"
    rm -f "${DEFAULTS_PATH}"
    rm -rf "${DOC_DIR}"
    rm -rf "${RUNTIME_DIR}"

    rm -f /usr/local/bin/autonas
    rm -f /usr/local/bin/autonas.sh
    rm -f /usr/local/bin/autonas-core.sh
    rm -f /usr/local/bin/autonas-disk-handler.sh
    rm -f /usr/local/bin/autonas-udev-wrapper.sh
    rm -f /usr/local/bin/autonas-boot-scan.sh
    rm -f /usr/local/bin/autonas-network-handler.sh
    rm -f /usr/local/bin/autonas-media-importer.sh
    rm -f /usr/local/bin/autonas-uninstall.sh
    rm -f /usr/local/bin/autonas-interface-debug.sh
    rm -f /usr/local/bin/autonas-test-interface-stability.sh
    rm -rf "${LEGACY_RUNTIME_DIR}"

    rmdir "/usr/local/lib/${ORG_ID}" 2>/dev/null || true
    rmdir "/usr/local/share/doc/${ORG_ID}" 2>/dev/null || true

    log_message "Preserved cluster-shared config:"
    log_message "  - ${CONFIG_DIR}/"
    if [[ -f "${CONFIG_DIR}/disks.conf" ]]; then
        log_message "  - ${CONFIG_DIR}/disks.conf"
    fi

    if mount | grep -q "/mnt/autonas/"; then
        log_message "Preserved mounted data paths under /mnt/autonas/"
    elif [[ -d "/mnt/autonas" ]] && [[ -z "$(ls -A /mnt/autonas 2>/dev/null)" ]]; then
        rmdir /mnt/autonas 2>/dev/null || true
    fi

    if [[ -f /etc/exports ]] && grep -q "/mnt/autonas/" /etc/exports 2>/dev/null; then
        log_message "NFS exports referencing /mnt/autonas/ were preserved for manual review."
    fi

    log_message "Uninstall complete."
}

main "$@"