Obsah
NixOS jako imutabilní systém
V tradičních Linuxových distribucích (Debian, Ubuntu, Arch Linux) je souborový systém vysoce dynamický a mutabilní (měnný). Správce balíčků nebo uživatel s právy root může kdykoliv přepsat soubory v `/usr/bin`, změnit konfiguraci v `/etc` nebo aktualizovat sdílenou knihovnu v `/lib`. Tento přístup s sebou ale nese rizika v podobě nekonzistence, závislostního pekla (Dependency Hell) a nestability po aktualizacích.
NixOS k tomuto problému přistupuje zcela revolučně a implementuje koncept imutabilní (neměnné) infrastruktury přímo na úrovni běžícího operačního systému.
Princip imutability v NixOS
Neměnnost v NixOS neznamená, že na disk nelze zapisovat. Znamená to, že jednou zapsané systémové komponenty a aplikace již nelze modifikovat. Pokud je vyžadována změna, nevzniká úprava stávajícího souboru, ale vytváří se soubor úplně nový.
Tento koncept stojí na dvou klíčových mechanismech:
1. Neměnné úložiště /nix/store
Všechny systémové balíčky, knihovny, ovladače i konfigurační skripty jsou uloženy v adresáři `/nix/store`. Tento adresář je operačním systémem namontován striktně v režimu pouze pro čtení (read-only).
Každý balíček má svůj vlastní izolovaný podadresář, jehož název obsahuje kryptografický hash:
/nix/store/5h8m3n8z...-nginx-1.24.0/ /nix/store/xd7j9q4p...-openssl-3.0.8/
Hash se počítá ze všech vstupů balíčku (zdrojový kód, závislosti, flagy překladače). Pokud by se změnila byť jen jediná řádka v konfiguraci při kompilaci Nginxu, výsledkem bude jiný hash a balíček se zapíše do úplně jiného adresáře. Stávající funkční Nginx zůstane nedotčen.
2. Symbolické odkazy (Symlinks) jako architektura systému
Protože adresář `/nix/store` obsahuje stovky izolovaných verzí programů, systém je skládá dohromady pomocí stromu symbolických odkazů.
Standardní adresáře jako `/bin` nebo `/usr/bin` v NixOS vůbec neexistují (s výjimkou `/bin/sh`, který je zachován kvůli kompatibilitě skriptů). Místo toho má systém aktuální stav (tzv. generaci) nasměrovaný pomocí symlinků přímo do konkrétních složek v `/nix/store`.
Při změně konfigurace nebo aktualizaci se v `/nix/store` sestaví nové komponenty a systém pouze „přepne“ hlavní symbolický odkaz na novou generaci. Tento proces je atomický – buď proběhne celý úspěšně, nebo se nestane nic.
Adresář /etc a správa konfigurace
V běžném Linuxu je `/etc` centrem mutability, kde se soubory neustále přepisují. V NixOS je většina souborů v `/etc` (např. `/etc/ssh/sshd_config`) pouhým symbolickým odkazem vedoucím do read-only úložiště `/nix/store`.
Pokud se pokusíte upravit soubor v `/etc` ručně, editor vám nahlásí, že soubor je určen pouze pro čtení. Jediným legálním způsobem, jak změnit konfiguraci, je upravit deklarativní soubor `/etc/nixos/configuration.nix` a nechat systém přegenerovat novou sadu symlinků.
Výhody imutabilního přístupu
| Výhoda | Popis |
|---|---|
| Eliminace závislostního pekla | Dvě různé aplikace mohou běžet současně, i když vyžadují odlišné (a vzájemně nekompatibilní) verze stejné systémové knihovny. Každá si sahá do svého adresáře v `/nix/store`. |
| Instantní Rollback (Návrat zpět) | Pokud nová generace systému selže, v bootloaderu při startu jednoduše šipkou zvolíte předchozí generaci. Systém nastartuje do stavu před aktualizací, protože staré soubory v `/nix/store` stále fyzicky existují. |
| Samočisticí systém (Garbage Collection) | Smazáním aplikace z konfigurace se neodinstalují soubory okamžitě. Jakmile ale spustíte příkaz `nix-collect-garbage`, systém projde symlinky, zjistí, které balíčky v `/nix/store` už žádná generace nepoužívá, a bezpečně je smaže. |
Kam se ukládají uživatelská data?
Imutabilita se týká jádra, systému a aplikací. Uživatelská data v `/home`, proměnná data v `/var` (např. databáze, logy) a runtime soubory v `/run` samozřejmě zapisovatelné jsou.
Pro pokročilé vyznavače čisté imutability nabízí NixOS komunitní koncepty jako Erase Your Darlings (Vymaž své miláčky). Při tomto nastavení se celý kořenový souborový systém (`/`) při každém restartu kompletně smaže (běží např. v paměti RAM nebo se obnovuje z prázdného snapshotu souborového systému Btrfs/ZFS). Trvale se ukládají (perzistují) pouze vybrané explicitně definované složky jako `/home` nebo `/var/lib/postgresql` pomocí technologie zvané Impermanence.
Související články:
Tagy: linux nixos immutability devops architecture systems_administration
