Add install-gitea-runner.sh

First Commit
This commit is contained in:
2026-02-04 21:20:26 -05:00
parent c0b9147d79
commit f280c1573d

272
install-gitea-runner.sh Normal file
View File

@@ -0,0 +1,272 @@
#!/usr/bin/env bash
set -euo pipefail
############################################
# KrakenTech Gitea Runner Installer
############################################
# Usage:
# sudo ./install-gitea-runner.sh <GITEA_URL> <REG_TOKEN> <RUNNER_NAME>
#
# Example:
# sudo ./install-gitea-runner.sh \
# https://git.krkn.tech \
# ABC123TOKEN \
# worker-bigben-01
############################################
# Args
############################################
if [ "$#" -ne 3 ]; then
echo "Usage: $0 <gitea_url> <registration_token> <runner_name>"
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 isnt 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 <<EOF
set -e
cd "$INSTALL_DIR"
"$BIN_PATH" register \
--no-interactive \
--instance "$GITEA_URL" \
--token "$REG_TOKEN" \
--name "$RUNNER_NAME" \
--labels "docker,linux,amd64,krkn-builder"
EOF
############################################
# Create systemd Service
############################################
log "Creating systemd service..."
cat > "$SERVICE_PATH" <<EOF
[Unit]
Description=Gitea Actions Runner
After=network-online.target docker.service
Wants=network-online.target
[Service]
Type=simple
User=$RUNNER_USER
Group=$RUNNER_USER
WorkingDirectory=$INSTALL_DIR
ExecStart=$BIN_PATH daemon
Restart=always
RestartSec=5
Environment=DOCKER_HOST=unix:///var/run/docker.sock
LimitNOFILE=1048576
LimitNPROC=1048576
[Install]
WantedBy=multi-user.target
EOF
############################################
# Enable Service
############################################
log "Enabling runner service..."
systemctl daemon-reload
systemctl enable gitea-runner
systemctl start gitea-runner
############################################
# Final Checks
############################################
log "Installation complete."
echo
echo "Status:"
systemctl status gitea-runner --no-pager
echo
echo "Runner name: $RUNNER_NAME"
echo "Gitea URL: $GITEA_URL"
echo