diff --git a/install-gitea-runner.sh b/install-gitea-runner.sh new file mode 100644 index 0000000..fb5e815 --- /dev/null +++ b/install-gitea-runner.sh @@ -0,0 +1,272 @@ +#!/usr/bin/env bash +set -euo pipefail + +############################################ +# KrakenTech Gitea Runner Installer +############################################ + +# Usage: +# sudo ./install-gitea-runner.sh +# +# Example: +# sudo ./install-gitea-runner.sh \ +# https://git.krkn.tech \ +# ABC123TOKEN \ +# worker-bigben-01 + +############################################ +# Args +############################################ + +if [ "$#" -ne 3 ]; then + echo "Usage: $0 " + exit 1 +fi + +GITEA_URL="$1" +REG_TOKEN="$2" +RUNNER_NAME="$3" + +############################################ +# Globals +############################################ + +RUNNER_USER="gitea-runner" +INSTALL_DIR="/opt/gitea-runner" +BIN_PATH="/usr/local/bin/gitea-runner" +SERVICE_PATH="/etc/systemd/system/gitea-runner.service" + +############################################ +# Helpers +############################################ + +log() { + echo -e "\033[1;32m[*]\033[0m $*" +} + +warn() { + echo -e "\033[1;33m[!]\033[0m $*" +} + +err() { + echo -e "\033[0;31m[✗]\033[0m $*" >&2 + exit 1 +} + +############################################ +# Root Check +############################################ + +if [ "$(id -u)" -ne 0 ]; then + err "Run as root." +fi + +############################################ +# OS Check +############################################ + +if ! command -v apt >/dev/null; then + err "This script supports Debian/Ubuntu only." +fi + +############################################ +# Remove Snap Docker (If Present) +############################################ + +if command -v snap >/dev/null && snap list | grep -q docker; then + warn "Snap Docker detected. Removing..." + snap remove --purge docker || true + rm -rf /var/snap/docker /snap/docker /var/lib/snapd/snaps/docker* +fi + +############################################ +# Install Base Deps +############################################ + +log "Installing dependencies..." + +apt update + +apt install -y \ + ca-certificates \ + curl \ + gnupg \ + lsb-release \ + git \ + jq \ + uidmap \ + unzip \ + tar \ + build-essential \ + apt-transport-https + +############################################ +# Install Node.js (LTS) +############################################ + +log "Installing Node.js (LTS)..." + +if ! command -v node >/dev/null; then + curl -fsSL https://deb.nodesource.com/setup_lts.x | bash - + + apt install -y nodejs +fi + +# Verify +node -v +npm -v + + +############################################ +# Install Docker (Official) +############################################ + +if ! command -v docker >/dev/null; then + log "Installing Docker..." + + curl -fsSL https://get.docker.com | sh + + systemctl enable docker + systemctl start docker +fi + +############################################ +# NVIDIA Runtime (Optional) +############################################ + +if command -v nvidia-smi >/dev/null; then + log "NVIDIA detected. Installing container runtime..." + + apt install -y nvidia-container-toolkit + + nvidia-ctk runtime configure --runtime=docker + + systemctl restart docker +fi + +############################################ +# Create Runner User +############################################ + +if ! id "$RUNNER_USER" &>/dev/null; then + log "Creating runner user..." + useradd \ + --system \ + --home "$INSTALL_DIR" \ + --shell /bin/bash \ + "$RUNNER_USER" +fi + +usermod -aG docker "$RUNNER_USER" + +############################################ +# Setup Directory +############################################ + +log "Setting up directories..." + +mkdir -p "$INSTALL_DIR" +chown -R "$RUNNER_USER:$RUNNER_USER" "$INSTALL_DIR" + +############################################ +# Download Gitea Runner +############################################ + +log "Downloading Gitea runner..." + +TMP_FILE="/tmp/gitea-runner.bin" + +curl -fL --retry 5 --retry-delay 2 \ + https://dl.gitea.com/act_runner/0.2.13/act_runner-0.2.13-linux-amd64 \ + -o "$TMP_FILE" + +# Ensure it isn’t HTML +file "$TMP_FILE" | grep -qi "ELF" >/dev/null || { echo "Download failed"; exit 1; } + +mv "$TMP_FILE" "$BIN_PATH" +chmod +x "$BIN_PATH" + +############################################ +# Register Runner +############################################ + +log "Registering runner..." + +# Create runner home atomically +install -d -m 750 -o "$RUNNER_USER" -g "$RUNNER_USER" "$INSTALL_DIR" + +# Ensure work dir exists +install -d -m 750 -o "$RUNNER_USER" -g "$RUNNER_USER" "$INSTALL_DIR/work" + +# Remove any stale identity +rm -f "$INSTALL_DIR/.runner" + +# Register as runner user in correct dir +runuser -u "$RUNNER_USER" -- bash < "$SERVICE_PATH" <