From 471bb8868bb864fdc9e2048433b0787ab8c58615 Mon Sep 17 00:00:00 2001 From: John Haverlack Date: Wed, 8 Jul 2026 18:43:15 -0800 Subject: [PATCH] WIP: Fixing Installer --- install.sh | 131 ++++++++++------------------------- nwa/scripts/SITENAME.service | 31 +++++++++ 2 files changed, 68 insertions(+), 94 deletions(-) create mode 100644 nwa/scripts/SITENAME.service diff --git a/install.sh b/install.sh index 4044e06..e58852d 100755 --- a/install.sh +++ b/install.sh @@ -415,53 +415,6 @@ NWA="$VERSIONS/current/nwa" # ------------------------------------------------------------ install_nodejs -# echo "" -# echo "Fetching NodeJS Binaries to $DIST" -# SHASUM_URL="https://nodejs.org/dist/v${NODE_VERSION}/SHASUMS256.txt" -# curl -sSL "$SHASUM_URL" -o "$DIST/NODE_SHASUMS256.txt" - -# # Download NodeJS tarball - -# for np in $NODE_PLATFORMS; do -# IFS=":" read -r OS ARCH <<< "$np" - -# case "$OS" in -# linux) EXT="tar.xz" ;; -# darwin) EXT="tar.gz" ;; -# win) EXT="zip" ;; -# *) echo "ERROR: Unknown NodeJS target OS: $OS"; exit 1 ;; -# esac - -# PLATFORM="${OS}-${ARCH}" -# NODE_DIR="node-v${NODE_VERSION}-${PLATFORM}" -# NODE_TARBALL="${NODE_DIR}.$EXT" -# NODE_URL="https://nodejs.org/dist/v${NODE_VERSION}/${NODE_TARBALL}" - -# echo " $np: $NODE_TARBALL" - -# if [ ! -e "$DIST/$NODE_TARBALL" ]; then - -# curl -sSL "$NODE_URL" -o "$DIST/$NODE_TARBALL" - -# EXPECTED_SHA="$(grep " $NODE_TARBALL\$" "$DIST/NODE_SHASUMS256.txt" | awk '{print $1}')" - -# if [[ -z "$EXPECTED_SHA" ]]; then -# echo "Error: SHA256 not found for $NODE_TARBALL" -# exit 1 -# fi - -# ACTUAL_SHA="$(sha256sum "$DIST/$NODE_TARBALL" | awk '{print $1}')" - -# if [[ "$ACTUAL_SHA" != "$EXPECTED_SHA" ]]; then -# echo "SHA mismatch $NODE_TARBALL" -# rm -f "$DIST/$NODE_TARBALL" -# exit 1 -# fi - -# echo "$EXPECTED_SHA $NODE_TARBALL" > "$DIST/$NODE_TARBALL.sha256" -# fi -# done - unset OS ARCH # ------------------------------------------------------------ @@ -486,44 +439,6 @@ NODE_BIN="$NODEJS/current/bin/node" NPM_BIN="$NODEJS/current/bin/npm" # echo "NodeJS binary: $NODE_BIN" -# if [ -e "$NODE_BIN" ]; then -# NODE_BIN_VERSION="$("$NODE_BIN" --version)" -# # echo "NodeJS bin version: $NODE_BIN_VERSION" -# # echo "NodeJS version: v$NODE_VERSION" -# case "$OS_PLATFORM" in -# linux) EXT="tar.xz"; TAR_OPTS="-xJf" ;; -# darwin) EXT="tar.gz"; TAR_OPTS="-xzf" ;; -# win) EXT="zip" ;; -# *) echo "ERROR: Unsupported OS platform: $OS_PLATFORM"; exit 1 ;; -# esac - -# if [ "$NODE_BIN_VERSION" != "v$NODE_VERSION" ]; then -# echo "" -# echo "Installing NodeJS: node-v${NODE_VERSION}-${OS_PLATFORM}-${OS_ARCH}" - -# echo "Extracting: $DIST/node-v${NODE_VERSION}-${OS_PLATFORM}-${OS_ARCH}.$EXT" -# if [ $OS_PLATFORM == "win32" ]; then -# echo "ERROR: win32 host install not supported by this installer" -# exit 1 -# # unzip "$DIST/node-v${NODE_VERSION}-${OS_PLATFORM}-${OS_ARCH}.$EXT" -d "$NODEJS" -# else -# tar $TAR_OPTS "$DIST/node-v${NODE_VERSION}-${OS_PLATFORM}-${OS_ARCH}.$EXT" -C "$NODEJS" -# fi -# # rm "$NODEJS/current" -# ln -sfn "$NODEJS/node-v${NODE_VERSION}-${OS_PLATFORM}-${OS_ARCH}" "$NODEJS/current" -# else -# echo "" -# echo "NodeJS $OS_PLATFORM-$OS_ARCH v$NODE_VERSION already installed" -# fi -# else -# echo "" -# echo "Installing NodeJS $NODE_VERSION" - -# echo "Extracting: $DIST/node-v${NODE_VERSION}-${OS_PLATFORM}-${OS_ARCH}.tar.xz" -# tar -xJf "$DIST/node-v${NODE_VERSION}-${OS_PLATFORM}-${OS_ARCH}.tar.xz" -C "$NODEJS" -# ln -sfn "$NODEJS/node-v${NODE_VERSION}-${OS_PLATFORM}-${OS_ARCH}" "$NODEJS/current" -# fi - # ------------------------------------------------------------ # Install nwa Node Dependencies @@ -546,22 +461,50 @@ chmod u+x "$SITE/scripts/"* # ------------------------------------------------------------ -# Install Systemd Unit Files -# Copy NWA/current/scripts/nwa.service to ~/.config/systemd/user +# Install Systemd Unit File +# Copy SITENAME.service template to ~/.config/systemd/user/${SITENAME}.service # ------------------------------------------------------------ if use_systemd; then echo "" - echo "Installing SystemD Unit Files" + echo "Installing SystemD Unit File" - mkdir -p ~/.config/systemd/user - cp "$NWA/scripts/nwa.service" ~/.config/systemd/user/ + USER_SYSTEMD_DIR="$HOME/.config/systemd/user" + SERVICE_NAME="${SITENAME}.service" + SERVICE_TEMPLATE="$NWA/scripts/SITENAME.service" + SERVICE_FILE="$USER_SYSTEMD_DIR/$SERVICE_NAME" - "${SITE}/scripts/stop-nwa.sh" - sleep 1 - systemctl --user daemon-reload --no-pager + if [[ ! -f "$SERVICE_TEMPLATE" ]]; then + echo "ERROR: systemd service template not found: $SERVICE_TEMPLATE" + exit 1 + fi + + mkdir -p "$USER_SYSTEMD_DIR" + + # Stop existing service if present + systemctl --user stop "$SERVICE_NAME" >/dev/null 2>&1 || true + + # Optional: disable old hardcoded nwa.service if this install is now metadata-named + if [[ "$SERVICE_NAME" != "nwa.service" ]]; then + systemctl --user stop nwa.service >/dev/null 2>&1 || true + systemctl --user disable nwa.service >/dev/null 2>&1 || true + fi + + # Render template + sed \ + -e "s#SITENAME#${SITENAME}#g" \ + -e "s#DESCRIPTION#${DESCRIPTION}#g" \ + "$SERVICE_TEMPLATE" > "$SERVICE_FILE" + + systemctl --user daemon-reload + systemd-analyze --user verify "$SERVICE_FILE" + + systemctl --user enable "$SERVICE_NAME" + systemctl --user restart "$SERVICE_NAME" + + echo "Installed systemd user service:" + echo " $SERVICE_NAME" fi - # ------------------------------------------------------------ # Start NWA # ------------------------------------------------------------ diff --git a/nwa/scripts/SITENAME.service b/nwa/scripts/SITENAME.service new file mode 100644 index 0000000..6edb961 --- /dev/null +++ b/nwa/scripts/SITENAME.service @@ -0,0 +1,31 @@ +[Unit] +Description=DESCRIPTION +After=network.target + +[Service] +Type=simple + +# Environment +Environment=NWA_HOME=%h/.SITENAME +Environment=NODE_ENV=production + +# Paths +WorkingDirectory=%h/.SITENAME/versions/current/nwa/app + +# Start command +ExecStart=%h/.SITENAME/nodejs/current/bin/node index.js + +# Restart behavior +Restart=on-failure +RestartSec=3 + +# Logging +StandardOutput=append:%h/.SITENAME/logs/SITENAME.log +StandardError=append:%h/.SITENAME/logs/SITENAME.log + +# Clean shutdown +KillSignal=SIGTERM +TimeoutStopSec=15 + +[Install] +WantedBy=default.target \ No newline at end of file