121 lines
4.7 KiB
Bash
Executable File
121 lines
4.7 KiB
Bash
Executable File
#!/bin/sh
|
||
set -eu
|
||
|
||
if [ "$(id -u)" -ne 0 ]; then
|
||
echo "Запустите команду установки от root." >&2
|
||
exit 1
|
||
fi
|
||
if [ -z "${DASHBOARD_URL:-}" ] || [ -z "${ENROLL_TOKEN:-}" ]; then
|
||
echo "Не заданы DASHBOARD_URL и ENROLL_TOKEN. Создайте команду в настройках Dashboard." >&2
|
||
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
|
||
echo "В последнем релизе не найден Linux-бинарник." >&2
|
||
exit 1
|
||
fi
|
||
|
||
install -d -m 0700 /var/lib/proxmox-dashboard-agent
|
||
temporary_binary=$(mktemp /tmp/proxmox-dashboard-agent.XXXXXX)
|
||
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
|
||
{
|
||
printf 'DASHBOARD_URL=%s\n' "$DASHBOARD_URL"
|
||
printf 'ENROLL_TOKEN=%s\n' "$ENROLL_TOKEN"
|
||
printf 'AGENT_NAME=%s\n' "$AGENT_NAME"
|
||
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
|
||
After=network-online.target docker.service
|
||
Wants=network-online.target
|
||
|
||
[Service]
|
||
Type=simple
|
||
EnvironmentFile=/etc/proxmox-dashboard-agent.env
|
||
ExecStart=/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}
|
||
Restart=always
|
||
RestartSec=5
|
||
NoNewPrivileges=true
|
||
ProtectHome=true
|
||
PrivateTmp=true
|
||
ProtectSystem=strict
|
||
ReadWritePaths=/var/lib/proxmox-dashboard-agent
|
||
|
||
[Install]
|
||
WantedBy=multi-user.target
|
||
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."
|