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 installoderuseraddeinzutippen (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 |