====== 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:// * [[it:linux:nixos_intro|Úvod do operačního systému NixOS]] * [[it:devops:infrastructure_as_code|Infrastruktura jako kód (IaC)]] * [[it:linux:file_systems|Srovnání souborových systémů: Btrfs, ZFS a role v imutabilitě]] //Tagy: {{tag>linux nixos immutability devops architecture systems_administration}}//