Na soukromém notebooku už nějaký čas experimentuji. Zhruba rok jsem na něm provozoval rolling release verzi Fedory – Rawhide, nyní jsem se rozhodl, že zkusím neměnný systém a nainstaloval Silverblue.
Život s Rawhidem byl docela bezproblémový , nenarážel jsem na zásadní problémy a zároveň jsem měl vždycky to nejnovější. Nicméně aktualizace byly takové divočejší. Protože soukromý notebook tak často nepoužívám, aktualizoval jsem s většími časovými odstupy a pro jistotu to dělal v jiném tty, aby mi to případný pád terminálu či celého desktopu nepřekazil. Jednou jsem se ale zapomněl, aktualizoval v GNOME Terminalu, desktop zatuhl a vyřešil to až tvrdý restart. A systém se kvůli tomu ocitl v nebootovatelném stavu. Místo oprav jsem se rozhodl udělat to, po čem už jsem nějakou dobu pošilhával: přejít na neměnný systém s atomickými aktualizacemi.
Neměnný systém je dnes v módě. Umožňuje vám mít základní systém, který testujete a distribuujete jako celek. Problém systémů distribuovaných jako balíčky, což je drtivá většina dnešních linuxových distribucí, je v tom, že doinstalováváním balíčků do systému lze vytvořit prakticky neomezené množství kombinací. To je něco, co prostě neotestujete. Distribuce dnes mají řadu mechanismů a pravidel, jak tu integritu držet, ale má to své limity. QA týmy třeba upgrady většinou testují jen se setem základních balíčků a když si uživatel doinstaluje další, tak to ve většině případů funguje, ale prostě ne vždy. Neměnný systém tuto neurčitost řeší. Navíc většinou umožňuje snadný rollback, pokud se něco nepovede. Proto ho dnes najdeme čím dál častěji. Pravděpodobně jej máte i ve svém chytrém telefonu.
Myšlenka neměnného systému se začala rozvíjet ve Fedoře v projektu Atomic. Z něj se časem vyvinul na desktop zaměřený Atomic Workstation a nově projekt s vlastním brandingem Team Silverblue. Základním stavebním kamenem je OSTree, což je velmi zjednodušeně takový git pro souborový systém. V repozitáři na serveru se skládají jednotlivé stromy operačního systému z RPM, každý commit je aktualizace, každá větev jiná verze/vydání systému. S novou aktualizací jen stáhnete nový strom systému, do kterého následně nabootujete. Když je po aktualizaci/upgradu něco špatně, prostě jen v GRUBu vyberete předchozí strom a máte původní systém. OSTree řeší samozřejmě deduplikaci jak při stahování, tak při uložení na disku, takže nároky na přenesená data a místo na disku nejsou tak velké.
Jenže neměnný systém není jenom o tom. Doteď linuxové distribuce fungovaly na principu doinstalovávání softwaru skrze balíčky přímo do systému. Pokud chcete mít neměnný systém, musíte změnit i to, jak instalujete a spouštíte dodatečný software. A právě toto je největší výzva projektu Team Silverblue.
rpm-ostree, což je nástroj na správu OSTree stromů na disku, umožňuje tzv. RPM overlay, neboli vrstvu, do které můžete doinstalovávat dodatečné balíčky. I když lze v případě problémů tuto vrstvu jednoduše odstranit a člověk má pořád k dispozici jednoduché rollbacky, jde to proti myšlence neměnného systému, protože ho mění. Pokud chceme neměnný systém, musíme dodatečný software provozovat v izolovaném prostředí nad ním, typicky kontejnerech.
Silverblue sází na Flatpak, jehož největší repozitář je Flathub, který má momentálně něco přes 350 desktopových aplikací. Jelikož jsem se rozhodl vyzkoušet fungovat se zcela neměnným systémem, RPM overlay vůbec nepoužívám a tudíž mi musí stačit to, co je ve výchozím systému (což je jenom Firefox a základní aplikace GNOME) a aplikace z Flathubu. Po několika týdnech používání musím konstatovat, že mi ta nabídka zatím stačí. Na filmy mám VLC a GNOME MPV, na hudbu Spotify, na chat Telegram Desktop, na grafiku Inkscape a GIMP, na dokumenty LibreOffice a Evince. To všechno jsem ve Flathubu našel.
Další výzvou je, když potřebujete nějaké prostředí pro nedesktopové nástroje. Můžete použít Docker, ale ten není úplně optimální třeba pro vývojové prostředí. Momentálně experimentujeme s podmanem, který dokáže pomocí jednoduchého příkazu vytvořit kontejner s aktuální Fedorou. V budoucnu by to měla být v Silverblue výchozí volba pro terminál. Otevřete aplikaci Terminál a ta automaticky pracuje nad kontejnerem, kde můžete věci rozbíjet, aniž byste ohrozili systém, na kterém běžíte. K tomu se pak dostanete přes něco jako „Terminál – administrace“. Vychází to z myšlenky, že produkční systém, což váš desktopový systém, na kterém závisíte, bezesporu je, by neměl být vaším vývojovým/testovacím prostředím.
Vyladit všechno tak, aby uživatel prakticky nenarážel na žádná omezení neměnného systému a užíval si jeho výhod, je běh na delší trať a je možné, že zcela neměnný systém pro obecnou množinu zařízení ani nebude možný (dodatečné ovladače atd.), ale myslím si, že je to budoucnost i na desktopu (např. momentálně nejpopulárnější linuxový desktopový systém – ChromeOS – přesně na tomto principu pracuje).
Samotné Silverblue už ušlo docela dlouhou cestu. I aktualizace přes rpm-ostree jsou dnes integrované do GNOME Software, takže ani nemusíte do příkazové řádky. Přecházení mezi jednotlivými vydáními je taky elegantně jednoduché. Chtěl jsem zkusit Rawhide, tak jsem jedním příkazem udělat rebase na novou větev. Pak jsem se zase jedním příkazem vrátil na Fedoru 28. Zkuste si toto udělat pomocí balíčkovacího systému. Aktualizace/upgrade je rychlý (pouze stáhnete rozdíly, nemusí se počítat transakce, rozbalovat balíčky…) a bezpečný (dokud nerebootujete, jedete na původním systému, takže se vám to nemůže rozsypat během aktualizace pod rukama).
Skvěle se to také hodí na hledání regresí v aktualizacích. Např. několik dní po vydání Fedory 28 nám začali reportovat uživatelé, že mají na přihlašovací obrazovce anglickou místo české klávesnice. Výchozí instalace F28 tu chybu neměla, takže to musela způsobit nějaká aktualizace. Jenže v prvním týdnu jich tam byly stovky. Vývojář GDM tak šel v OSTree jeden denní commit po druhém, až zjistil, že se to rozbilo se středečními aktualizacemi. rpm-ostree mu vypsal ten den aktualizované balíčky a v nich už bylo možné najít viníka docela jednoduše.
Co vy, už jste systém na podobném principu zkoušeli nebo se dál držíte čistě tradičního balíčkovacího systému? Pokud ne, zkuste se na Silverblue podívat. Instalace je prakticky stejná jako u tradiční Fedory (Anaconda) a rpm-ostree není těžké používat.
Napsat komentář