Neuen Host aufsetzen¶
Ungeprüft
Diese Anleitung ist noch nicht durchgespielt worden; Befehle, Bezeichnungen und erwartete Ausgaben können abweichen.
Was noch zu prüfen ist, steht in todo/doku.md.
Ziel¶
Eine neue VM ist so eingerichtet, dass du darauf mit cue cmd apply Container ausrollen kannst, wie auf werner und containerhost.
Voraussetzungen¶
- Arbeitsrechner eingerichtet, mit SSH-Zugang zu werner (Arbeitsrechner einrichten)
- Zugang zur Web-Oberfläche der Plattform, auf der die VM laufen soll: Netcup oder Proxmox
- ssh-to-age auf deinem Rechner
- gelesen: Statische Konfiguration, Netzwerk, Secrets im Repo und syslet in diesem Repo
In den Befehlen steht <host> für den kurzen Namen des neuen Hosts, etwa werner, und <fqdn> für seinen vollen Namen, etwa werner.garage-lab.de.
Ein Host im Rechenzentrum bekommt einen Namen unter garage-lab.de, ein Host im Maschinendorf einen unter garage-lab.net.
Schritte¶
1. VM anlegen¶
Leg die VM in der Web-Oberfläche der Plattform an:
- Betriebssystem: Rocky Linux in der Version, die auf werner läuft
- Anmeldung als
rootmit deinem öffentlichen SSH-Schlüssel (~/.ssh/garagelab.pub), nicht mit Passwort
Bei Netcup stellst du zusätzlich die Firewall vor der VM so ein, dass sie nur die Ports 80 und 443 und den Port für WireGuard durchlässt, wie bei werner.
Notiere die IP-Adressen der VM.
Erwartet: ssh root@<ip-adresse> hostname meldet sich ohne Passwort an und gibt einen Namen aus.
2. Namen im DNS eintragen¶
Für einen Host unter garage-lab.de: Trag in desec/desec_garage_lab_de.cue die Adressen unter ipam: ein und dazu einen A- und einen AAAA-Eintrag mit subname: "<host>", wie bei werner.
Roll die Zone im Ordner desec/ aus wie in Änderung ausrollen, mit cue cmd plan und cue cmd apply.
Für einen Host unter garage-lab.net kommt kein Eintrag nach deSEC; den Namen löst der DNS-Server auf dem Gateway auf, der nicht im Repo steht.
Bitte in Signal jemanden mit Zugang zum Gateway, den Namen dort einzutragen.
| Bash | |
|---|---|
Erwartet: die IPv4-Adresse der VM.
Für Namen unter garage-lab.net geht das nur aus dem Netz vor Ort.
3. SSH-Zugang für alle Admins einrichten¶
Ergänze in deiner ~/.ssh/config den neuen Namen in der Zeile Host, die du in Arbeitsrechner einrichten, Schritt 8 angelegt hast, etwa Host werner.garage-lab.de vm-containerhost.garage-lab.net <fqdn>.
Übernimm dann die Schlüssel aller Admins von werner:
| Bash | |
|---|---|
Achte auf die zwei >>, damit dein Schlüssel aus Schritt 1 erhalten bleibt.
Erwartet: alle Schlüssel von werner, dazu deiner; doppelt stehende Zeilen schaden nicht.
4. Zeitzone und Pakete einrichten¶
| Bash | |
|---|---|
Erwartet: jeder dnf-Befehl endet mit Complete!, und podman --version zeigt mindestens Version 6, die syslet voraussetzt.
Die übrigen Befehle in diesem Schritt und in Schritt 5 bis 7 laufen auf dem neuen Host; mit exit kommst du zurück auf deinen Rechner.
5. syslet installieren¶
Installiere syslet nach Installation in der syslet-Doku, für x86_64.
| Bash | |
|---|---|
Erwartet: syslet mit Versionsnummer.
6. Dateien aus rootfs/ kopieren¶
Nur, wenn es für den Host einen Ordner rootfs/<host>/ gibt.
Auf deinem Rechner, im Repo-Ordner:
| Bash | |
|---|---|
Das Kopieren legt jede Datei unter demselben Pfad auf dem Host ab, wie sie unter rootfs/<host>/ liegt; der zweite Befehl gibt ihnen das passende SELinux-Label.
Erwartet: keine Ausgabe vom Kopieren; restorecon nennt die Dateien, deren Label es korrigiert hat, oder gibt nichts aus.
| Bash | |
|---|---|
Erwartet: sysctl listet unter anderem die Dateien aus etc/sysctl.d/.
Schalte dann die Timer und Mounts aus rootfs/<host>/etc/systemd/system/ ein: auf werner system-backup.timer, auf containerhost mnt-backup.mount.
Für mnt-backup.mount muss das NAS die Freigabe für die Adresse des Hosts erlauben; frag in Signal nach, falls das noch nicht so ist.
| Bash | |
|---|---|
Erwartet: Created symlink … je Unit; ls zeigt die Ordner auf dem NAS, darunter werner-garage-lab-de.
7. Automatische Updates einschalten¶
Die Einstellungen kommen mit etc/dnf/automatic.conf aus Schritt 6, der Zeitpunkt mit etc/systemd/system/dnf-automatic-install.timer.d/override.conf.
Gibt es diese Dateien für den neuen Host noch nicht, leg sie vorher in rootfs/<host>/ an, nach dem Vorbild von werner, und wiederhol Schritt 6.
| Bash | |
|---|---|
Erwartet: In der Spalte NEXT steht der nächste Morgen zu der Uhrzeit (UTC) aus override.conf.
8. WireGuard-Tunnel einrichten¶
Nur für einen Host außerhalb des Maschinendorfs, der wie werner über einen WireGuard-Tunnel mit dem Server-VLAN verbunden wird.
Führe WireGuard-Tunnel einrichten aus; die Subnetze des Netzwerks caddy aus Schritt 4 dort trägst du erst nach dem ersten apply ein.
Erwartet: wg show zeigt den Peer mit einem latest handshake vor wenigen Sekunden.
9. Schlüssel des Hosts für SOPS eintragen¶
Auf deinem Rechner:
| Bash | |
|---|---|
Erwartet: eine Zeile, die mit age1 beginnt.
Ergänze in syslet/.sops.yaml unter keys: eine Zeile - &server_<host> age1… und unter creation_rules: eine neue Regel nach dem Muster der vorhandenen:
| YAML | |
|---|---|
Unter age: stehen alle Admins, die auch in den anderen Regeln stehen, und der neue Host.
Erwartet: git diff syslet/.sops.yaml zeigt die neue Zeile unter keys: und die neue Regel.
10. Ordner für den Host anlegen¶
Leg syslet/<host>/host.cue an:
| Text Only | |
|---|---|
Ohne die Zeile secretFiles bekommt der Host keine Secrets.
Container kommen später in eigenen Dateien dazu, wie in App hinzufügen.
Erwartet: No changes detected. All units are up to date.
11. Committen und pushen¶
| Bash | |
|---|---|
Erwartet: am Ende von git push eine Zeile main -> main.
Prüfen¶
cue cmd planinsyslet/<host>zeigtNo changes detected. All units are up to date.ssh <fqdn> systemctl --failedzeigt0 loaded units listed.- Bei einem Host mit Tunnel:
ssh <fqdn> ping -c 3 vm-containerhost.garage-lab.netbekommt Antworten.
Wenn etwas schiefgeht¶
cue cmd planmeldetreference "fqdn" not found: Du bist nicht im Ordnersyslet/<host>.cue cmd planmeldetsyslet: command not found: syslet liegt auf dem Host nicht imPATHvonroot; prüf Schritt 5.cue cmd planmeldetdecryption failedfür ein Secret: Die Datei ist nicht für den Host verschlüsselt; prüf die Regel aus Schritt 9 und verschlüssele die Datei mitsops updatekeysneu, wie in Neue Person freischalten, Schritt 4.dnf copr enablemeldet einen Fehler: Prüf, ob Schritt 4 mitcrb enableundepel-releasedurchgelaufen ist.- Kein Handshake im Tunnel: WireGuard-Tunnel prüfen
- Allgemeines: Set up SOPS in a CUE repository in der syslet-Doku und Manage several hosts