Lesson 0006 · groupdir-infra

Modul-Optionen

labEdge.* deklarieren, in der Host-Config setzen, mit nix build lokal prüfen.

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

  1. Bestehende Option ändern: Wert in nixos/hosts/…/configuration.nix setzen oder anpassen.
  2. Neue Option: in nixos/modules/….nix unter options.labEdge.… mit mkOption deklarieren, im config-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.

Tipp: Nach einer Modul-Änderung denselben Host bauen, den du geändert hast. Ein Eval-/Typfehler erscheint sofort im Build, nicht erst auf dem Server.

Ü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.