HomeNet 02 – GitHub Runner auf Raspberry PI

Da ich keine komplizierten Backup Systeme in meiner Umgebung will (wenn einer der RaspberryPI’s kaputt ist, wird er getauscht), habe ich mir vorgenommen auch die Ersteinrichtung weitestgehend zu automatisieren. Zudem sollte alle Konfiguration außerhalb der Umgebung liegen. Ausgehend von diesen Anforderungen landet man schnell bei GitHub. In diesem Artikel erkläre ich Dir, wie du ein GitHub Repository initialisiert und den GitHub Runner auf einem zuvor präparierten RaspberryPI (oder jedem anderem Linux System) installierst.

Hier kommst du zur “HomeNet” Artikelübersicht um Dir einen Überblick zu verschaffen.

Folgend noch einmal das Übersichtsbild der Umgebung, mit den Komponenten um die es in diesem Artikel gehen wird.

Möchte ich mich nicht um die Sicherung von Konfigurationen kümmern müssen, macht es Sinn, all dies außerhalb des eigenen Netzwerkes zu speichern. Ich nutze dafür ein GitHub Repository und einen dazugehörigen GitHub-Runner für die Automatisierung. Der GitHub-Runner ist ein Dienst der Workflows abarbeiten kann, die in einem GitHub Repository (oder einer GitHub-Organisation, aber das lassen wir mal beiseite) in Form von YAML Dateien abgelegt werden. Damit, wie diese YAML Dateien geschrieben werden, beschäftigen wir uns in einem Folgeartikel. Hier geht es erstmal um die Installation des GitHub Repository nebst Runner. Voraussetzung ist die Installation eines RaspberryPI mit Ubuntu 20.04 (oder höher) oder mit RaspberryPI OS. Achte zudem darauf einen Raspberry PI zu verwenden, der auch in der Lage ist, .NET Code auszuführen. Genauere Details findest du hier.

Anlegen des GitHub Repositories

Als Grundlage benötigst du einen GitHub Account nebst einem Repository, welches wir in folgenden Schritt anlegen.

Melde dich mit deinem GitHub Konto an, wechsel zum Tab “Repositories” und klick auf “New”.

Nun vergibst du einen beliebigen Namen und einen sprechende Beschreibung.

Du hast die Wahl, das Repository “Public” oder “Private” zu setzen. Beides funktioniert. Grundsätzlich vertrete ich zwar den Ansatz immer alles öffentlich zu schalten und mit der Community zu teilen. Allerdings werden wir im weiteren Verlauf in diesem Repository auch alle unsere “Secrets” als GitHub Secrets anlegen. Das ist für mich so die Grenze ab der du darüber nachdenken solltest, das Repository auf “private” umzuschalten.

Durch das Hinzufügen einer README Datei wird das Repository auch gleich initialisiert.

Erzeugen des GitHub-Runner Benutzerkonto

Wir wollen natürlich alle Dinge die der GitHub Runner auf dem System machen soll, in einem eigenen Benutzerkontext machen. Zu diesem Zweck legst du als erstes einen User-Account für den Runner auf dem schon vorhandenen RasperryPI an. Logge dich hierfür als Benutzer ein, der die entsprechenden Rechte hat, Benutzer anzulegen.

  • Lege die Gruppe “sudo-nopasswd” an, die sudo Berechtigungen ohne Passwort Eingabe erlaubt (Optional)
    • sudo /sbin/addgroup sudo-nopasswd
  • Erlaube der Gruppe die Ausführung administrativer Aufgaben
    • sudo bash -c 'echo "%sudo-nopasswd ALL=(ALL:ALL) NOPASSWD:ALL" > /etc/sudoers.d/sudo-nopasswd'
  • Lege den User “github” an   
    • sudo /sbin/adduser --force-badname --home /home/github --disabled-password --gecos "" --shell /bin/bash github
  • Ändere nun das Passwort für den User (Und nicht vergessen in deinem Kennwort Manager zu speichern)
    • sudo passwd github
  • Füge den Benutzer der Gruppe sudo-nopasswd hinzu
    • sudo /sbin/usermod -a -G sudo-nopasswd github

