From b2e9b8aeccffdb33c678670fb57960068434c0a3 Mon Sep 17 00:00:00 2001 From: bruno Date: Sat, 25 Jul 2026 09:24:10 -0400 Subject: [PATCH] =?UTF-8?q?fix:=20Alpine-compatible=20install=20script=20?= =?UTF-8?q?=E2=80=94=20no=20sudo,=20doas,=20curl=20pre-installed?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Changed shebang to /bin/sh for wider compatibility - Script requires root (sudo/doas) — all privileged ops work directly - Alpine: installs curl+docker before download (was failing silently) - Alpine: writes OpenRC init directly (no sudo/tee permission issue) - Debian: auto-detects SUDO_USER for WorkingDirectory instead of hardcoded /home/bruno - All OS: prerequisites (curl, docker) installed in unified step [1/5] --- scripts/install-gitea-runner.sh | 121 ++++++++++++++++---------------- 1 file changed, 59 insertions(+), 62 deletions(-) diff --git a/scripts/install-gitea-runner.sh b/scripts/install-gitea-runner.sh index 9004877..bfa1b97 100755 --- a/scripts/install-gitea-runner.sh +++ b/scripts/install-gitea-runner.sh @@ -1,13 +1,18 @@ -#!/bin/bash +#!/bin/sh # ================================================================ # install-gitea-runner.sh # Installation automatisée d'un runner Gitea Actions # # Usage: -# ./install-gitea-runner.sh +# sudo ./install-gitea-runner.sh # -# Exemple: -# ./install-gitea-runner.sh abc123 "dev-lab" "self-hosted,lab,docker,obsigate" +# Exemple (Alpine) : +# doas ./install-gitea-runner.sh abc123 "dev-lab" "self-hosted,lab,docker,obsigate" +# +# Exemple (Debian) : +# sudo ./install-gitea-runner.sh abc123 "dev-lab" "self-hosted,lab,docker,obsigate" +# +# ⚠️ Doit être exécuté en root (sudo / doas) # ================================================================ set -e @@ -16,21 +21,16 @@ NAME="$2" LABELS="$3" if [ -z "$TOKEN" ] || [ -z "$NAME" ] || [ -z "$LABELS" ]; then - echo "❌ Usage: ./install-gitea-runner.sh " - echo " Example: ./install-gitea-runner.sh abc123 dev-lab 'self-hosted,lab,docker,obsigate'" + echo "❌ Usage: sudo ./install-gitea-runner.sh " + echo " Example: sudo ./install-gitea-runner.sh abc123 dev-lab 'self-hosted,lab,docker,obsigate'" exit 1 fi -echo "=============================================" -echo " Gitea Runner Installer" -echo " Server : $NAME" -echo " Labels : $LABELS" -echo "=============================================" -echo "" - -# ── 1. Detect OS ───────────────────────────────────────────────── +# ── 0. Detect OS + privilege elevation method ────────────────────── if [ -f /etc/alpine-release ]; then OS="alpine" + # Alpine: utilise doas, mais si on est déjà root (via doas), on continue + # On vérifie juste que curl et les outils de base sont là elif [ -f /etc/debian_version ]; then OS="debian" elif [ -f /etc/arch-release ]; then @@ -41,28 +41,23 @@ else fi echo "🖥️ Detected OS: $OS" -# ── 2. Ensure Docker ───────────────────────────────────────────── -echo "[1/4] Checking Docker..." -if ! command -v docker &>/dev/null; then - echo " Installing Docker..." - if [ "$OS" = "alpine" ]; then - apk add --no-cache docker curl - rc-update add docker boot - service docker start - elif [ "$OS" = "debian" ]; then - sudo apt-get update -qq - sudo apt-get install -y -qq docker.io curl - sudo usermod -aG docker "$USER" - elif [ "$OS" = "arch" ]; then - sudo pacman -S --noconfirm docker curl - sudo systemctl enable --now docker - sudo usermod -aG docker "$USER" - fi +# ── 1. Install prerequisites ────────────────────────────────────── +echo "[1/5] Installing prerequisites..." +if [ "$OS" = "alpine" ]; then + apk add --no-cache curl docker > /dev/null 2>&1 + rc-update add docker boot 2>/dev/null || true + service docker start 2>/dev/null || true +elif [ "$OS" = "debian" ]; then + apt-get update -qq + apt-get install -y -qq docker.io curl +elif [ "$OS" = "arch" ]; then + pacman -S --noconfirm docker curl + systemctl enable --now docker fi -echo " ✅ Docker OK" +echo " ✅ Prerequisites OK (curl, docker)" -# ── 3. Download & install runner ────────────────────────────────── -echo "[2/4] Downloading Gitea act_runner..." +# ── 2. Download runner ───────────────────────────────────────────── +echo "[2/5] Downloading Gitea act_runner v0.2.11..." ARCH=$(uname -m) case "$ARCH" in x86_64) RUNNER_ARCH="amd64" ;; @@ -72,42 +67,44 @@ case "$ARCH" in esac RUNNER_URL="https://dl.gitea.com/act_runner/0.2.11/act_runner-0.2.11-linux-${RUNNER_ARCH}" -sudo curl -sL -o /usr/local/bin/act_runner "$RUNNER_URL" -sudo chmod +x /usr/local/bin/act_runner -echo " ✅ act_runner installed ($(/usr/local/bin/act_runner --version 2>&1 | head -1))" +curl -sL -o /usr/local/bin/act_runner "$RUNNER_URL" +chmod +x /usr/local/bin/act_runner +echo " ✅ act_runner v0.2.11 installed" -# ── 4. Register ─────────────────────────────────────────────────── -echo "[3/4] Registering runner with Gitea..." +# ── 3. Register ──────────────────────────────────────────────────── +echo "[3/5] Registering runner with Gitea..." /usr/local/bin/act_runner register \ + --no-interactive \ --instance https://git.dracodev.net \ --token "$TOKEN" \ --name "$NAME" \ - --labels "$LABELS" \ - --no-interactive + --labels "$LABELS" echo " ✅ Runner registered" -# ── 5. Install as service ──────────────────────────────────────── -echo "[4/4] Installing as system service..." +# ── 4. Install as service ───────────────────────────────────────── +echo "[4/5] Installing as system service..." if [ "$OS" = "alpine" ]; then - # Alpine OpenRC - sudo tee /etc/init.d/gitea-runner > /dev/null < /etc/init.d/gitea-runner <<'OPENRC_EOF' #!/sbin/openrc-run -name="Gitea Actions Runner ($NAME)" +name="Gitea Actions Runner" command="/usr/local/bin/act_runner" command_args="daemon" command_background=true -pidfile="/run/\${RC_SVCNAME}.pid" +pidfile="/run/${RC_SVCNAME}.pid" output_log="/var/log/gitea-runner.log" error_log="/var/log/gitea-runner.log" -EOF - sudo chmod +x /etc/init.d/gitea-runner - sudo rc-update add gitea-runner default - sudo service gitea-runner start +OPENRC_EOF + chmod +x /etc/init.d/gitea-runner + rc-update add gitea-runner default + service gitea-runner start else # Systemd (Debian, Arch) - # Note: act_runner cherche .runner dans WorkingDirectory → doit être le home - sudo tee /etc/systemd/system/gitea-runner.service > /dev/null < /etc/systemd/system/gitea-runner.service <&1 | head -3 + service gitea-runner status 2>&1 | head -3 else - sudo systemctl status gitea-runner --no-pager -l 2>&1 | head -5 + systemctl status gitea-runner --no-pager -l 2>&1 | head -5 fi echo ""