Files
infra-scripts/gitea-runner
Damien 294960f44d gitea-runner: detect existing LXC on re-run, refresh OS on update
Ports openbao's host-side update path to gitea-runner: main() now uses
find_existing_lxc (hostname/tag match) to switch into a new update_lxc()
instead of always recreating the container, with an explicit --update
dispatch case reaching update_runner() (previously inferred only from
/usr/local/bin/act_runner presence). require_root is ported from openbao
for the host-side pct branch.

Extracted a small exec_in_lxc() helper (option a from the two offered)
rather than duplicating the curl-pipe invocation, since main() now needs
to drive both the create and update paths through the same piping logic
with only the trailing --install/--update flag differing — matching
openbao's own exec_in_lxc for consistency.

update_runner() now calls refresh_os_packages before touching the binary,
mirroring openbao's update_inside_lxc(). Also switched create_lxc's LXC
tag from the hardcoded "cicd" to the LXC_TAG variable (added in the prior
commit but unused until now) so find_existing_lxc's tag match actually
works.

Documented the OS-refresh-on-update behavior in both READMEs.

Closes #15
2026-07-30 11:28:14 +02:00
..

Gitea Act Runner

Automated installation script for a Gitea Actions runner in an Alpine LXC on Proxmox.

Features

Single script, three automatic modes:

Context Action
From Proxmox host Creates Alpine LXC + installs everything
From empty LXC Installs Docker + act_runner + OpenRC service
From LXC with act_runner installed Updates binary to latest version

Usage

Full install (from Proxmox shell)

bash -c "$(curl -fsSL https://gitea.arnodo.fr/Damien/infra-scripts/raw/branch/main/gitea-runner/install.sh)"

The script automatically creates an Alpine LXC (template auto-detected from pveam available) with Docker and act_runner.

Customization

Environment variables to override defaults:

CTID=120 HOSTNAME=runner-02 CORES=4 RAM=4096 bash -c "$(curl -fsSL https://gitea.arnodo.fr/Damien/infra-scripts/raw/branch/main/gitea-runner/install.sh)"
Variable Default Description
CTID auto Container ID
RUNNER_HOSTNAME gitea-runner LXC Hostname
TEMPLATE auto-detected Alpine template; auto-detected from pveam available
CORES 2 CPU cores
RAM 2048 RAM in MiB
DISK 8 Disk in GB
STORAGE local-lvm Proxmox storage for the LXC
BRIDGE vmbr0 Network bridge

Runner registration

After installation, enter the LXC and register the runner:

pct enter <CTID>
cd /var/lib/gitea-runner
su -s /bin/bash gitea-runner -c "act_runner register"
rc-service gitea-runner start

Update

From inside the LXC:

curl -fsSL https://gitea.arnodo.fr/Damien/infra-scripts/raw/branch/main/gitea-runner/install.sh | bash

The script detects that act_runner is already installed and switches to update mode automatically. Re-running from the Proxmox host does the same, plus refreshes the LXC's Alpine packages first (apk update && apk upgrade).

Architecture

  • OS: Alpine 3.23 (LXC non-privileged, nesting active)
  • Docker: installed via apk, OpenRC service
  • act_runner: official binary from gitea.com/gitea/act_runner
  • Service: OpenRC with logs in /var/log/gitea-runner.log
  • User: gitea-runner (group docker)