85 lines
2.4 KiB
Bash
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"
|