fix: dual-mode installer — works with or without sudo

Installer now detects at runtime if it can get root access:
- Root/NOPASSWD sudo: installs to system directories with systemd
- No root: installs to ~/.local/bin with @reboot cron job

Self-elevation uses 'script -qc sudo bash' for requiretty, or falls
back to user mode without hanging on password prompts.

Uninstaller checks both system and user paths.
This commit is contained in:
2026-06-11 19:12:57 -04:00
parent 0edc882f2e
commit fd3cc6825c
3 changed files with 94 additions and 67 deletions

View File

@@ -1,29 +1,35 @@
#!/bin/bash
# ServerManager Agent Uninstaller
# Self-elevate if not running as root
if [ "$(id -u)" -ne 0 ]; then
if command -v script >/dev/null 2>&1; then
exec script -q -c "sudo bash '$0'" /dev/null
fi
exec sudo bash "$0"
# Try system paths first, fall back to user paths
if [ -f /usr/local/bin/servermanager-agent ]; then
echo "[1/3] Stopping and disabling service..."
systemctl stop servermanager-agent 2>/dev/null || true
systemctl disable servermanager-agent 2>/dev/null || true
systemctl daemon-reload 2>/dev/null || true
echo "[2/3] Removing system files..."
rm -f /usr/local/bin/servermanager-agent 2>/dev/null || true
rm -rf /etc/servermanager 2>/dev/null || true
rm -f /etc/systemd/system/servermanager-agent.service 2>/dev/null || true
echo "[3/3] Reloading systemd..."
systemctl daemon-reload 2>/dev/null || true
elif [ -f "$HOME/.local/bin/servermanager-agent" ]; then
echo "[1/2] Removing cron job..."
crontab -l 2>/dev/null | grep -v 'servermanager-agent' | crontab - 2>/dev/null || true
echo "[2/2] Removing user files..."
rm -f "$HOME/.local/bin/servermanager-agent" 2>/dev/null || true
rm -rf "$HOME/.config/servermanager" 2>/dev/null || true
else
echo "Agent is not installed."
# Still try to clean up any leftover system files
rm -f /usr/local/bin/servermanager-agent 2>/dev/null || true
rm -rf /etc/servermanager 2>/dev/null || true
rm -f /etc/systemd/system/servermanager-agent.service 2>/dev/null || true
systemctl daemon-reload 2>/dev/null || true
crontab -l 2>/dev/null | grep -v 'servermanager-agent' | crontab - 2>/dev/null || true
fi
AGENT_BIN="/usr/local/bin/servermanager-agent"
CONFIG_DIR="/etc/servermanager"
SERVICE_FILE="/etc/systemd/system/servermanager-agent.service"
echo "[1/3] Stopping and disabling service..."
systemctl stop servermanager-agent 2>/dev/null || true
systemctl disable servermanager-agent 2>/dev/null || true
systemctl daemon-reload 2>/dev/null || true
echo "[2/3] Removing files..."
rm -f "$AGENT_BIN" 2>/dev/null || true
rm -rf "$CONFIG_DIR" 2>/dev/null || true
rm -f "$SERVICE_FILE" 2>/dev/null || true
echo "[3/3] Reloading systemd..."
systemctl daemon-reload 2>/dev/null || true
echo "ServerManager Agent uninstalled successfully."