Giteas act_runner rootless: Fehler
Das Fehlerbild
Der docker-in-docker act_runner stürzt kurz nach dem Start mit folgender Fehlermeldung ab:
schallbert@machine:~# docker logs gitea-runner
# [...]
[rootlesskit:parent] error: failed to start the child: fork/exec /proc/self/exe: operation not permitted
Mögliche Ursachen
Problem mit Kernel-Berechtigungen
Der act_runner muss bei der Docker-in-Docker Konfiguration selbst einen eigenen Docker Daemon betreiben. Nur so kann der Runner für die Actions eigene Container erstellen. Dies ist aus Sicherheitsgründen erst einmal nicht erlaubt:
Im Kontext des act_runner führt eine Action Code aus, der selbst Teil des Repository ist. Wird unbemerkt Schadcode in die Action eingeschleust, z.B. von einem “Collaborator”, so kann dieser bei einer Docker-Installation ohne DinD über den unter Umständen mit root-Rechten ausgestatteten Docker-Daemon dockerd direkt auf das Hostsystem durchgreifen.
Bei Anwendung des DinD-Konzeptes kann dies lediglich zum Zugriff auf den dockerd innerhalb des act_runner Containers mit eingeschränkten Rechten führen - immer noch nicht gut, aber vertretbar: Bei Neustart des Containers ist der Status quo ante wiederhergestellt.
Um dem DinD-Container jetzt die Möglichkeit zu geben eigene Actions aufzusetzen, muss in der Konfiguration privileged = true gesetzt werden. Die docker-compose.yml sollte jetzt also wie folgt aussehen:
# docker-compose.yml
# section gitea/act-runner
runner:
image: gitea/act_runner:latest-dind-rootless
container_name: gitea-runner
privileged: true
environment:
- CONFIG_FILE=/config.yml
- GITEA_INSTANCE_URL=<your-gitea-url>
- GITEA_RUNNER_NAME=<your-runners-name>
- GITEA_RUNNER_REGISTRATION_TOKEN=<redacted>
networks:
- gitea
depends_on:
gitea:
condition: service_healthy # required so runner can attach to gitea
restart: true
volumes:
- /opt/gitea/runner/config.yml:/config.yml
- /opt/gitea/runner/data:/data
- </host/build/artifacts:/tmp/container/artifacts>
restart: unless-stopped
Apparmor
https://docs.docker.com/engine/security/apparmor/
echo 'kernel.apparmor_restrict_unprivileged_userns = 0' | sudo tee /etc/sysctl.d/20-apparmor-donotrestrict.conf
sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0
sudo shutdown -r now
Hilfe kam aus der Gitea-Community. Mit der Vorgängerversion 0.2.11 läuft act_runner sauber hoch. Trotzdem wird er aus mir unbekannten Gründen auf Gitea als 0.2.12 angezeigt.