Wenn du möchtest, kannst du noch ein ssh Verzeichnis für den User erstellen, um deinen SSH public key abzulegen und dich als “github” User anzumelden. Die folgenden 5 Schritte sind dafür notwendig:

  • Erzeugen des ssh Verzeichnis
    • mkdir .ssh
  • Setzen der Berechtigungen auf das Verzeichnis
    • chown 700 .ssh
  • Erstellen der Datei “authorized_keys”
    • touch .ssh/authorized_keys
  • Setzen der Berechtigungen auf die Datei
    • chown 600 .ssh/authorized_keys
  • Nun kannst du die in die Datei “authorized_keys” deinen Key hinzufügen

Installation des GitHub-Runners

Nun geht es an die eigentliche Installation des GitHub Runners.

Um alle notwendigen persönlichen Informationen zur Installation des GitHub Runners zu erhalten, wechsle auf die “Runner” Einstellungen innerhalb deines GitHub Repositories und wähle das passende Betriebssystem und die passende Architektur aus.

  • Wechsel zum Benutzer “github” durch eine neue SSH Session oder durch Eingabe von su github
  • Wechsel in das Homeverzeichnis des Benutzers “github” und lege das Verzeichnis des GitHub Runners an. Ich nutze hier ganz gerne die Verzeichnisse wie vom Hersteller empfohlen, also gehe ich wie folgt vor:
    • cd ~
    • mkdir actions-runner
    • cd actions-runner
  • Nun wird der Runner heruntergeladen. Beachte bitte, dass es sich nicht um einen vollständigen Downloadlink handelt, da ich, um den Artikel auch dauerhaft gültig zu halten, die Version und Plattform durch Platzhalter ersetzt habe.
    • curl -o runner.tar.gz -L https://github.com/actions/runner/releases/download/v<VERSION>/actions-runner-linux-<PLATTFORM>-<VERSION>.tar.gz
  • Möchtest du auf Nummer sicher gehen, kannst du den Download gegen seine Hashsumme validieren. Die hashsumme erhältst du in der GitHub Installationsdokumentation wie oben beschrieben.
    • echo "<HASHSUMME>  runner.tar.gz" | shasum -a 256 -c
  • Als nächstes entpackst du die TAR-Daten entpackt
    • tar xzf ./runner.tar.gz
  • Um auf dein GitHub Konto zuzugreifen, benötigt der Runner ein Token. Dieses erhältst du ebenfalls in der oben beschriebenen Installationsanleitung. Da ich beim Austausch des Raspberry PI den Runner ggf. irgendwann erneut installieren muss, habe ich mir das Token in meinem Password-Safe gesichert. Du kannst aber auch bei jeder Neu-Installation das Token neu erzeugen. Zusätzlich benötigt der Runner auch noch einige Meta Informationen. All dies kannst du mit folgenden Aufruf abfragen lassen:
    • ./config.sh --url https://github.com/<YOURACCOUNT>/<YOURREPO> --token <TOKEN>
    • Ich persönlich belasse hier gerne alle Einstellungen, die im folgenden abgefragt werden im default.
  • In der GitHub Runner Installationsdokumentation ist nun beschrieben, dass dieser mit dem Kommando “./run.sh” gestartet werden soll. Dies machen ich nicht, sondern installiere den Runner als Daemon, damit dieser automatisch beim Systemstart gestartet wird. Dies geschieht mit den beiden folgenden Kommandos:
    • sudo ./svc.sh install
    • sudo ./svc.sh start
  • Auf der Konfigurationsseite des GitHub Runners (“Settings -> Actions -> Runners”) sollte der Status auf “grün” und “Idle” stehen.

Fazit

Das wars es nun an manuellen Systemkonfigurationsschritte. Ich habe es mal gemessen, wenn man sich konzentriert, ist die Installation des RaspberryPI und des GitHub Runners in gut 30 Minuten abgeschlossen. Danach sollten keine manuellen Schritte mehr an den Systemen im Haus erfolgen, alles weitere erledigen wir nun über den GitHub Runner, worum es im nächsten Artikel der Reihe geht.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert