3.8 KiB
Hosting Telodendria
These are just my own personal notes for hosting Telodendria's code infrastructure. This document is not intended to be used by normal Telodendria users or developers. It may be useful if you are forking Telodendria, but I sincerely hope you'll contribute to the upstream project instead. I'm writing this document solely for my own reference, but I am placing it into Telodendria's code repository in the name of transparency.
Runners
The general sequence of steps required for setting up a CI runner is as follows:
-
Install the runner OS with all the defaults. I typically install my runners in virtual machines with 1 vcpu and 512mb RAM. Only Debian complained about this configuration, but since I didn't install a desktop environment, it worked out fine.
-
Install the packages required to build and execute the runner. These are:
- Git for checking out the source code.
- NodeJS for running
actions/checkout
, I think. Not really sure, all I know is that the runner will fail all jobs without NodeJS. - Go for compiling the runner itself.
Run these commands to install the packages:
- OpenBSD:
pkg_add git go node
- FreeBSD:
pkg install git go node
- NetBSD:
pkgin install git go nodejs openssl mozilla-rootcerts-openssl
(Note that thego
executable isgo121
or whatever version was installed. and that NetBSD has no root certificates installed by default) - Debian:
apt install git golang nodejs
- Alpine:
apk add git go nodejs
-
Install any development packages required to build Telodendria. For the BSDs, all development tools are built in so no additional packages are necessary. For the Linux distributions I've messed with, install these additional packages:
- Debian:
apt install make gcc libssl-dev
- Alpine:
apk add make gcc musl-dev openssl-dev
- Debian:
-
Clone
https://git.telodendria.io/Telodendria/act_runner.git
. -
Run
go build
in theact_runner
directory. On NetBSD, you may have toumount /tmp
first because/tmp
is by default very small. Otherwise, make/tmp
larger during installation. 2GB should be plenty. -
Run
./act_runner register
to register the runner. When prompted for the tags, follow following convention:- Linux Distros:
linux
,<distro>-v<version>
,<arch>
- BSD Derivatives:
bsd
,<osname>-v<version>
,<arch>
- Windows:
windows
,windows-v<version>
,<arch>
- MacOS:
macos
,macos-v<version>
,<arch>
- Others:
other
,<osname>-v<version>
,<arch>
Where
<arch>
is one ofx86
orx64
for now. ARM runners will be a future project. - Linux Distros:
-
Run
./act_runner daemon
.
Startup Scripts
We will obviously want act_runner
to execute on bootup. Here are the start scripts I used:
Alpine
In /etc/init.d/act_runner
:
#!/sbin/openrc-run
directory="/home/runner/act_runner"
command="/home/runner/act_runner/act_runner"
command_args="daemon"
command_user="runner:runner"
command_background="true"
pidfile="/run/act_runner.pid"
Don't forget to chmod +x /etc/init.d/act_runner
.
Then just rc-update add act_runner
and rc-service act_runner start
.
Debian
In /etc/systemd/system/act_runner.service
:
[Unit]
Description=Gitea Actions runner
[Service]
ExecStart=/home/runner/act_runner/act_runner daemon
ExecReload=/bin/kill -s HUP $MAINPID
WorkingDirectory=/home/runner/act_runner
TimeoutSec=0
RestartSec=10
Restart=always
User=runner
[Install]
WantedBy=multi-user.target
Then just systemctl enable act_runner
and systemctl start act_runner
.
Other
Eventually I got sick of writing init scripts for all the various operating systems.
Just put this in runner
's crontab
:
@reboot cd /home/runner/act_runner && ./act_runner daemon
That seems to do the job good enough, and it's cross platform.