forked from Eeveid/lightOps
82 lines
2.0 KiB
Bash
Executable File
82 lines
2.0 KiB
Bash
Executable File
#!/usr/bin/env sh
|
||
set -eu
|
||
|
||
SERVER=""
|
||
BIN_URL=""
|
||
VERSION=""
|
||
SHA256=""
|
||
|
||
while [ "$#" -gt 0 ]; do
|
||
case "$1" in
|
||
--server) SERVER="$2"; shift 2 ;;
|
||
--bin-url) BIN_URL="$2"; shift 2 ;;
|
||
--version) VERSION="$2"; shift 2 ;;
|
||
--sha256) SHA256="$2"; shift 2 ;;
|
||
*) echo "未知参数:$1" >&2; exit 1 ;;
|
||
esac
|
||
done
|
||
|
||
if [ "$(id -u)" -ne 0 ]; then
|
||
echo "请使用 root 用户运行" >&2
|
||
exit 1
|
||
fi
|
||
|
||
if [ -z "$BIN_URL" ]; then
|
||
if [ -z "$SERVER" ]; then
|
||
if [ -f /etc/lightops/agent.toml ]; then
|
||
SERVER="$(awk -F= '/server_url/ { gsub(/[ "]/, "", $2); print $2; exit }' /etc/lightops/agent.toml)"
|
||
fi
|
||
fi
|
||
if [ -z "$SERVER" ]; then
|
||
echo "缺少 --server 或 --bin-url" >&2
|
||
exit 1
|
||
fi
|
||
OS="$(uname -s | tr '[:upper:]' '[:lower:]')"
|
||
ARCH="$(uname -m)"
|
||
SUFFIX=""
|
||
if [ -n "$VERSION" ]; then
|
||
SUFFIX="-$VERSION"
|
||
fi
|
||
BIN_URL="$SERVER/downloads/lightops-agent-$OS-$ARCH$SUFFIX"
|
||
fi
|
||
|
||
TMP_BIN="$(mktemp)"
|
||
echo "正在下载 Agent:$BIN_URL"
|
||
curl -fL --retry 3 --connect-timeout 10 "$BIN_URL" -o "$TMP_BIN"
|
||
if [ -n "$SHA256" ]; then
|
||
echo "$SHA256 $TMP_BIN" | sha256sum -c -
|
||
fi
|
||
chmod +x "$TMP_BIN"
|
||
"$TMP_BIN" --version >/dev/null
|
||
|
||
systemctl stop lightops-agent 2>/dev/null || true
|
||
if [ -x /usr/local/bin/lightops-agent ]; then
|
||
BACKUP="/usr/local/bin/lightops-agent.bak.$(date +%Y%m%d%H%M%S)"
|
||
cp /usr/local/bin/lightops-agent "$BACKUP"
|
||
else
|
||
BACKUP=""
|
||
fi
|
||
mv "$TMP_BIN" /usr/local/bin/lightops-agent
|
||
|
||
if ! systemctl start lightops-agent; then
|
||
echo "新版本启动失败,正在回滚" >&2
|
||
if [ -n "$BACKUP" ]; then
|
||
cp "$BACKUP" /usr/local/bin/lightops-agent
|
||
systemctl start lightops-agent || true
|
||
fi
|
||
exit 1
|
||
fi
|
||
|
||
sleep 2
|
||
if ! systemctl is-active --quiet lightops-agent; then
|
||
echo "新版本未保持运行,正在回滚" >&2
|
||
if [ -n "$BACKUP" ]; then
|
||
cp "$BACKUP" /usr/local/bin/lightops-agent
|
||
systemctl restart lightops-agent || true
|
||
fi
|
||
journalctl -u lightops-agent -n 80 --no-pager >&2 || true
|
||
exit 1
|
||
fi
|
||
|
||
echo "LightOps Agent 已升级"
|