linux-arch-alpine-minimal nixos automation declarative iac minimalism

NixOS: Declarative Infrastructure (Artikel 201)

Analyse von NixOS als führende deklarative Linux-Distribution. Erfahren Sie alles über die Nix-Sprache, atomare Rollbacks und das Management der gesamten Infrastruktur über eine einzige Konfigurationsdatei.

# NixOS Deep Dive: Das Ende des Configuration Drift

TL;DR / Management Summary NixOS ist der radikalste Ansatz im modernen Linux-Management. Anstatt Befehle wie apt install oder useradd einzutippen (imperativ), beschreiben wir das gesamte System in einer einzigen Datei (configuration.nix). Der Paketmanager Nix baut daraus ein unveränderliches (immutable) Abbild. Das Highlight: Jede Änderung erzeugt eine neue System-Generation. Wenn etwas schiefgeht, booten wir einfach in die vorherige Generation zurück.


# 1. Einführung & Architektur

Alles ist eine Funktion.

NixOS basiert auf dem Nix-Paketmanager. Jedes Paket wird in einem eindeutigen Pfad unter /nix/store/ gespeichert, der den Hash aller Abhängigkeiten enthält (z.B. /nix/store/abc123...-nginx-1.24).

# Der Deklarative Workflow (Mermaid)

graph TD
    A[Admin: /etc/nixos/configuration.nix] --> B[Command: nixos-rebuild switch]
    B --> C[Nix Expression Evaluator]
    C --> D[Fetch & Build Packages in /nix/store]
    D --> E[Create Symbolic Links to /etc, /bin, /lib]
    E --> F[New System Generation]
    F --> G[Atomic Switch: System active]
    G -.->|Failure?| H[Reboot into previous Generation]

# 2. Die Konfiguration: configuration.nix

Der Masterplan.

Anstatt Dateien in /etc manuell zu editieren, definieren wir sie hier:

{ config, pkgs, ... }:

{
  # 1. Bootloader
  boot.loader.systemd-boot.enable = true;

  # 2. Pakete
  environment.systemPackages = with pkgs; [
    vim htop git
  ];

  # 3. Services (Nginx Beispiel)
  services.nginx = {
    enable = true;
    virtualHosts."myapp.intern" = {
      root = "/var/www/myapp";
    };
  };

  # 4. Users
  users.users.admin = {
    isNormalUser = true;
    extraGroups = [ "wheel" ];
    openssh.authorizedKeys.keys = [ "ssh-ed25519 AAA..." ];
  };
}

# 3. Atomic Rollbacks: Die Rettung

Keine Angst vor Fehlern.

Jedes Mal, wenn Sie nixos-rebuild switch ausführen, bleibt der alte Zustand erhalten.

  • Im laufenden Betrieb: nixos-rebuild switch --rollback
  • Beim Booten: Im GRUB/Systemd-Boot Menü einfach eine ältere Generation wählen.

# 4. Day-2 Operations: Garbage Collection

Den Nix-Store bändigen.

Da jede Änderung neue Dateien im /nix/store erzeugt, wächst der Platzbedarf stetig.

# Aufräumen

# Löscht alle Generationen, die älter als 30 Tage sind
sudo nix-collect-garbage --delete-older-than 30d

# 5. Troubleshooting & “War Stories”

Wenn die Reinheit Probleme macht.

# Story 1: “Das fehlende /usr/bin/bash”

Symptom: Ein Skript mit dem Shebang #!/bin/bash schlägt auf NixOS fehl, obwohl Bash installiert ist. Ursache: NixOS folgt nicht der FHS (Filesystem Hierarchy Standard). Bash liegt tief im Nix-Store. Nur /bin/sh und /usr/bin/env existieren standardmäßig. Lösung: Nutzen Sie #!/usr/bin/env bash in Ihren Skripten oder nutzen Sie Tools wie steam-run oder nix-shell, um eine Standard-Umgebung zu simulieren.

# Story 2: “Die schreibgeschützte /etc”

Symptom: Ein Admin versucht manuell eine Config unter /etc/nginx/nginx.conf zu ändern, aber die Datei ist Read-Only. Ursache: NixOS verwaltet /etc via Symlinks in den Nix-Store. Manuelle Änderungen sind zwecklos. Lösung: Ändern Sie die Einstellung in der configuration.nix und führen Sie nixos-rebuild switch aus. Dies ist kein Bug, sondern das zentrale Sicherheits-Feature gegen Configuration-Drift.


# 6. Fazit & Empfehlung

  • Automation: NixOS ist der Traum jedes DevOps-Admins. Ein Git-Commit rollt das gesamte OS-Setup aus.
  • Wahl: Nutzen Sie NixOS für Server-Flotten, die absolut identisch sein müssen (Cluster, Web-Farms).
  • Lernkurve: Die Sprache “Nix” ist gewöhnungsbedürftig. Planen Sie Zeit für die Einarbeitung ein.

# Anhang: Cheatsheet

Aufgabe NixOS / CLI Befehl
Änderungen anwenden nixos-rebuild switch
Letzte Aktion Rollback nixos-rebuild switch --rollback
Paket temporär nutzen nix-shell -p <name>
System Generationen nix-env --list-generations --profile /nix/var/nix/profiles/system
Paket suchen nix-env -qaP <begriff> oder search.nixos.org
Hardware Config /etc/nixos/hardware-configuration.nix
Garbage Collection nix-collect-garbage -d