diff --git a/public_html/agent/install.sh b/public_html/agent/install.sh
index f3878ab..aa185bc 100644
--- a/public_html/agent/install.sh
+++ b/public_html/agent/install.sh
@@ -1,78 +1,62 @@
#!/bin/bash
-# JARVIS Agent Installer
-# Usage: curl -sSL https://raw.githubusercontent.com/myronblair/jarvis/master/agent/install.sh | sudo bash
-# Or: sudo bash install.sh --jarvis-url https://jarvis.orbishosting.com --key YOUR_REGISTRATION_KEY
+# JARVIS Agent Installer — one-liner for any Linux host:
+# curl -sk https://jarvis.orbishosting.com/install-agent.sh | bash -s
+#
+# agent_type: linux | proxmox | homeassistant
+# Example: curl -sk https://jarvis.orbishosting.com/install-agent.sh | bash -s myserver linux
set -e
-JARVIS_URL=""
-REG_KEY=""
-AGENT_TYPE="linux"
+HOSTNAME_ARG="${1:-$(hostname -s)}"
+AGENT_TYPE="${2:-linux}"
+JARVIS_URL="https://165.22.1.228"
+JARVIS_HOST="jarvis.orbishosting.com"
INSTALL_DIR="/opt/jarvis-agent"
CONFIG_DIR="/etc/jarvis-agent"
STATE_DIR="/var/lib/jarvis-agent"
-SERVICE_NAME="jarvis-agent"
+REG_KEY="f846a9aaf7ce9a61742c63c87c4186052a71d2a580c65518"
+SERVICE_FILE="/etc/systemd/system/jarvis-agent.service"
-# ── Parse args ────────────────────────────────────────────────────────────────
-while [[ $# -gt 0 ]]; do
- case "$1" in
- --jarvis-url) JARVIS_URL="$2"; shift 2 ;;
- --key) REG_KEY="$2"; shift 2 ;;
- --type) AGENT_TYPE="$2"; shift 2 ;;
- *) echo "Unknown arg: $1"; exit 1 ;;
- esac
-done
+echo "=== JARVIS Agent Installer v3.0 ==="
+echo "Host: $HOSTNAME_ARG | Type: $AGENT_TYPE | Server: $JARVIS_URL"
-# ── Interactive prompts if not provided ──────────────────────────────────────
-if [[ -z "$JARVIS_URL" ]]; then
- read -rp "JARVIS URL (e.g. https://jarvis.orbishosting.com): " JARVIS_URL
-fi
-if [[ -z "$REG_KEY" ]]; then
- read -rp "Registration key: " REG_KEY
+# ── Dependencies ──────────────────────────────────────────────────────────────
+if command -v apt-get &>/dev/null; then
+ apt-get install -yq python3 curl imagemagick 2>/dev/null || true
+ apt-get install -yq python3-psutil python3-requests 2>/dev/null || true
+elif command -v yum &>/dev/null; then
+ yum install -yq python3 curl ImageMagick 2>/dev/null || true
+elif command -v apk &>/dev/null; then
+ apk add --no-cache python3 curl imagemagick 2>/dev/null || true
fi
-JARVIS_URL="${JARVIS_URL%/}"
+# pip fallback if psutil/requests not available via package manager
+python3 -c "import psutil, requests" 2>/dev/null || pip3 install -q --break-system-packages requests psutil 2>/dev/null || pip3 install -q requests psutil 2>/dev/null || true
-echo ""
-echo "Installing JARVIS Agent..."
-echo " URL: $JARVIS_URL"
-echo " Type: $AGENT_TYPE"
-echo ""
-
-# ── Install Python3 if needed ─────────────────────────────────────────────────
-if ! command -v python3 &>/dev/null; then
- echo "Installing python3..."
- apt-get update -qq && apt-get install -y python3 || yum install -y python3 || dnf install -y python3
-fi
-
-# ── Create directories ────────────────────────────────────────────────────────
+# ── Create directories ─────────────────────────────────────────────────────────
mkdir -p "$INSTALL_DIR" "$CONFIG_DIR" "$STATE_DIR"
-# ── Copy agent script ─────────────────────────────────────────────────────────
-SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
-if [[ -f "$SCRIPT_DIR/jarvis-agent.py" ]]; then
- cp "$SCRIPT_DIR/jarvis-agent.py" "$INSTALL_DIR/jarvis-agent.py"
-else
- echo "Downloading agent script..."
- curl -sSL "https://raw.githubusercontent.com/myronblair/jarvis/master/agent/jarvis-agent.py" \
- -o "$INSTALL_DIR/jarvis-agent.py"
-fi
-chmod +x "$INSTALL_DIR/jarvis-agent.py"
-
-# ── Write config ──────────────────────────────────────────────────────────────
-HOSTNAME=$(hostname -f 2>/dev/null || hostname)
+# ── Download agent ─────────────────────────────────────────────────────────────
+echo "Downloading agent..."
+curl -sk -H "Host: $JARVIS_HOST" "$JARVIS_URL/agent/jarvis-agent.py" -o "$INSTALL_DIR/jarvis-agent.py"
+cp "$INSTALL_DIR/jarvis-agent.py" /usr/local/bin/jarvis-agent.py
+chmod +x "$INSTALL_DIR/jarvis-agent.py" /usr/local/bin/jarvis-agent.py
+# ── Write config (skip if already exists) ────────────────────────────────────
if [[ -f "$CONFIG_DIR/config.json" ]]; then
- echo "Config already exists at $CONFIG_DIR/config.json — skipping (keeping existing settings)."
+ echo "Config already exists at $CONFIG_DIR/config.json — keeping existing settings."
else
-cat > "$CONFIG_DIR/config.json" << JSONEOF
+ cat > "$CONFIG_DIR/config.json" << JSONEOF
{
"jarvis_url": "$JARVIS_URL",
+ "host_header": "$JARVIS_HOST",
+ "ssl_verify": false,
"registration_key": "$REG_KEY",
- "hostname": "$HOSTNAME",
+ "hostname": "$HOSTNAME_ARG",
"agent_type": "$AGENT_TYPE",
"poll_interval": 30,
"heartbeat_every": 10,
+ "update_check_hours": 24,
"watch_services": ["ollama", "homeassistant", "mysql", "mariadb", "nginx", "apache2", "docker"]
}
JSONEOF
@@ -80,10 +64,10 @@ JSONEOF
echo "Config written to $CONFIG_DIR/config.json"
fi
-# ── Write systemd service ─────────────────────────────────────────────────────
-cat > "/etc/systemd/system/${SERVICE_NAME}.service" << SVCEOF
+# ── Systemd service ────────────────────────────────────────────────────────────
+cat > "$SERVICE_FILE" << SVCEOF
[Unit]
-Description=JARVIS Monitoring Agent
+Description=JARVIS Agent
After=network-online.target
Wants=network-online.target
@@ -92,26 +76,23 @@ Type=simple
ExecStart=/usr/bin/python3 $INSTALL_DIR/jarvis-agent.py
Restart=always
RestartSec=10
-StandardOutput=journal
-StandardError=journal
[Install]
WantedBy=multi-user.target
SVCEOF
-# ── Enable and start ──────────────────────────────────────────────────────────
systemctl daemon-reload
-systemctl enable "$SERVICE_NAME"
-systemctl restart "$SERVICE_NAME"
+systemctl enable jarvis-agent
+systemctl restart jarvis-agent
sleep 2
-if systemctl is-active --quiet "$SERVICE_NAME"; then
+if systemctl is-active --quiet jarvis-agent; then
echo ""
- echo "✓ JARVIS Agent installed and running."
- echo " View logs: journalctl -u $SERVICE_NAME -f"
- echo " Config: $CONFIG_DIR/config.json"
+ echo "=== JARVIS Agent v3.0 installed and running ==="
+ echo "Config: $CONFIG_DIR/config.json"
+ echo "State: $STATE_DIR/state.json (created on first run)"
+ echo "Logs: journalctl -u jarvis-agent -f"
else
echo ""
- echo "⚠ Agent installed but not running. Check logs:"
- echo " journalctl -u $SERVICE_NAME -n 30"
+ echo "WARNING: Agent installed but not running. Check: journalctl -u jarvis-agent -n 30"
fi
diff --git a/public_html/install-agent.sh b/public_html/install-agent.sh
index c315392..aa185bc 100755
--- a/public_html/install-agent.sh
+++ b/public_html/install-agent.sh
@@ -7,69 +7,65 @@
set -e
-HOSTNAME="${1:-$(hostname -s)}"
+HOSTNAME_ARG="${1:-$(hostname -s)}"
AGENT_TYPE="${2:-linux}"
JARVIS_URL="https://165.22.1.228"
JARVIS_HOST="jarvis.orbishosting.com"
INSTALL_DIR="/opt/jarvis-agent"
+CONFIG_DIR="/etc/jarvis-agent"
+STATE_DIR="/var/lib/jarvis-agent"
+REG_KEY="f846a9aaf7ce9a61742c63c87c4186052a71d2a580c65518"
SERVICE_FILE="/etc/systemd/system/jarvis-agent.service"
-echo "=== JARVIS Agent Installer ==="
-echo "Host: $HOSTNAME | Type: $AGENT_TYPE | Server: $JARVIS_URL"
+echo "=== JARVIS Agent Installer v3.0 ==="
+echo "Host: $HOSTNAME_ARG | Type: $AGENT_TYPE | Server: $JARVIS_URL"
# ── Dependencies ──────────────────────────────────────────────────────────────
if command -v apt-get &>/dev/null; then
- apt-get install -yq python3 python3-pip curl 2>/dev/null
- # Prefer apt packages to avoid externally-managed-environment errors
+ apt-get install -yq python3 curl imagemagick 2>/dev/null || true
apt-get install -yq python3-psutil python3-requests 2>/dev/null || true
elif command -v yum &>/dev/null; then
- yum install -yq python3 python3-pip curl 2>/dev/null
+ yum install -yq python3 curl ImageMagick 2>/dev/null || true
+elif command -v apk &>/dev/null; then
+ apk add --no-cache python3 curl imagemagick 2>/dev/null || true
fi
-# Install via pip only if apt didn't get them (TrueNAS, non-Debian, etc.)
-python3 -c "import psutil, requests" 2>/dev/null || \
- pip3 install -q --break-system-packages requests psutil 2>/dev/null || \
- pip3 install -q requests psutil 2>/dev/null || \
- pip install -q requests psutil 2>/dev/null || true
+# pip fallback if psutil/requests not available via package manager
+python3 -c "import psutil, requests" 2>/dev/null || pip3 install -q --break-system-packages requests psutil 2>/dev/null || pip3 install -q requests psutil 2>/dev/null || true
+
+# ── Create directories ─────────────────────────────────────────────────────────
+mkdir -p "$INSTALL_DIR" "$CONFIG_DIR" "$STATE_DIR"
# ── Download agent ─────────────────────────────────────────────────────────────
-mkdir -p "$INSTALL_DIR"
+echo "Downloading agent..."
curl -sk -H "Host: $JARVIS_HOST" "$JARVIS_URL/agent/jarvis-agent.py" -o "$INSTALL_DIR/jarvis-agent.py"
-chmod +x "$INSTALL_DIR/jarvis-agent.py"
+cp "$INSTALL_DIR/jarvis-agent.py" /usr/local/bin/jarvis-agent.py
+chmod +x "$INSTALL_DIR/jarvis-agent.py" /usr/local/bin/jarvis-agent.py
-# ── Register with JARVIS to get API key ───────────────────────────────────────
-IP=$(hostname -I | awk '{print $1}')
-REG=$(curl -sk -H "Host: $JARVIS_HOST" \
- -H "Content-Type: application/json" \
- -H "X-Registration-Key: f846a9aaf7ce9a61742c63c87c4186052a71d2a580c65518" \
- -X POST "$JARVIS_URL/api/agent/register" \
- -d "{\"hostname\":\"$HOSTNAME\",\"agent_type\":\"$AGENT_TYPE\",\"ip_address\":\"$IP\",\"capabilities\":[\"metrics\",\"commands\"]}")
-
-AGENT_ID=$(echo "$REG" | python3 -c "import sys,json; d=json.load(sys.stdin); print(d['agent_id'])" 2>/dev/null)
-API_KEY=$(echo "$REG" | python3 -c "import sys,json; d=json.load(sys.stdin); print(d['api_key'])" 2>/dev/null)
-
-if [ -z "$API_KEY" ]; then
- echo "ERROR: Registration failed — $REG"
- exit 1
+# ── Write config (skip if already exists) ────────────────────────────────────
+if [[ -f "$CONFIG_DIR/config.json" ]]; then
+ echo "Config already exists at $CONFIG_DIR/config.json — keeping existing settings."
+else
+ cat > "$CONFIG_DIR/config.json" << JSONEOF
+{
+ "jarvis_url": "$JARVIS_URL",
+ "host_header": "$JARVIS_HOST",
+ "ssl_verify": false,
+ "registration_key": "$REG_KEY",
+ "hostname": "$HOSTNAME_ARG",
+ "agent_type": "$AGENT_TYPE",
+ "poll_interval": 30,
+ "heartbeat_every": 10,
+ "update_check_hours": 24,
+ "watch_services": ["ollama", "homeassistant", "mysql", "mariadb", "nginx", "apache2", "docker"]
+}
+JSONEOF
+ chmod 600 "$CONFIG_DIR/config.json"
+ echo "Config written to $CONFIG_DIR/config.json"
fi
-echo "Registered: agent_id=$AGENT_ID"
-
-# ── Write config ───────────────────────────────────────────────────────────────
-cat > "$INSTALL_DIR/config.json" << EOF
-{
- "server_url": "$JARVIS_URL",
- "host_header": "$JARVIS_HOST",
- "agent_id": "$AGENT_ID",
- "api_key": "$API_KEY",
- "agent_type": "$AGENT_TYPE",
- "heartbeat_interval": 10,
- "metrics_interval": 30
-}
-EOF
-
# ── Systemd service ────────────────────────────────────────────────────────────
-cat > "$SERVICE_FILE" << EOF
+cat > "$SERVICE_FILE" << SVCEOF
[Unit]
Description=JARVIS Agent
After=network-online.target
@@ -78,21 +74,25 @@ Wants=network-online.target
[Service]
Type=simple
ExecStart=/usr/bin/python3 $INSTALL_DIR/jarvis-agent.py
-WorkingDirectory=$INSTALL_DIR
Restart=always
RestartSec=10
-StartLimitInterval=60
-StartLimitBurst=5
[Install]
WantedBy=multi-user.target
-EOF
+SVCEOF
systemctl daemon-reload
systemctl enable jarvis-agent
systemctl restart jarvis-agent
-echo "=== JARVIS Agent installed and running ==="
-echo "Config: $INSTALL_DIR/config.json"
-echo "Logs: journalctl -u jarvis-agent -f"
-systemctl is-active jarvis-agent
+sleep 2
+if systemctl is-active --quiet jarvis-agent; then
+ echo ""
+ echo "=== JARVIS Agent v3.0 installed and running ==="
+ echo "Config: $CONFIG_DIR/config.json"
+ echo "State: $STATE_DIR/state.json (created on first run)"
+ echo "Logs: journalctl -u jarvis-agent -f"
+else
+ echo ""
+ echo "WARNING: Agent installed but not running. Check: journalctl -u jarvis-agent -n 30"
+fi