mirror of
https://github.com/JetSprow/J-Board-Lite.git
synced 2026-05-01 09:14:11 +05:30
101 lines
2.4 KiB
Bash
Executable File
101 lines
2.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
GH_REPO="${GH_REPO:-JetSprow/J-Board}"
|
|
AGENT_TAG="${AGENT_TAG:-latest}"
|
|
INSTALL_DIR="${INSTALL_DIR:-/usr/local/bin}"
|
|
SERVICE_NAME="${SERVICE_NAME:-jboard-agent}"
|
|
TMP_DIR="$(mktemp -d)"
|
|
ARCH="$(uname -m)"
|
|
|
|
cleanup() {
|
|
rm -rf "$TMP_DIR"
|
|
}
|
|
trap cleanup EXIT
|
|
|
|
run_as_root() {
|
|
if [ "$(id -u)" -eq 0 ]; then
|
|
"$@"
|
|
elif command -v sudo >/dev/null 2>&1; then
|
|
sudo "$@"
|
|
else
|
|
echo "This script needs root privileges. Re-run as root or install sudo." >&2
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
detect_asset() {
|
|
case "$ARCH" in
|
|
x86_64|amd64)
|
|
echo "jboard-agent-linux-amd64"
|
|
;;
|
|
aarch64|arm64)
|
|
echo "jboard-agent-linux-arm64"
|
|
;;
|
|
*)
|
|
echo "Unsupported architecture: $ARCH" >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
}
|
|
|
|
resolve_release_tag() {
|
|
if [ "$AGENT_TAG" != "latest" ]; then
|
|
echo "$AGENT_TAG"
|
|
return
|
|
fi
|
|
|
|
curl -fsSL "https://api.github.com/repos/${GH_REPO}/releases/latest" \
|
|
| sed -n 's/.*"tag_name"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/p' \
|
|
| head -n 1
|
|
}
|
|
|
|
ASSET="$(detect_asset)"
|
|
RESOLVED_TAG="$(resolve_release_tag)"
|
|
|
|
if [ -z "$RESOLVED_TAG" ]; then
|
|
echo "Failed to resolve release tag for ${GH_REPO}" >&2
|
|
exit 1
|
|
fi
|
|
|
|
DOWNLOAD_BASE="https://github.com/${GH_REPO}/releases/download/${RESOLVED_TAG}"
|
|
DOWNLOAD_URL="${DOWNLOAD_BASE}/${ASSET}"
|
|
CHECKSUM_URL="${DOWNLOAD_BASE}/SHA256SUMS"
|
|
|
|
echo "[1/5] Release tag: ${RESOLVED_TAG}"
|
|
echo "[2/5] Downloading probe agent binary: ${ASSET}"
|
|
curl -fsSL "$DOWNLOAD_URL" -o "$TMP_DIR/$ASSET"
|
|
|
|
if curl -fsSL "$CHECKSUM_URL" -o "$TMP_DIR/SHA256SUMS" 2>/dev/null; then
|
|
echo "[3/5] Verifying checksum..."
|
|
grep " ${ASSET}$" "$TMP_DIR/SHA256SUMS" > "$TMP_DIR/SHA256SUMS.current"
|
|
(
|
|
cd "$TMP_DIR"
|
|
if command -v sha256sum >/dev/null 2>&1; then
|
|
sha256sum -c SHA256SUMS.current >/dev/null
|
|
else
|
|
shasum -a 256 -c SHA256SUMS.current >/dev/null
|
|
fi
|
|
)
|
|
else
|
|
echo "[3/5] Checksum file not found; skipping verification."
|
|
fi
|
|
|
|
echo "[4/5] Installing binary..."
|
|
run_as_root install -m 0755 "$TMP_DIR/$ASSET" "${INSTALL_DIR}/jboard-agent"
|
|
run_as_root mkdir -p /var/log/jboard
|
|
|
|
echo "[5/5] Restarting service..."
|
|
run_as_root systemctl daemon-reload
|
|
run_as_root systemctl restart "$SERVICE_NAME"
|
|
|
|
echo
|
|
echo "Upgrade complete."
|
|
echo
|
|
echo "Service status:"
|
|
run_as_root systemctl --no-pager --full status "$SERVICE_NAME" || true
|
|
|
|
echo
|
|
echo "Recent logs:"
|
|
run_as_root journalctl -u "$SERVICE_NAME" -n 50 --no-pager || true
|