Support Alpine OpenRC agents and discover Docker NPMplus and CrowdSec
This commit is contained in:
@@ -10,11 +10,28 @@ if [ -z "${DASHBOARD_URL:-}" ] || [ -z "${ENROLL_TOKEN:-}" ]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
case "$(uname -m)" in x86_64|amd64) ;; *) echo "Поддерживается Linux amd64 (x86_64)." >&2; exit 1 ;; esac
|
||||
if command -v systemctl >/dev/null 2>&1 && [ -d /run/systemd/system ]; then
|
||||
agent_init=systemd
|
||||
elif command -v rc-service >/dev/null 2>&1 && command -v supervise-daemon >/dev/null 2>&1; then
|
||||
agent_init=openrc
|
||||
else
|
||||
echo "Нужен работающий systemd или OpenRC с supervise-daemon." >&2; exit 1
|
||||
fi
|
||||
if ! command -v curl >/dev/null 2>&1; then
|
||||
if command -v apk >/dev/null 2>&1; then apk add --no-cache curl ca-certificates; else echo "Установите curl и ca-certificates." >&2; exit 1; fi
|
||||
fi
|
||||
|
||||
GITEA_URL=${GITEA_URL:-https://git.myown.center}
|
||||
GITEA_REPOSITORY=${GITEA_REPOSITORY:-maxim/ProxmoxDash}
|
||||
VMID=${VMID:-0}
|
||||
AGENT_NAME=${AGENT_NAME:-$(hostname)}
|
||||
|
||||
case "$DASHBOARD_URL$ENROLL_TOKEN$AGENT_NAME$VMID" in
|
||||
*'
|
||||
'*) echo "Параметры установки не должны содержать переносы строк." >&2; exit 1 ;;
|
||||
esac
|
||||
|
||||
release_json=$(curl -fsSL "$GITEA_URL/api/v1/repos/$GITEA_REPOSITORY/releases/latest")
|
||||
download_url=$(printf '%s' "$release_json" | sed -n 's/.*"browser_download_url":"\([^"]*\/proxmox-dashboard-linux-amd64\)".*/\1/p' | head -n 1)
|
||||
if [ -z "$download_url" ]; then
|
||||
@@ -24,8 +41,12 @@ fi
|
||||
|
||||
install -d -m 0700 /var/lib/proxmox-dashboard-agent
|
||||
temporary_binary=$(mktemp /tmp/proxmox-dashboard-agent.XXXXXX)
|
||||
trap 'rm -f "$temporary_binary"' EXIT
|
||||
trap 'rm -f "$temporary_binary" "$temporary_binary.sha256"' EXIT
|
||||
curl -fsSL "$download_url" -o "$temporary_binary"
|
||||
curl -fsSL "$download_url.sha256" -o "$temporary_binary.sha256"
|
||||
expected_hash=$(awk 'NR==1 {print $1}' "$temporary_binary.sha256")
|
||||
actual_hash=$(sha256sum "$temporary_binary" | awk '{print $1}')
|
||||
if [ "${#expected_hash}" -ne 64 ] || [ "$expected_hash" != "$actual_hash" ]; then echo "SHA-256 загрузки не совпал." >&2; exit 1; fi
|
||||
install -m 0755 "$temporary_binary" /var/lib/proxmox-dashboard-agent/proxmox-dashboard-agent
|
||||
|
||||
umask 077
|
||||
@@ -36,6 +57,7 @@ umask 077
|
||||
printf 'VMID=%s\n' "$VMID"
|
||||
} > /etc/proxmox-dashboard-agent.env
|
||||
|
||||
if [ "$agent_init" = systemd ]; then
|
||||
cat > /etc/systemd/system/proxmox-dashboard-agent.service <<'UNIT'
|
||||
[Unit]
|
||||
Description=Proxmox Dashboard read-only guest agent
|
||||
@@ -61,5 +83,38 @@ UNIT
|
||||
systemctl daemon-reload
|
||||
systemctl enable proxmox-dashboard-agent.service
|
||||
systemctl restart proxmox-dashboard-agent.service
|
||||
else
|
||||
mkdir -p /usr/local/sbin /etc/init.d
|
||||
cat > /usr/local/sbin/proxmox-dashboard-agent-run <<'RUN'
|
||||
#!/bin/sh
|
||||
set -eu
|
||||
# Parse literal key=value records, never evaluate configuration as shell code.
|
||||
while IFS='=' read -r key value; do
|
||||
case "$key" in DASHBOARD_URL|ENROLL_TOKEN|AGENT_NAME|VMID|DASHBOARD_NPM_LOG_DIR|DASHBOARD_CROWDSEC_CONTAINER) export "$key=$value" ;; esac
|
||||
done < /etc/proxmox-dashboard-agent.env
|
||||
exec /var/lib/proxmox-dashboard-agent/proxmox-dashboard-agent --agent --agent-server "$DASHBOARD_URL" --agent-enroll-token "$ENROLL_TOKEN" --agent-name "$AGENT_NAME" --agent-vmid "$VMID"
|
||||
RUN
|
||||
chmod 0755 /usr/local/sbin/proxmox-dashboard-agent-run
|
||||
cat > /etc/init.d/proxmox-dashboard-agent <<'OPENRC'
|
||||
#!/sbin/openrc-run
|
||||
description="Proxmox Dashboard guest agent"
|
||||
command="/usr/local/sbin/proxmox-dashboard-agent-run"
|
||||
supervisor="supervise-daemon"
|
||||
respawn_delay=5
|
||||
respawn_max=0
|
||||
output_log="/var/log/proxmox-dashboard-agent.log"
|
||||
error_log="/var/log/proxmox-dashboard-agent.log"
|
||||
depend() {
|
||||
need net
|
||||
after docker
|
||||
}
|
||||
start_pre() {
|
||||
checkpath --file --mode 0600 /var/log/proxmox-dashboard-agent.log
|
||||
}
|
||||
OPENRC
|
||||
chmod 0755 /etc/init.d/proxmox-dashboard-agent
|
||||
rc-update add proxmox-dashboard-agent default
|
||||
rc-service proxmox-dashboard-agent restart
|
||||
fi
|
||||
rm -f /usr/local/bin/proxmox-dashboard-agent
|
||||
echo "Агент установлен. Через несколько секунд он появится в Dashboard."
|
||||
|
||||
@@ -6,11 +6,16 @@ if [ "$(id -u)" -ne 0 ]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if command -v rc-service >/dev/null 2>&1 && [ -f /etc/init.d/proxmox-dashboard-agent ]; then
|
||||
rc-service proxmox-dashboard-agent stop || true
|
||||
rc-update del proxmox-dashboard-agent default || true
|
||||
fi
|
||||
systemctl disable --now proxmox-dashboard-agent.service 2>/dev/null || true
|
||||
rm -f /etc/init.d/proxmox-dashboard-agent /usr/local/sbin/proxmox-dashboard-agent-run
|
||||
rm -f /etc/systemd/system/proxmox-dashboard-agent.service
|
||||
rm -f /etc/proxmox-dashboard-agent.env
|
||||
rm -f /usr/local/bin/proxmox-dashboard-agent
|
||||
rm -rf /var/lib/proxmox-dashboard-agent
|
||||
systemctl daemon-reload
|
||||
systemctl daemon-reload 2>/dev/null || true
|
||||
systemctl reset-failed proxmox-dashboard-agent.service 2>/dev/null || true
|
||||
echo "Агент и его локальные учётные данные удалены."
|
||||
|
||||
Reference in New Issue
Block a user