Obsah
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:
Tagy: linux distribuce nixos nix devops configuration_management immutability
