Arbeitsrechner einrichten¶
Ziel¶
Danach kannst du auf deinem Rechner cue cmd plan für beide Hosts und für DNS fehlerfrei ausführen.
Voraussetzungen¶
- ein Konto auf Codeberg mit Schreibzugriff auf das Repo
garagelab/infra - Zugriff auf das Vaultwarden des Vereins
- jemand, der schon Zugang zu den Hosts hat und dich in Schritt 7 freischaltet
- für containerhost: ein Zugang zum Admin-VPN (WireGuard) oder zum Zauberer-WLAN des Maschinendorfs; beides bekommst du von den Admins des Maschinendorfs
- gelesen: Lokales Tooling, Git-Workflow und Secrets im Repo
Schritte¶
1. Werkzeuge installieren¶
Installiere jeweils nach der Anleitung des Herstellers:
- git
- CUE, mindestens in der Version, die unter
language: version:incue.mod/module.cuesteht - Go, nur um desync zu installieren
- desync:
go install codeberg.org/xchangeee/desync/cmd/desync@latest - SOPS und age
- Terraform, nur für Authentik
- direnv, mit dem Hook für deine Shell (Setup in der direnv-Doku)
syslet selbst brauchst du nicht auf deinem Rechner, es läuft nur auf den Hosts.
Prüfen:
| Bash | |
|---|---|
Jeder Befehl gibt eine Version bzw. bei desync -h die Hilfe aus.
Meldet die Shell command not found, liegt das Programm nicht im PATH; bei desync fehlt meist der Ordner, in den go install installiert (go env GOPATH, darin bin).
2. SSH-Schlüssel bei Codeberg hinterlegen¶
Damit kommst du per SSH an das Repo; folge Adding an SSH key to your account in der Codeberg-Doku.
| Bash | |
|---|---|
Erwartet: eine Begrüßung mit deinem Codeberg-Namen, etwa Hi there, <name>! You've successfully authenticated with the key named ….
3. Git einrichten¶
Name und E-Mail sind die deiner Codeberg-Identität:
| Bash | |
|---|---|
Die Einstellungen stammen aus Git configurations to set by default; warum wir pull.rebase setzen, steht in Git-Workflow.
| Bash | |
|---|---|
Erwartet: unter anderem pull.rebase=true, fetch.prune=true, diff.colormoved=zebra und dein Name und deine E-Mail.
4. Repo klonen¶
Wechsle in den Ordner, in dem das Repo liegen soll:
Erwartet: ein neuer Ordner infra mit den Ordnern syslet, desec, apps und weiteren.
5. age-Schlüssel für die Secrets erzeugen¶
SOPS sucht den age-Schlüssel unter Linux in ~/.config/sops/age/keys.txt, unter macOS in ~/Library/Application Support/sops/age/keys.txt (siehe Encrypting using age in der SOPS-Doku).
Lege die Datei am passenden Ort an, zum Beispiel unter Linux:
Erwartet: Public key: age1….
Das ist der öffentliche Teil, den du in Schritt 7 weitergibst.
Die Datei keys.txt enthält den privaten Teil: Sie gehört nicht ins Repo und wird mit niemandem geteilt.
Sichere sie in deinem persönlichen Passwortmanager; ohne sie kannst du die Secrets nicht mehr bearbeiten.
6. SSH-Schlüssel für die Hosts erzeugen¶
| Bash | |
|---|---|
Erwartet: zwei neue Dateien, ~/.ssh/garagelab (privat) und ~/.ssh/garagelab.pub (öffentlich).
7. Freischalten lassen¶
Schick der Person, die dich freischaltet, die beiden öffentlichen Teile:
- die Zeile
age1…aus Schritt 5 (noch einmal anzeigen:age-keygen -y <pfad-zu>/keys.txt) - den Inhalt von
~/.ssh/garagelab.pub
Sie geht nach Neue Person freischalten vor und sagt dir Bescheid, wenn sie fertig ist. Erst danach funktionieren die Schritte ab 8.
8. SSH für die Hosts einrichten¶
Ergänze deine ~/.ssh/config:
| Text Only | |
|---|---|
Beim ersten Verbinden fragt SSH, ob du dem Host vertraust; bestätige mit yes.
Erwartet: der Name des Hosts, ohne Passwortabfrage.
containerhost hat nur eine interne Adresse. Du erreichst ihn nur über das Admin-VPN oder vor Ort aus dem Zauberer-WLAN (siehe Voraussetzungen).
9. API-Tokens ablegen¶
Die Tokens für deSEC und Authentik stehen im Vaultwarden.
Leg im Repo-Ordner eine Datei .envrc an, die sie als Umgebungsvariablen setzt:
| Bash | |
|---|---|
Erlaube direnv, die Datei zu laden:
Erwartet: direnv: export +DESEC_TOKEN +TF_VAR_authentik_token; danach setzt direnv die Variablen jedes Mal, wenn du in den Repo-Ordner oder einen Ordner darunter wechselst.
git status zeigt nothing to commit, working tree clean; die Datei taucht nicht auf, weil .gitignore sie ausschließt.
Änderst du .envrc später, musst du direnv allow noch einmal ausführen.
Prüfen¶
Führe plan einmal für jeden Host und für DNS aus. plan ändert nichts.
Erwartet für jeden Host:
| Text Only | |
|---|---|
Erwartet:
| Text Only | |
|---|---|
Zeigt plan Änderungen statt „No changes“, ist dein Rechner trotzdem richtig eingerichtet; dann gilt plan zeigt unerwartete Änderungen.
Wenn du willst, prüfe auch SOPS: sops -d syslet/werner/creds-mailjet.enc.yaml zeigt die Secrets im Klartext an, ohne die Datei zu ändern.
Wenn etwas schiefgeht¶
Permission denied (publickey)beim Verbinden mit einem Host: Die Freischaltung aus Schritt 7 fehlt noch, oderIdentityFilein Schritt 8 zeigt auf die falsche Datei.Could not resolve hostnameoder Zeitüberschreitung bei containerhost: Dein Rechner ist weder mit dem Admin-VPN noch mit dem Zauberer-WLAN verbunden (Schritt 8).reference "fqdn" not found: Du hast plan im falschen Ordner ausgeführt, etwa direkt insyslet/; siehe syslet in diesem Repo.API token required: use -token or set DESEC_TOKEN: direnv hat.envrcnicht geladen. Meldet direnv.envrc is blocked, fehltdirenv allow(Schritt 9); kommt gar keine Meldung von direnv, ist der Hook für deine Shell nicht eingerichtet (Schritt 1).Failed to get the data keybeisops -d: Dein age-Schlüssel liegt nicht dort, wo SOPS sucht (Schritt 5), oder die Freischaltung aus Schritt 7 fehlt noch.