zlh-agent/scripts/addons/codeserver/install.sh
2026-03-15 11:06:08 +00:00

85 lines
2.4 KiB
Bash

#!/usr/bin/env bash
set -euo pipefail
echo "[code-server] starting install"
# --------------------------------------------------
# Config
# --------------------------------------------------
SERVICE_ROOT="/opt/zlh/services/code-server"
ZLH_ARTIFACT_BASE_URL="${ZLH_ARTIFACT_BASE_URL:-http://10.60.0.251:8080}"
ARTIFACT_URL="${ZLH_ARTIFACT_BASE_URL%/}/addons/code-server/code-server.zip"
ARTIFACT_TMP="/tmp/code-server.zip"
MARKER="/opt/zlh/.zlh/addons/code-server.installed"
PID_FILE="/opt/zlh/.zlh/addons/code-server.pid"
LOG_FILE="/opt/zlh/logs/code-server.log"
WORKSPACE_DIR="/home/dev/workspace"
BIN="${SERVICE_ROOT}/bin/code-server"
LINK_PATH="/usr/local/bin/code-server"
mkdir -p "$(dirname "${MARKER}")"
mkdir -p "$(dirname "${LOG_FILE}")"
download_artifact() {
echo "[code-server] downloading ${ARTIFACT_URL}"
if command -v curl >/dev/null 2>&1; then
curl -fL "${ARTIFACT_URL}" -o "${ARTIFACT_TMP}"
elif command -v wget >/dev/null 2>&1; then
wget -O "${ARTIFACT_TMP}" "${ARTIFACT_URL}"
else
echo "[code-server][ERROR] curl or wget is required"
exit 1
fi
}
extract_artifact() {
local tmp_dir
tmp_dir="$(mktemp -d)"
if command -v unzip >/dev/null 2>&1; then
unzip -q "${ARTIFACT_TMP}" -d "${tmp_dir}"
elif command -v bsdtar >/dev/null 2>&1; then
bsdtar -xf "${ARTIFACT_TMP}" -C "${tmp_dir}"
else
echo "[code-server][ERROR] unzip or bsdtar is required"
exit 127
fi
EXTRACTED_DIR="$(find "${tmp_dir}" -maxdepth 1 -type d -name 'code-server*' | head -n1)"
if [ -z "${EXTRACTED_DIR}" ]; then
echo "[code-server][ERROR] failed to locate extracted directory"
exit 1
fi
mv "${EXTRACTED_DIR}"/* "${SERVICE_ROOT}/"
rm -rf "${tmp_dir}"
}
# --------------------------------------------------
# Idempotency
# --------------------------------------------------
if [ ! -x "${BIN}" ]; then
download_artifact
echo "[code-server] extracting ${ARTIFACT_TMP}"
rm -rf "${SERVICE_ROOT}"
mkdir -p "${SERVICE_ROOT}"
extract_artifact
chmod +x "${BIN}"
ln -sfn "${BIN}" "${LINK_PATH}"
fi
mkdir -p "${WORKSPACE_DIR}"
if [ -f "${PID_FILE}" ] && kill -0 "$(cat "${PID_FILE}")" 2>/dev/null; then
echo "[code-server] already running"
else
rm -f "${PID_FILE}"
nohup "${BIN}" --bind-addr 0.0.0.0:8080 "${WORKSPACE_DIR}" >"${LOG_FILE}" 2>&1 &
echo $! > "${PID_FILE}"
fi
touch "${MARKER}"
rm -f "${ARTIFACT_TMP}"
echo "[code-server] install complete"