Repository navigation
Conversation
…itory The shared helper already creates the container, so this script only installs the runner and keeps those registrations across updates.
Try this script
COMMUNITY_SCRIPTS_URL=https://raw.githubusercontent.com/Baker/DevScripts/github-actions-runner \
bash -c "$(curl -fsSL https://raw.githubusercontent.com/Baker/DevScripts/github-actions-runner/ct/github-actions-runner.sh)"
Against a core branch as wellAdd Useful flags while testing
|
|
✍️ Description
Adds a Debian 13 container for the GitHub Actions runner. One LXC registers several runner processes per repository, because a personal account cannot share one registration across repos and each process takes a single job.
The shared helper creates the container. This script asks for the owner, the repository list, a token, and how many runners to register, then installs the upstream tarball with
fetch_and_deploy_gh_release. Docker is installed withsetup_dockerso workflow jobs can start containers. The runner binaries stay on the system, same arrangement asgitea-runner.The token is used to mint a short-lived registration token and is not written to disk. Before the container is created, the host asks GitHub for a registration token for each repository and discards the body, so a bad token does not leave an LXC behind. Updates replace
/opt/actions-runnerand copy the new binaries onto the existing registrations. They do not ask for the token again.config.shrefuses to run as root unlessRUNNER_ALLOW_RUNASROOT=1. The scripts do not add a system user, so the service runs as root with that variable set. Workflow code from the registered repositories has root inside the container. Credentials are mode 600 under a mode 700 directory. (Happy to fix this if y'all want, not sure what the standard process is.)Defaults are 4 cores, 12 GB RAM, and 40 GB disk. A job such as govulncheck can use several gigabytes, and the runners share one network namespace, so two jobs that publish the same host port will collide.
This port has not been executed on a Proxmox host. The behavior was taken from a host installer that is already running in a homelab. That installer also created the LXC itself. This version leaves creation to
build_container, so it does not reconfigure an existing CTID.🔗 Related PR / Issue
Link: #
✅ Prerequisites (X in brackets)
🏗️ arm64 Support (X in brackets)
🖥️ Tested on (X in brackets)
🛠️ Type of Change (X in brackets)
README,AppName.md,CONTRIBUTING.md, or other docs.🔍 Code & Security Review (X in brackets)
CODE-AUDIT.md&CONTRIBUTING.mdguidelinesAppName.sh,AppName-install.sh,AppName.json)fetch_and_deploy_gh_release,fetch_and_deploy_codeberg_release,fetch_and_deploy_gl_release, orfetch_and_deploy_from_urlinstead ofgit pull.Docker is installed for workflow containers, the same reason
gitea-runnercallssetup_docker. The runner is not run from a Docker image.🤖 AI Assistance (X in brackets)
AGENTS.mdand.github/agents/pve-script-creator.agent.mdas guidance, and the output has been reviewed and corrected to match those guidelines.Please describe to which degree, if any, an LLM was used in creating this pull request. Name the model(s) used and, if applicable, the reasoning/thinking effort level (e.g. "Claude Sonnet 4.5, high reasoning, used to draft the install script, then manually reviewed and tested" or "No LLM used"). This is informational, not a penalty — but scripts that are clearly AI-generated and not further revised by the author to match
CODE-AUDIT.md/CONTRIBUTING.mdmay be closed without review.Grok 4.7 drafted the three files from
AGENTS.md,gitea-runner, and an existing homelab installer, then aligned them tofetch_and_deploy_gh_release,setup_docker,prompt_password,prompt_input_required, andarch_resolve. The draft was reviewed against those helpers before commit.📋 Additional Information (optional)
Upstream release checked while writing this:
actions/runnerv2.338.0 publishesactions-runner-linux-x64-2.338.0.tar.gzandactions-runner-linux-arm64-2.338.0.tar.gz.Unattended install:
var_gh_owner=OWNER var_gh_repos=repo-one,repo-two var_gh_token=TOKEN bash -c "$(curl -fsSL https://raw.githubusercontent.com/Baker/DevScripts/github-actions-runner/ct/github-actions-runner.sh)"var_runner_countdefaults to 2.var_runner_namedefaults togithub-runner.I have been running a similar version that I decided to use and convert to this to Community Script. (Link)
📦 Application Requirements (for new scripts)
actions/runnerwas created 2019-04-30, last pushed 2026-10-12, and has 6323 stars. Releases ship official linux tarballs.🌐 Source
https://github.com/actions/runner
https://docs.github.com/en/actions/hosting-your-own-runners