to se pleteš, tady nejde jen o konfiguraci služeb a systému v /etc, ale vlastně i celý samotný systém, nainstalované balíčky, použitý kernel, spouštěné služby, externí integrace a vlastně celý provisioning.
NixOS má schopnost při změně nastavení i celkově změnit FS a definované službu podle nového nastavení, už žádné takové ty staré artefakty a neudržované služby, když v ansiblu prostě něco smažu nebo přestanu nějaký playbook spouštět. NixOS řeší vždy systém jako celek.
Z /etc třeba nejsi schopný nainstalovat potřebné balíčky a odinstalovat nepotřebné, k tomu ti verzování /etc nepomůže. NixOS jde ještě dál, v rámci definice systému může být i komplexní sestavení skoro jakéhokoliv SW, který se rovnou při deploymentu připraví, nemusí být balíček připravený v distribuci dopředu.
Tím to nekončí, celé nastavení a sestavení nového OS mohu dopředu vyzkoušet ve virtuálu a NixOS poskytuje robustní framework na testování systému uvnitř tohoto virtuálu.
Nixos je opravdu mnohem robustnější a řeší spoustu věcí, při kterých si člověk jinak docela dost zanadává.
Celou tu konfiguraci mám sice v gitu, ale o tom to vůbec není. Používám git skoro na vše, třeba i na smlouvy a dopisy úřadům. Beru git jako samozřejmost a ano, dávám do gitu i /etc/*.
Nixos je takový zázrak, spustíš a máš server a nebo aspoň víš, kde máš chybu. Je to příjemné jako když máš dobrý vývojový devstack.
Vadí mi v zásadě dvě věci, které postupně překonávám.
- ten jazyk nix je dost neobvyklý, je to pro mě pořád cizí území, kde našlapuju opatrně
- a celé je to takový zázrak, že se sice raduju jak to skvěle jde, ale s troškou nedůvěry si říkám, co se tam na pozadí vlastně děje. A tam se děje spousta věcí a děje se to úplně jinak, než v každým jiným normálním linuxu. V tom článku jsem dal odkaz na nix pills https://nixos.org/guides/nix-pills/ kde se jde do hloubky. Nakonec jsem to nestudoval až do posledního detailu, ale v zásadě jsem pochopil, jak třeba z helloworld v céčku uděláš nix balíček. Zabalit něco pro aur, nebo i pro debian je pro mě pořád snažší, ale ty balíčky v nixu dělají mnohem víc.
s nixem pracuji 4 roky a jsem v něm dnes schopný psát skoro normální programy. Je to ale neobvyklý jazyk, postupně jsem si ho ale docela oblíbil a přepsal různé bashové scripty přímo do nixu. Integrace se systemd je skvělá, rád třeba využívám sidecar servicy, kde mi teraform připraví celou službu před/při startu. Mohu snadno pro každou službu mít integrovaný bootstrap se získáváním tajemství z vaultu aniž bych musel každou službu upravovat, prostě to v přes nix injectují do těch servicech. Skvělé.
To balíčkování a způsob práce třeba s flake dává obrovské možnosti. Mohu třeba velice snadno a iterativně zkoušet různé verze závislostí, generovat různé varianty sestaveního toho stejné. To celé mohu udělat ve virtuálním klonu produkce dopředu a hledat regrese.
Výsledek mohu uložit do sdílené cache a jednotlivé stanice už si nemusí nic kompilovat, dostanou sestavení jaké potřebují. Mohu takhle kombinovat na jedné platformě několik různých verzí nástrojů, nepotřebuji pro každý jazyk používat speciální vyhýbku, abych mohl mít více jav, pythonů, nodů. Vždy byl porod do nějakého projektu aplikovat patche, s nix s jeho buildtooly to jde naprosto snadno.
Vlastně díky nixu (dnes už mám asi 90 % osobní infrastruktury na nixu, stejně tak desítky malých společností jsem postupně zmigroval na nix), mám virtualizovaný celý produkční stack a jakékoliv zásahy mohu dopředu vyzkoušet, což s běžnou distribucí je občas peklo. Výrazně se mi snížily nároky na údržbu, dříve jsem na to potřeboval několik lidí, dnesk to zvládnou dva lidi.
dík. Já tam ten potenciál zatím jen tuším, a taky jsem to s nixem zkoušel už dřív a vzdal to.
Kdybych to nevzdal, taky bych měl 4 roky praxe jako ty. Možná i 6 let. Ale vše má svůj čas.
Proto jsem začal psát i tenhle blog, abych i při tom psaní nad tím ještě víc přemýšlel a už před tím neutíkal.
Nečekal jsem teda, že to někdo bude i číst :-)
S těmi flakes, zkoušel jsem to a úplně jsem zatím nepochopil k čemu je to dobré. Tak zatím zkouším jen základní konfiguraci a objevuji jazyk. Možná mi to bude stačit i bez flakes, nemám nějak složitou infrastrukturu, spíš mám v plánu rozjet několik malých webů, které jsou teď tak různě všude možně a některé momentálně nefungují. No uvidím, kam se to vyvine.
když oni ti to dali na úvodku :). Jinak bych si toho také asi nevšiml, nix je zatím v českém prostředí titěrný, snažím se to propašovat k někomu většímu (třeba na generování image pro kubernet), ale zatím neúspěšně. Vpsfree je výjimka.
Flakes ti umožní mít pro jednotlivé aplikace vlastní nixpkgs strom závislostí. Nebo je to způsob jak může kompletně přemixovat nastavení služeb, závislostí a celý stack. Flakes je totiž rozhraní, které bere vstup, ten jakkoliv modifikuje a až poté se to evaluje, flaky můžeš řetězit. Umožňuje to ti do nix dostat jakékoliv externí zdroje a klidně jim lazy generovat hashe a můžeš adresovat přesně konkrétní sestavení vč. verzí nixpkgs, což běžně nelze snadno. Ne vše mám na flakes, ale sžívám se s tím.
Využívám třeba https://flakehub.com, umožňuje mi mít závislost na konkrétním nixpkgs lidštější formou než přes git hashe, např. "(import (fetchTarball https://flakehub.com/f/NixOS/nixpkgs/0.2311.555046.tar.gz));" pro celý OS nebo jen pro některé balíčky. Pokud dělám aktualizaci mohu buď udělat build celého systému nad novým nixpkgs nebo přidat další závislost a jednotlivé služby postupně na ní zmigrovat podle toho jak mám čas testovat. Takže když se v upstreamu objeví nějaký patch, aktualizace, mohu si jí cherry-pickovat s celým nixpkgs a již nemusím copy-paste jednotlivé definice služeb k sobě, jak jsem to dělal doteď.
dík. No já jsem ty flakes zkoumal někdy loni a nakonec dospěl k tomu, že to zatím udělám v čistém nix. Asi jsem ještě nenarazil na problém, který by flakes pomohli řešit.
Beru to v potaz a díky. Naučím se lépe poprzumět nix jako takovému a pak snad bude pro mě pochopitelnější i to, jak jsou flakes užitečné.
Dava, je to otazka potrieb a moznosti. Kontajner si mozete sprevadzkovat nad ktoroukolvek distribuciou dokonca aj nad windows.
Nic to nemeni na tom ze NixOS vyzera zaujimavo, zjavne je to vas milasek ale skutocny svet je casto komplikovanejsi ako ja som si nasiel, ja som si zvolil a ja si to takto budem robit.
kdysi jsem také používal, došel jsem ale k přesvědčení, že chci mít dokumentaci systému někde jinde a chci být schopný ho sestavit z nuly rychle, etckeeper mě jen částečně nahrazoval dokumentaci.
Pak jsem nějakou dobu žil s argumentem, že aspoň sleduji, jestli nastavení někdo nezměnil. Dnes na kontrolu integrity již používám auditd a sleduji to systémově s přímým napojením na monitoring, pokud si to provoz žádá.