Skip to content

Forgejo-Runner

Podman
  • Nachdem ich ja hier einen Forgejo-Server aufgesetzt habe, den ich mittlerweile auch produktiv nutze, bin ich natürlich sehr schnell über Actions gestolpert.

    Mit Actions kann man verschiedene Prozesse automatisieren. z.B. das Testen seiner Repos, den Build Prozess usw.

    Doch wie macht man das?

    Dafür hat Forgejo ein Tool namens Forgejo-Runner. Die Anleitung für die Installation findet man -> https://forgejo.org/docs/latest/admin/runner-installation/

    97dfddb2-30f4-44a8-94c6-806ab3a47fd1-image.png

    Aus der Anleitung

    The Forgejo Runner is a daemon that fetches workflows to run from a Forgejo instance, executes them, sends back with the logs and ultimately reports its success or failure.

    It needs to be installed separately from the main Forgejo instance. For security reasons it is not recommended to install the runner on the same machine as the main instance.

    Ok, kann ich nicht auf dem Forgejo Server mitlaufen lassen 😞 Das Schöne an dem Runner ist, er kann auch lokal laufen, sprich auf meinem Proxmox 🙂

    Das bin ich dann mal angegangen. Ich wollte jetzt hier nicht wieder eine Anleitung schreiben, dazu gibt es im Netz genügend Informationen. Die Original Anleitung erklärt den Installationsprozess auch ausreichend gut, bis auf eine Kleinigkeit. Die Podman Einbindung habe ich nicht besonders gut hinbekommen, also hatte ich eine anstrengende Sitzung. Es hat lange gedauert, bis ich es hinbekommen habe.

    Systemd

    Im wesentlichen habe ich jetzt einen Debian 13 Trixie Server aufgesetzt, dieser hat Podman verpasst bekommen. Es gibt einen User runner und einen User docker. Zwei SystemD-Dienste habe ich angelegt.

    podman-docker-socket.service

    [Unit]
    Description=Podman Docker API Socket
    Documentation=man:podman-system-service(1)
    Wants=network-online.target
    After=network-online.target
    
    [Service]
    Type=simple
    ExecStart=/usr/bin/podman system service --time=0 unix:///var/run/docker.sock
    ExecStartPost=/bin/sh -c 'sleep 1 && chown root:docker /var/run/docker.sock && chmod 660 /var/run/docker.sock'
    Restart=always
    RestartSec=10
    
    [Install]
    WantedBy=multi-user.target
    

    forgejo-runner.service

    [Unit]
    Description=Forgejo Runner
    Documentation=https://forgejo.org/docs/latest/admin/actions/
    After=docker.service
    
    [Service]
    ExecStart=forgejo-runner daemon
    ExecReload=/bin/kill -s HUP $MAINPID
    
    # This user and working directory must already exist
    User=runner
    WorkingDirectory=/home/runner
    Restart=on-failure
    TimeoutSec=0
    RestartSec=10
    
    [Install]
    WantedBy=multi-user.target
    

    Der podman-docker-socket.service macht was?

    This command makes Podman listen on the standard Docker socket location (/var/run/docker.sock), which allows Docker clients and tools to communicate with Podman instead of Docker. Essentially, it lets you use Docker-compatible tools with Podman as the backend container engine.
    This is useful in environments where you want to use Podman instead of Docker (for security or other reasons) but still need compatibility with tools that expect to talk to Docker.
    @geklaut von claude.ai

    Ok, damit kann der Forgejo-Runner ganz normal seine Docker Befehle absetzen und Podman übernimmt dann.

    Auf meinem Server sieht das dann so aus

    pstree
    systemd─┬─agetty
            ├─cron
            ├─dbus-daemon
            ├─dhclient
            ├─forgejo-runner───7*[{forgejo-runner}]
            ├─podman───7*[{podman}]
            ├─qemu-ga───{qemu-ga}
            ├─sshd───sshd-session───sshd-session───bash───pstree
            ├─systemd───(sd-pam)
            ├─systemd-journal
            ├─systemd-logind
            ├─systemd-timesyn───{systemd-timesyn}
            └─systemd-udevd
    

    Wie man die Actions beim Runner registriert, ist in der Anleitung gut dokumentiert. Den Token dafür bekommt man auf dem Forgejo-Server.

    Token.png

    Wenn dann alles so weit funktioniert, kann man in seine Repos folgendes einbauen. Der Workflow dient zum Testen, ob alles gut funktioniert.

    .forgejo/workflows/test.yaml

    name: Test Runner
    
    on:
      push:
        branches: [ main ]
      workflow_dispatch:
    
    jobs:
      test:
        runs-on: docker
        container:
          image: debian:12
        steps:
          # Package duf installieren
          - name: Install package duf
            run: |
              apt-get update && apt-get install -y duf          
          - name: Test Connection
            run: |
              echo "Hello from Runner!"
              whoami
              hostname
              date
              duf
              echo "Environment is working!"
    

    Wenn man das dann pusht, startet der Workflow / Actions.

    4ac20208-c4f6-467d-b2b6-885956e1639f-image.png

    Am Ende sollte alles grün sein 🙂

    Man kann sich dann die Ausgabe ansehen, ob alles geklappt hat, wie man es erwartet.

    199bbdbd-b833-46af-b4d6-edd796ab28ff-image.png

    So weit bin ich zufrieden und kann mich damit jetzt weiter beschäftigen.

    Anmerkung

    Wie immer, wer Fehler oder Blödsinn findet, mag das bitte hier unten drunter schreiben. Ich ändere das dann gerne.

  • Debian - php8.2 security update

    Linux debian linux php
    1
    0 Stimmen
    1 Beiträge
    96 Aufrufe
    Niemand hat geantwortet
  • Update 1.32.4 - Security Fixes!

    Vaultwarden linux vaultwarden
    1
    0 Stimmen
    1 Beiträge
    117 Aufrufe
    Niemand hat geantwortet
  • Restic v0.17.0 released

    Restic restic linux
    1
    0 Stimmen
    1 Beiträge
    148 Aufrufe
    Niemand hat geantwortet
  • ROCKPro64 - Debian Bullseye Teil 1

    ROCKPro64 debian linux rockpro64
    17
    4
    0 Stimmen
    17 Beiträge
    2k Aufrufe
    FrankMF
    Durch diesen Beitrag ist mir mal wieder eingefallen, das wir das erneut testen könnten Also die aktuellen Daten von Debian gezogen. Das Image gebaut, könnt ihr alles hier im ersten Beitrag nachlesen. Da die eingebaute Netzwerkschnittstelle nicht erkannt wurde, habe ich mal wieder den USB-to-LAN Adapter eingesetzt. Bus 005 Device 002: ID 0b95:1790 ASIX Electronics Corp. AX88179 Gigabit Ethernet Die Installation wollte ich auf einem NVMe Riegel installieren. Die Debian Installation durchgezogen und nach erfolgreicher Installation neugestartet. Und siehe da, ohne das man alles möglich ändern musste, bootete die NVMe SSD Eingesetzter uboot -> 2020.01-ayufan-2013...... Die nicht erkannte LAN-Schnittstelle müsste an nicht freien Treibern liegen, hatte ich da irgendwo kurz gelesen. Beim Schreiben dieses Satzes kam die Nacht und ich konnte noch mal drüber schlafen. Heute Morgen, beim ersten Kaffee, dann noch mal logischer an die Sache ran gegangen. Wir schauen uns mal die wichtigsten Dinge an. root@debian:~# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether 62:03:b0:d6:dc:b3 brd ff:ff:ff:ff:ff:ff 3: enx000acd26e2c8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0a:cd:26:e2:c8 brd ff:ff:ff:ff:ff:ff inet 192.168.3.208/24 brd 192.168.3.255 scope global dynamic enx000acd26e2c8 valid_lft 42567sec preferred_lft 42567sec inet6 fd8a:6ff:2880:0:20a:cdff:fe26:e2c8/64 scope global dynamic mngtmpaddr valid_lft forever preferred_lft forever inet6 2a02:908:1260:13bc:20a:xxxx:xxxx:xxxx/64 scope global dynamic mngtmpaddr valid_lft 5426sec preferred_lft 1826sec inet6 fe80::20a:cdff:fe26:e2c8/64 scope link valid_lft forever preferred_lft forever Ok, er zeigt mir die Schnittstelle eth0 ja an, dann kann es an fehlenden Treibern ja nicht liegen. Lässt dann auf eine fehlerhafte Konfiguration schließen. Nächster Halt wäre dann /etc/network/interfaces Das trägt Debian ein # This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). source /etc/network/interfaces.d/* # The loopback network interface auto lo iface lo inet loopback # The primary network interface allow-hotplug enx000acd26e2c8 iface enx000acd26e2c8 inet dhcp # This is an autoconfigured IPv6 interface iface enx000acd26e2c8 inet6 auto Gut, bei der Installation hat Debian ja nur die zusätzliche Netzwerkschnittstelle erkannt, folgerichtig ist die auch als primäre Schnittstelle eingetragen. Dann ändern wir das mal... # This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). source /etc/network/interfaces.d/* # The loopback network interface auto lo iface lo inet loopback # The primary network interface #allow-hotplug enx000acd26e2c8 allow-hotplug eth0 #iface enx000acd26e2c8 inet dhcp iface eth0 inet dhcp # This is an autoconfigured IPv6 interface #iface enx000acd26e2c8 inet6 auto iface eth0 inet6 auto Danach einmal alles neu starten bitte systemctl status networking Da fehlte mir aber jetzt die IPv4 Adresse, so das ich einmal komplett neugestartet habe. Der Ordnung halber, so hätte man die IPv4 Adresse bekommen. dhclient eth0 Nachdem Neustart kam dann das root@debian:/etc/network# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 62:03:b0:d6:dc:b3 brd ff:ff:ff:ff:ff:ff inet 192.168.3.172/24 brd 192.168.3.255 scope global dynamic eth0 valid_lft 42452sec preferred_lft 42452sec inet6 fd8a:6ff:2880:0:6003:b0ff:fed6:dcb3/64 scope global dynamic mngtmpaddr valid_lft forever preferred_lft forever inet6 2a02:908:1260:13bc:6003:xxxx:xxxx:xxxx/64 scope global dynamic mngtmpaddr valid_lft 5667sec preferred_lft 2067sec inet6 fe80::6003:b0ff:fed6:dcb3/64 scope link valid_lft forever preferred_lft forever 3: enx000acd26e2c8: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether 00:0a:cd:26:e2:c8 brd ff:ff:ff:ff:ff:ff Fertig, eth0 läuft. Nun kann man den zusätzlichen Adapter entfernen oder halt konfigurieren, wenn man ihn braucht. Warum der Debian Installer die eth0 nicht erkennt verstehe ich nicht, aber vielleicht wird das irgendwann auch noch gefixt. Jetzt habe ich erst mal einen Workaround um eine Installation auf den ROCKPro64 zu bekommen.
  • Thunderbird - Schriftgröße der Mailansicht dauerhaft ändern

    Linux linux thunderbird
    1
    0 Stimmen
    1 Beiträge
    209 Aufrufe
    Niemand hat geantwortet
  • Wireguard 1.0.0

    Wireguard linux wireguard
    1
    0 Stimmen
    1 Beiträge
    341 Aufrufe
    Niemand hat geantwortet
  • checkmk - Agent installieren

    Verschoben checkmk checkmk linux
    1
    1
    0 Stimmen
    1 Beiträge
    2k Aufrufe
    Niemand hat geantwortet
  • Restic - Ein Backupkonzept - Automatisieren!

    Verschoben Restic linux restic
    1
    1
    0 Stimmen
    1 Beiträge
    1k Aufrufe
    Niemand hat geantwortet