Einleitung
DNS und Terraform kennst du aus früheren Lessons; NixOS-Modell und
Nix-Syntax aus
Lesson 0005.
Der Großteil von groupdir-infra steckt in
NixOS-Modulen: wiederverwendbare Bausteine unter
nixos/modules/, die Hosts unter
nixos/hosts/ einschalten und konfigurieren.
Heute: Was ist eine Modul-Option, wo setzt du den Wert, und wie
testest du lokal ohne Deploy. Voraussetzung:
Lesson 0000
(nix develop / nix build).
Modul = options + config
Ein NixOS-Modul hat typischerweise zwei Teile (siehe NixOS Manual: Option declarations):
-
options: deklariert die Optionen (die konfigurierbare Schnittstelle) mit mkOption (Typ, Default, Beschreibung) -
config: setzt daraus echte Systemeinstellungen (Dienste, Firewall, User, …)
In diesem Repo liegen die Optionen unter dem Namensraum
labEdge.* (z. B. labEdge.ssh,
labEdge.accessUsers, labEdge.vpnClient).
Wo was hingehört
Merksatz: Neue Optionen im Modul deklarieren und verdrahten; konkrete Werte pro Host in der Host-Config setzen. Die Host-Datei importiert die Module und steckt sie zusammen.
Beispiel aus dem Repo
nixos/modules/base.nix definiert u. a.
labEdge.ssh.permitRootLogin als
mkOption mit Typ und Default. Die Host-Config kann den
Wert überschreiben.
labEdge.accessUsers (siehe
operations.md)
zeigt das Muster „enable + strukturierte Werte“: User und SSH-Keys
setzt du in der Host-Config, die Logik steckt im Modul.
labEdge.accessUsers = {
enable = true;
users.admin = {
fullName = "Groupdir Admin";
isAdmin = true;
sshAuthorizedKeys = [ "ssh-ed25519 AAAA…" ];
};
};
Option anpassen oder hinzufügen
-
Bestehende Option ändern: Wert in
nixos/hosts/…/configuration.nixsetzen oder anpassen. -
Neue Option: in
nixos/modules/….nixunteroptions.labEdge.…mitmkOptiondeklarieren, imconfig-Block verwenden, dann in der Host-Config einen Wert setzen.
Leseübung: Öffne base.nix (Optionen) und die
labEdge.*-Blöcke in
nixos/hosts/lab-gateway/configuration.nix. Ordne
Deklaration und Wert zu.
Lokal testen (ohne Deploy)
In der Dev-Shell aus dem Repo-Root:
nix build .#nixosConfigurations.lab-gateway.config.system.build.toplevel
# oder z. B. .#nixosConfigurations.vps.config.system.build.toplevel
Wenn der Build durchläuft, ist die Auswertung der Module und Host-Config in Ordnung. Es wird nichts auf einen Server geschrieben.
Alternative im Repo:
colmena build (baut die Hive-Hosts). Deploy ist
colmena apply und kommt in der nächsten Lesson; hier
reicht Build.
Üben
Retrieval
Wo wird eine neue labEdge-Option deklariert?
Wo setzt du den konkreten Wert für einen Host?
Wie prüfst du die Änderung lokal ohne Deploy?
Primärquelle
NixOS Manual: Option declarations und Configuration syntax.
Repo:
nixos/modules/,
nixos/hosts/*/configuration.nix,
operations.md.
Kompakt: Referenz: NixOS-Module.