#!/usr/bin/env bash # Run as your normal Ubuntu user, not as root. Uses sudo for installation. set -euo pipefail [[ $(uname -m) == x86_64 ]] || { echo 'This installer targets x86_64 only'; exit 1; } base=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd) [[ ! -e /etc/smartpark-runner/config.yaml ]] || { echo 'Runner already configured; inspect it rather than overwrite.'; exit 1; } sudo apt-get update sudo apt-get install --no-install-recommends curl ca-certificates xz-utils downloads=$(mktemp -d) cd "$downloads" # Resolve the current Node 22 release from its official checksum list, then # install and record that exact release. No downloaded install script is run. curl -fSLO https://nodejs.org/dist/latest-v22.x/SHASUMS256.txt node_archive=$(awk '$2 ~ /^node-v22\.[0-9]+\.[0-9]+-linux-x64\.tar\.xz$/ {print $2}' SHASUMS256.txt) [[ -n "$node_archive" && "$node_archive" != *$'\n'* ]] node_version=${node_archive#node-} node_version=${node_version%-linux-x64.tar.xz} curl -fSLO "https://nodejs.org/dist/$node_version/$node_archive" awk -v f="$node_archive" '$2 == f' SHASUMS256.txt | sha256sum -c - tar -xf "$node_archive" [[ ! -e /opt/smartpark-node ]] || { echo '/opt/smartpark-node exists; inspect before continuing'; exit 1; } sudo mv "${node_archive%.tar.xz}" /opt/smartpark-node sudo chown -R root:root /opt/smartpark-node runner_version=2.3.0 runner_file="gitea-runner-$runner_version-linux-amd64" curl -fSLO "https://dl.gitea.com/gitea-runner/$runner_version/$runner_file" curl -fSLO "https://dl.gitea.com/gitea-runner/$runner_version/$runner_file.sha256" sha256sum -c "$runner_file.sha256" sudo install -m 0755 "$runner_file" /usr/local/bin/gitea-runner if id smartpark-runner >/dev/null 2>&1; then echo 'smartpark-runner account already exists; inspect its permissions before continuing.' exit 1 fi sudo useradd --system --create-home --home-dir /var/lib/smartpark-runner --shell /usr/sbin/nologin smartpark-runner sudo chmod 700 /var/lib/smartpark-runner sudo install -d -o smartpark-runner -g smartpark-runner -m 700 /var/lib/smartpark-runner/work sudo install -d -o root -g smartpark-runner -m 750 /etc/smartpark-runner sudo install -o root -g smartpark-runner -m 640 "$base/runner-config.yaml" /etc/smartpark-runner/config.yaml sudo install -m 644 "$base/smartpark-runner.service" /etc/systemd/system/smartpark-runner.service sudo systemctl daemon-reload sudo -u smartpark-runner /opt/smartpark-node/bin/node --version sudo -u smartpark-runner /usr/local/bin/gitea-runner --version sudo -u smartpark-runner latexmk -v echo 'Installed, but NOT registered or started. Registration requires an authorized token.' echo "Verified downloads remain in $downloads; remove those files later using the Files app if desired."