264 lines
8.0 KiB
Bash
264 lines
8.0 KiB
Bash
#!/usr/bin/env bash
|
|
# install-sdl-wkr.sh - Script to install SDL Worker
|
|
# Usage: curl -s http://<SDL_MGR_IP>:8081/dist/install-sdl-wkr.sh | bash -s <SDL_MGR_IP>
|
|
set -euo pipefail
|
|
|
|
# ------------------------------------------------------------
|
|
# Functions
|
|
# ------------------------------------------------------------
|
|
|
|
install_nodejs() {
|
|
# ------------------------------------------------------------
|
|
# OS / platform detection
|
|
# ------------------------------------------------------------
|
|
OS_ID="unknown"
|
|
OS_LIKE=""
|
|
OS_NAME=""
|
|
OS_VERSION=""
|
|
OS_FAMILY="unknown"
|
|
OS_ARCH="unknown"
|
|
OS_PLATFORM="unknown"
|
|
|
|
if [[ -f /etc/os-release ]]; then
|
|
# shellcheck disable=SC1091
|
|
. /etc/os-release
|
|
OS_ID="${ID:-unknown}"
|
|
OS_LIKE="${ID_LIKE:-}"
|
|
OS_NAME="${NAME:-unknown}"
|
|
OS_VERSION="${VERSION_ID:-}"
|
|
fi
|
|
|
|
case "$OS_ID" in
|
|
debian|ubuntu|raspbian|zorin)
|
|
OS_FAMILY="debian"
|
|
OS_PLATFORM="linux"
|
|
;;
|
|
rhel|rocky|almalinux|centos|fedora)
|
|
OS_FAMILY="rhel"
|
|
OS_PLATFORM="linux"
|
|
;;
|
|
*)
|
|
if [[ "$OS_LIKE" == *debian* ]]; then
|
|
OS_FAMILY="debian"
|
|
elif [[ "$OS_LIKE" == *rhel* ]]; then
|
|
OS_FAMILY="rhel"
|
|
fi
|
|
;;
|
|
esac
|
|
|
|
# case "$OS_PLATFORM" in
|
|
# linux) NODE_PLATFORM="linux" ;;
|
|
# darwin) NODE_PLATFORM="darwin" ;;
|
|
# win) NODE_PLATFORM="win" ;;
|
|
# *)
|
|
# echo "ERROR: Unsupported platform for NodeJS"
|
|
# exit 1
|
|
# ;;
|
|
# esac
|
|
|
|
case "$OS_PLATFORM" in
|
|
linux) EXT="tar.xz" ;;
|
|
darwin) EXT="tar.gz" ;;
|
|
win) EXT="zip" ;;
|
|
*) echo "ERROR: Unknown NodeJS target OS: $OS_ID"; exit 1 ;;
|
|
esac
|
|
|
|
# ------------------------------------------------------------
|
|
# CPU architecture detection
|
|
# ------------------------------------------------------------
|
|
ARCH_RAW="$(uname -m)"
|
|
|
|
case "$ARCH_RAW" in
|
|
x86_64) OS_ARCH="x64" ;;
|
|
aarch64|arm64) OS_ARCH="arm64" ;;
|
|
armv7l) OS_ARCH="armv7l" ;;
|
|
*)
|
|
echo "ERROR: Unsupported architecture: $ARCH_RAW"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
|
|
NODE_VER=$(curl -s http://${SDL_MGR_IP}:8081/api/config | jq -r '.nodejs.version')
|
|
NODE_DIR="${SDL_HOME}/nodejs"
|
|
NODE_VER_BASE="node-${NODE_VER}-${OS_PLATFORM}-${OS_ARCH}"
|
|
NODE_FILE="node-${NODE_VER}-${OS_PLATFORM}-${OS_ARCH}.${EXT}"
|
|
NODE_URL="http://${SDL_MGR_IP}:8081/dist/${NODE_FILE}"
|
|
|
|
|
|
#echo "NodeJS Version: ${NODE_VER}"
|
|
#echo "NodeJS URL: ${NODE_URL}"
|
|
|
|
mkdir -p "${NODE_DIR}"
|
|
curl -sSL --fail "${NODE_URL}" -o "${TMP_DIR}/${NODE_FILE}" || { echo "Failed to download Node.js"; exit 1; }
|
|
# test Checksum
|
|
curl -sSL --fail "${NODE_URL}.sha256" -o "${TMP_DIR}/${NODE_FILE}.sha256" || { echo "Failed to download Node.js SHA256"; exit 1; }
|
|
cd "${TMP_DIR}"
|
|
sha256sum -c "${NODE_FILE}.sha256"
|
|
if [ $? -ne 0 ]; then
|
|
echo "SHA256 checksum verification failed."
|
|
exit 1
|
|
fi
|
|
|
|
if ([ "${EXT}" == "zip" ]); then
|
|
unzip "${TMP_DIR}/${NODE_FILE}" -d "${NODE_DIR}"
|
|
elif ([ "${EXT}" == "tar.xz" ] || [ "${EXT}" == "tar.xz" ]); then
|
|
tar -xJf "${TMP_DIR}/${NODE_FILE}" -C "${NODE_DIR}"
|
|
elif ([ "${EXT}" == "tar.gz" ] || [ "${EXT}" == "tar.xz" ]); then
|
|
tar -xzf "${TMP_DIR}/${NODE_FILE}" -C "${NODE_DIR}"
|
|
fi
|
|
# tar -xzf "${TMP_DIR}/${NODE_FILE}" -C "${NODE_DIR}"
|
|
rm -f "${TMP_DIR}/${NODE_FILE}"
|
|
ln -sfn "${NODE_DIR}/${NODE_VER_BASE}" "${NODE_DIR}/current"
|
|
}
|
|
|
|
# ------------------------------------------------------------
|
|
# Require non root user
|
|
# ------------------------------------------------------------
|
|
if [[ $EUID -eq 0 ]]; then
|
|
echo "ERROR: install-sdl-wkr.sh must be run as a non-root user"
|
|
exit 1
|
|
fi
|
|
|
|
# ------------------------------------------------------------
|
|
# Requirements
|
|
# ------------------------------------------------------------
|
|
for cmd in awk curl grep jq sed sha256sum tar unzip; do
|
|
command -v "$cmd" >/dev/null || {
|
|
echo "ERROR: $cmd is required"
|
|
echo "Please install:"
|
|
echo " sudo apt -y install gawk coreutils curl jq grep sed tar unzip"
|
|
exit 1
|
|
}
|
|
done
|
|
|
|
# Check if SDL-MGR IP is provided as an argument
|
|
if [ -z "$1" ]; then
|
|
echo "Usage: $0 <SDL_MGR_IP>"
|
|
exit 1
|
|
fi
|
|
|
|
SDL_MGR_IP=$1
|
|
|
|
# SDL_HOME=$(curl -s http://${SDL_MGR_IP}:8081/api/config | jq -r '.dirs.sdlhome')
|
|
SDL_HOME=$HOME/.sdl
|
|
|
|
|
|
SDL_VER=$(curl -s http://${SDL_MGR_IP}:8081/api/config | jq -r '.package.version')
|
|
SDL_DESC=$(curl -s http://${SDL_MGR_IP}:8081/api/config | jq -r '.package.description')
|
|
# SDL_ABBR=$(curl -s http://${SDL_MGR_IP}:8081/api/config | jq -r '.package.abbr')
|
|
SDL_COPYRT=$(curl -s http://${SDL_MGR_IP}:8081/api/config | jq -r '.package.copyright')
|
|
|
|
echo "###############################################"
|
|
# echo "${SDL_DESC} (${SDL_ABBR})"
|
|
echo "Version: ${SDL_VER}"
|
|
echo "Copyright: (C) ${SDL_COPYRT}"
|
|
echo "Installing SDL Worker..."
|
|
echo " to: ${SDL_HOME}"
|
|
echo ""
|
|
|
|
|
|
TMP_DIR="${SDL_HOME}/tmp"
|
|
SDL_WKR_DIR="${SDL_HOME}/sdl-wkr"
|
|
SDL_WKR_VERSION=$(curl -s http://${SDL_MGR_IP}:8081/api/config | jq -r '.package.version')
|
|
SDL_WKR_TGZ="sdl-wkr_${SDL_WKR_VERSION}.tgz"
|
|
SDL_CONF_DIR="${SDL_HOME}/conf"
|
|
SLD_LOGS_DIR="${SDL_HOME}/logs"
|
|
|
|
|
|
# ------------------------------------------------------------
|
|
# Create Directories
|
|
# ------------------------------------------------------------
|
|
mkdir -p "${SDL_HOME}"
|
|
mkdir -p "${SDL_CONF_DIR}"
|
|
mkdir -p "${SLD_LOGS_DIR}"
|
|
mkdir -p "${SDL_WKR_DIR}"
|
|
mkdir -p "${TMP_DIR}"
|
|
|
|
|
|
# Download the latest sdl-wkr version to TMP_DIR
|
|
WKR_TGZ_URL="http://${SDL_MGR_IP}:8081/dist/${SDL_WKR_TGZ}"
|
|
WKR_TGZ_SHA256_URL="http://${SDL_MGR_IP}:8081/dist/${SDL_WKR_TGZ}.sha256"
|
|
|
|
curl -sSL --fail "${WKR_TGZ_URL}" -o "${TMP_DIR}/${SDL_WKR_TGZ}" || { echo "Failed to download sdl-wkr"; exit 1; }
|
|
curl -sSL --fail "${WKR_TGZ_SHA256_URL}" -o "${TMP_DIR}/${SDL_WKR_TGZ}.sha256" || { echo "Failed to download sdl-wkr SHA256"; exit 1; }
|
|
|
|
# Verify the SHA256 checksum
|
|
cd "${TMP_DIR}"
|
|
sha256sum --quiet -c "${TMP_DIR}/${SDL_WKR_TGZ}.sha256"
|
|
if [ $? -ne 0 ]; then
|
|
echo "SHA256 checksum verification failed."
|
|
exit 1
|
|
fi
|
|
|
|
cd "${SDL_HOME}"
|
|
|
|
# Extract and move to versioned directory
|
|
VERSIONED_DIR="${SDL_WKR_DIR}/sdl-wkr_${SDL_WKR_VERSION}"
|
|
rm -rf "${VERSIONED_DIR}"
|
|
tar -xzf "${TMP_DIR}/${SDL_WKR_TGZ}" -C "${SDL_WKR_DIR}"
|
|
mv "${SDL_WKR_DIR}/sdl-wkr" "${VERSIONED_DIR}"
|
|
|
|
# Create a symlink for the current version
|
|
if [ -d "${SDL_WKR_DIR}/current" ]; then
|
|
rm -rf "${SDL_WKR_DIR}/current"
|
|
fi
|
|
ln -sfn "${VERSIONED_DIR}" "${SDL_WKR_DIR}/current"
|
|
|
|
# Copy initial configuration files
|
|
if [ ! -e "${SDL_HOME}/conf/sdl-wkr-config.json" ]; then
|
|
cp "${SDL_WKR_DIR}/current/conf/default-sdl-wkr-config.json" "${SDL_HOME}/conf/sdl-wkr-config.json"
|
|
fi
|
|
mkdir -p ~/.config/systemd/user
|
|
cp "$SDL_WKR_DIR/current/scripts/sdl-wkr.service" ~/.config/systemd/user/
|
|
|
|
|
|
# Install Node.js idempotently
|
|
NODE_VER=$(curl -s http://${SDL_MGR_IP}:8081/api/config | jq -r '.nodejs.version')
|
|
NODE_DIR="${SDL_HOME}/nodejs"
|
|
NODE_BIN="${NODE_DIR}/current/bin/node"
|
|
NPM_BIN="${NODE_DIR}/current/bin/npm"
|
|
|
|
# echo "NodeJS Version: ${NODE_VER}"
|
|
# echo "NodeJS BIN version: ${NODE_BIN_VER}"
|
|
# echo "NodeJS BIN: ${NODE_BIN}"
|
|
|
|
if [ -e "${NODE_BIN}" ]; then
|
|
NODE_BIN_VER=$(${NODE_BIN} --version)
|
|
if [ ${NODE_BIN_VER} != "${NODE_VER}" ]; then
|
|
install_nodejs
|
|
fi
|
|
else
|
|
install_nodejs
|
|
fi
|
|
|
|
# ------------------------------------------------------------
|
|
# Install sdl-mgr Node Dependencies
|
|
# ------------------------------------------------------------
|
|
echo ""
|
|
echo "Installing NodeJS Dependencies"
|
|
cd "$SDL_WKR_DIR/current/app"
|
|
export PATH="$NODE_DIR/current/bin:$PATH"
|
|
$NPM_BIN install
|
|
|
|
# Start sdl-wkr systemd service
|
|
systemctl --user daemon-reload --no-pager
|
|
systemctl --user restart sdl-wkr --no-pager
|
|
sleep 3
|
|
systemctl --user status sdl-wkr --no-pager
|
|
|
|
# systemd commands
|
|
echo ""
|
|
echo "SDL Worker deployed:"
|
|
echo ""
|
|
|
|
echo "SDL Controls:"
|
|
echo " systemctl --user status sdl-wkr"
|
|
echo " systemctl --user start sdl-wkr"
|
|
echo " systemctl --user stop sdl-wkr"
|
|
|
|
echo ""
|
|
echo "Removal Commands:"
|
|
echo " systemctl --user disable sdl-wkr"
|
|
echo " rm -rf $SDL_HOME"
|