diff --git a/install/agent-install.sh b/install/agent-install.sh index db7fbf4..19448bc 100644 --- a/install/agent-install.sh +++ b/install/agent-install.sh @@ -11,7 +11,7 @@ if [ -z "$SERVER_URL" ] || [ -z "$AGENT_KEY" ]; then exit 1 fi -# Detect if we can run as root (try non-interactive sudo) +# Detect if we can run as root CAN_ROOT=false if [ "$(id -u)" -eq 0 ]; then CAN_ROOT=true @@ -20,9 +20,7 @@ elif command -v sudo >/dev/null 2>&1 && sudo -n true 2>/dev/null; then fi if [ "$CAN_ROOT" = true ]; then - # ── Root/system mode ── if [ "$(id -u)" -ne 0 ]; then - # Re-exec with script PTY if available (handles requiretty) if command -v script >/dev/null 2>&1; then exec script -q -c "sudo bash '$0' '$1' '$2' '$3'" /dev/null fi @@ -30,46 +28,26 @@ if [ "$CAN_ROOT" = true ]; then fi AGENT_BIN="/usr/local/bin/servermanager-agent" - CONFIG_DIR="/etc/servermanager" - CONFIG_FILE="$CONFIG_DIR/agent.conf" SERVICE_FILE="/etc/systemd/system/servermanager-agent.service" USE_SYSTEMD=true INSTALL_MODE="system" else - # ── User/no-root mode ── AGENT_BIN="$HOME/.local/bin/servermanager-agent" - CONFIG_DIR="$HOME/.config/servermanager" - CONFIG_FILE="$CONFIG_DIR/agent.conf" USE_SYSTEMD=false INSTALL_MODE="user" fi -echo "[1/4] Creating directories..." +echo "[1/3] Creating directory..." mkdir -p "$(dirname "$AGENT_BIN")" -mkdir -p "$CONFIG_DIR" -echo "[2/4] Installing agent binary..." +echo "[2/3] Installing agent binary..." cat > "$AGENT_BIN" << 'AGENTSCRIPT' #!/bin/bash set -e -# Config search order: 1st arg > /etc/servermanager/agent.conf > $HOME/.config/servermanager/agent.conf -if [ -n "$1" ] && [ -f "$1" ]; then - CONFIG_FILE="$1" -elif [ -f "/etc/servermanager/agent.conf" ]; then - CONFIG_FILE="/etc/servermanager/agent.conf" -else - CONFIG_FILE="$HOME/.config/servermanager/agent.conf" -fi - -load_config() { - if [ -f "$CONFIG_FILE" ]; then - source "$CONFIG_FILE" - fi - SERVER_URL="${SERVER_URL:-}" - AGENT_KEY="${AGENT_KEY:-}" - INTERVAL="${INTERVAL:-60}" -} +SERVER_URL="@SERVER_URL@" +AGENT_KEY="@AGENT_KEY@" +INTERVAL=@INTERVAL@ collect_metrics() { CPU=$(top -bn1 2>/dev/null | grep 'Cpu(s)' | awk '{print $2}' | cut -d'%' -f1) @@ -103,24 +81,22 @@ EOF -o /dev/null -w "%{http_code}" 2>/dev/null || echo "000" } -run() { - load_config - if [ -z "$SERVER_URL" ] || [ -z "$AGENT_KEY" ]; then - echo "ERROR: SERVER_URL and AGENT_KEY not configured" - exit 1 - fi - echo "ServerManager Agent started (interval: ${INTERVAL}s)" - sleep 2 - while true; do - collect_metrics - http_code=$(push_metrics) - echo "[$(date)] HTTP $http_code" - sleep "$INTERVAL" - done -} - -run +echo "ServerManager Agent started (interval: ${INTERVAL}s)" +sleep 2 +while true; do + collect_metrics + http_code=$(push_metrics) + echo "[$(date)] HTTP $http_code" + sleep "$INTERVAL" +done AGENTSCRIPT + +sed -i \ + "s|@SERVER_URL@|$SERVER_URL|g" \ + -e "s|@AGENT_KEY@|$AGENT_KEY|g" \ + -e "s|@INTERVAL@|$INTERVAL|g" \ + "$AGENT_BIN" + chmod +x "$AGENT_BIN" if [ ! -f "$AGENT_BIN" ]; then @@ -129,15 +105,7 @@ if [ ! -f "$AGENT_BIN" ]; then fi echo " Binary: $AGENT_BIN ($(wc -c < "$AGENT_BIN") bytes)" -echo "[3/4] Writing config..." -cat > "$CONFIG_FILE" << EOF -SERVER_URL="$SERVER_URL" -AGENT_KEY="$AGENT_KEY" -INTERVAL=$INTERVAL -EOF -chmod 600 "$CONFIG_FILE" - -echo "[4/4] Enabling auto-start..." +echo "[3/3] Enabling auto-start..." if [ "$USE_SYSTEMD" = true ]; then echo " Using systemd service..." @@ -148,7 +116,7 @@ After=network-online.target Wants=network-online.target [Service] Type=simple -ExecStart=/usr/local/bin/servermanager-agent /etc/servermanager/agent.conf +ExecStart=/usr/local/bin/servermanager-agent Restart=always RestartSec=10 [Install] @@ -159,9 +127,11 @@ UNIT systemctl restart servermanager-agent 2>/dev/null || true else echo " Using crontab (@reboot)..." - CRON_JOB="@reboot $AGENT_BIN $CONFIG_FILE > $CONFIG_DIR/agent.log 2>&1" - (crontab -l 2>/dev/null | grep -v '_sm_agent\|servermanager-agent'; echo "$CRON_JOB") | crontab - 2>/dev/null || { - echo "WARNING: Could not install crontab. Agent must be started manually." + LOG_DIR="$HOME/.local/share/servermanager" + mkdir -p "$LOG_DIR" + CRON_JOB="@reboot $AGENT_BIN > $LOG_DIR/agent.log 2>&1" + (crontab -l 2>/dev/null | grep -v 'servermanager-agent'; echo "$CRON_JOB") | crontab - 2>/dev/null || { + echo "WARNING: Could not install crontab." echo " Run: $AGENT_BIN &" } fi @@ -170,4 +140,4 @@ echo "" echo "ServerManager Agent installed successfully!" echo " Mode: $INSTALL_MODE" echo " Binary: $AGENT_BIN" -echo " Config: $CONFIG_FILE" +echo " Config: embedded in binary (no external config file)"