====== Operační systém NixOS ====== **NixOS** je nezávislá Linuxová distribuce, která zásadně mění způsob, jakým je operační systém spravován, konfigurován a aktualizován. Na rozdíl od tradičních distribucí (jako je Ubuntu, Debian nebo Arch Linux) je NixOS postaven na **deklarativním** a **funkcionálním** modelu správy systému. Celý operační systém – včetně jádra, ovladačů, systémových služeb, uživatelských účtů a nainstalovaných aplikací – je definován v jediném konfiguračním souboru. Srdcem celého systému je balíčkovací manažer **Nix**. ===== Hlavní pilíře NixOS ===== NixOS stojí na třech základních principech, které z něj dělají unikátní nástroj pro vývojáře, systémové administrátory a nadšence do DevOps: ==== 1. Deklarativní konfigurace ==== V běžném Linuxu konfigurujete systém imperativně: zadáváte příkazy jako `apt install nginx`, ručně upravujete soubory v `/etc` a spouštíte služby přes `systemctl`. V NixOS napíšete požadovaný stav systému do souboru `/etc/nixos/configuration.nix` (pomocí programovacího jazyka Nix) a systém se podle toho sám sestaví. Příklad konfigurace (zapnutí SSH a instalace balíčků): { config, pkgs, ... }: { boot.loader.systemd-boot.enable = true; networking.hostName = "nix-server"; services.openssh.enable = true; environment.systemPackages = with pkgs; [ vim git htop ]; users.users.anna = { isNormalUser = true; extraGroups = [ "wheel" ]; # Povolení sudo }; } ==== 2. Izolace a neměnnost (Immutability) ==== V NixOS neexistují standardní adresáře jako `/bin`, `/sbin`, `/lib` nebo `/usr/bin` plné sdílených knihoven. Všechny balíčky jsou uloženy v izolovaných adresářích uvnitř **Nix store** (adresář `/nix/store`). Každá položka v Nix store má unikátní název začínající kryptografickým hashem (např. `/nix/store/h323ms...-git-2.40.0/`). Tento hash se počítá ze všech vstupů, které byly použity k sestavení balíčku (zdrojový kód, verze překladače, závislosti). Díky tomu je vyloučeno tzv. "závislostní peklo" (Dependency Hell) – různé aplikace mohou bezproblémově používat různé verze stejné knihovny. ==== 3. Atomické aktualizace a rollbacky ==== Když změníte konfiguraci a aplikujete ji příkazem `nixos-rebuild switch`, NixOS vytvoří novou **generaci** systému. Původní generace ale zůstává nedotčená. * Pokud se po aktualizaci cokoli pokazí (systém nenaběhne, nová verze ovladače způsobí pád), můžete se okamžitě vrátit zpět (**rollback**) k předchozímu funkčnímu stavu. * Seznam předchozích generací se zobrazuje přímo v bootloaderu (GRUB/systemd-boot) při startu počítače. Pokažená aktualizace tak nikdy systém definitivně "nerozbije". ===== Výhody a nevýhody ===== ==== Výhody: ==== * **Stoprocentní replikovatelnost:** Váš konfigurační soubor můžete vzít, nahrát ho na úplně jiný počítač (nebo virtuální server) a po spuštění získáte na bit přesně stejné prostředí. * **Testování bez rizika:** Můžete experimentovat s unstable balíčky a systémovými službami. V případě problému stačí jeden příkaz a jste zpět v bezpečí. * **Čistý systém:** Pokud balíček odeberete z konfigurace a spustíte `nix-collect-garbage`, z adresáře `/nix/store` se vymažou veškeré stopy po dané aplikaci včetně všech jejích specifických závislostí. ==== Nevýhody: ==== * **Strmá křivka učení:** Jazyk Nix a funkcionální pojetí systému vyžadují úplnou změnu myšlení oproti běžným distribucím. * **Nekompatibilita s běžnými binárkami:** Stažené předkompilované binární soubory z internetu (které natvrdo hledají knihovny v `/lib` nebo `/usr/lib`) na NixOS bez dodatečné úpravy (např. pomocí nástrojů `patchelf` nebo `steam-run`) nespustíte. * **Menší komunita:** Ačkoliv repozitář *nixpkgs* patří k největším a nejaktivnějším na GitHubu, hledání řešení specifických problémů může být těžší než u Ubuntu nebo Arch Linuxu. ===== Pokročilé koncepty: Flakes a Home Manager ===== Moderní ekosystém NixOS se opírá o dva populární komunitní nástroje: * **Nix Flakes:** Funkce (aktuálně stále v experimentálním režimu, ale masivně využívaná), která zajišťuje absolutní hermetičnost konfigurace. Pomocí souboru `flake.lock` uzamkne přesné verze všech zdrojů (včetně celého repozitáře balíčků), takže konfigurace se sestaví identicky dnes, i za pět let. * **Home Manager:** Nástroj, který rozšiřuje deklarativní přístup z celého systému i na uživatelský domovský adresář (`$HOME`). Umožňuje deklarativně spravovat konfigurace aplikací (tzv. dotfiles), jako jsou nastavení pro `.bashrc`, `zsh`, konfigurace pro Neovim, git nebo okenní manažery. ---- //Související články:// * [[it:linux:distributions|Přehled Linuxových distribucí]] * [[it:devops:infrastructure_as_code|Infrastruktura jako kód (IaC)]] * [[it:linux:package_managers|Srovnání balíčkovacích manažerů: Nix vs. Apt vs. Pacman]] //Tagy: {{tag>linux distribuce nixos nix devops configuration_management immutability}}//