#!/bin/bash # install.sh — deploy adguard-register to this host # Works as root (system install) or regular user (user install with sudo) set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" if [ "$(id -u)" -eq 0 ]; then # Root: system-wide install BIN_PATH="/usr/local/bin/adguard-register" SERVICE_PATH="/etc/systemd/system/adguard-register.service" SERVICE_TYPE="system" else # Non-root: user install, try sudo for systemd, fall back to cron BIN_PATH="${HOME}/.local/bin/adguard-register" mkdir -p "${HOME}/.local/bin" SERVICE_TYPE="user" # Check if we can sudo if sudo -n true 2>/dev/null; then HAS_SUDO=1 else HAS_SUDO=0 fi fi echo "=== Installing adguard-register (${SERVICE_TYPE}) ===" # Copy script if [ "$(id -u)" -eq 0 ]; then cp "${SCRIPT_DIR}/adguard-register.sh" "${BIN_PATH}" else # May need sudo for the copy if dir is protected cp "${SCRIPT_DIR}/adguard-register.sh" "${BIN_PATH}" 2>/dev/null || \ sudo cp "${SCRIPT_DIR}/adguard-register.sh" "${BIN_PATH}" fi chmod +x "${BIN_PATH}" echo "→ Installed ${BIN_PATH}" # Install service if [ "${SERVICE_TYPE}" = "system" ]; then # System service (root) cat > "${SERVICE_PATH}" << 'SERVICEOF' [Unit] Description=Register host with AdGuard Home DNS After=network-online.target Wants=network-online.target [Service] Type=oneshot ExecStart=/usr/local/bin/adguard-register RemainAfterExit=yes [Install] WantedBy=multi-user.target SERVICEOF echo "→ Created ${SERVICE_PATH}" systemctl daemon-reload systemctl enable adguard-register.service echo "→ Enabled adguard-register.service" systemctl start adguard-register.service 2>&1 || true echo "→ Registration result:" systemctl status adguard-register.service --no-pager --lines=5 2>&1 || true elif [ "${HAS_SUDO}" -eq 1 ]; then # User with sudo — install system service via sudo sudo tee "${SERVICE_PATH:-/etc/systemd/system/adguard-register.service}" > /dev/null << 'SERVICEOF' [Unit] Description=Register host with AdGuard Home DNS After=network-online.target Wants=network-online.target [Service] Type=oneshot ExecStart=/usr/local/bin/adguard-register RemainAfterExit=yes [Install] WantedBy=multi-user.target SERVICEOF sudo cp "${BIN_PATH}" /usr/local/bin/adguard-register sudo chmod +x /usr/local/bin/adguard-register BIN_PATH="/usr/local/bin/adguard-register" sudo systemctl daemon-reload sudo systemctl enable adguard-register.service echo "→ Enabled adguard-register.service (system via sudo)" sudo systemctl start adguard-register.service 2>&1 || true sudo systemctl status adguard-register.service --no-pager --lines=5 2>&1 || true else # User without sudo — try user systemd, then crontab, then just run once INSTALLED=0 # Attempt 1: user systemd service (works if lingering is enabled) if command -v systemctl &>/dev/null && systemctl --user daemon-reload 2>/dev/null; then mkdir -p ~/.config/systemd/user cat > ~/.config/systemd/user/adguard-register.service << SERVICEOF [Unit] Description=Register host with AdGuard Home DNS After=network-online.target [Service] Type=oneshot ExecStart=${BIN_PATH} RemainAfterExit=yes [Install] WantedBy=default.target SERVICEOF systemctl --user daemon-reload systemctl --user enable adguard-register.service 2>/dev/null && { echo "→ Enabled user systemd service" systemctl --user start adguard-register.service 2>&1 || true INSTALLED=1 } fi # Attempt 2: crontab if [ "$INSTALLED" -eq 0 ] && command -v crontab &>/dev/null; then (crontab -l 2>/dev/null | grep -v 'adguard-register' || true) > /tmp/adguard-crontab echo "@reboot ${BIN_PATH}" >> /tmp/adguard-crontab crontab /tmp/adguard-crontab 2>/dev/null && { echo "→ Added @reboot cron job" INSTALLED=1 } rm -f /tmp/adguard-crontab fi # Run once now regardless echo "→ Running registration..." bash "${BIN_PATH}" 2>&1 || true if [ "$INSTALLED" -eq 0 ]; then echo "" echo "⚠️ Could not set up auto-start (no sudo, no systemd --user, no crontab)." echo " The script is installed at ${BIN_PATH}" echo " Run it manually or set up auto-start yourself." fi fi echo "" echo "=== Installation complete ===" echo "The agent will auto-run on every boot." echo "To manually re-register: ${BIN_PATH}"