Nedávno jsem si uvědomil, že to jsou skoro přesně 2 roky od doby, co jsem začal používat Fedoru SIlverblue, o které jsem toho už něco málo napsal. Proto jsem si řekl, že k tomuto dvouletému výročí vytvořím krátký seriál o Silverblue a postupně projdu dopodrobna jednotlivé aspekty tohoto systému, který se od běžných distribucí přece jen liší trochu víc, než je běžné.
V prvním díle seriálu hlavně proberu základní koncepty a vysvětlím, v čem se Silverblue tolik liší jak od klasické Fedory, tak od většiny dalších linuxů, se kterými jste dosud pracovali. V dalších dílech se budu věnovat vždycy nějaké konkrétní vlastnosti, třeba toolboxu nebo různým spinům typu Kionite.
Silverblue: prakticky nezničitlný OS
Silverblue, jak se můžete dočíst v řadě článků, je něco, čemu se říká „next-gen OS“. Co to znamená? Že mění zaběhnuté konvence běžným operačních systémů a celé odvětví zase posouvá někam dál. V případě Silverblue byl cíl poměrně jednoduchý: vytvořit systém, který bude bezpečný jak z hlediska vnějších hrozeb (viry, „zlé“ aplikace), tak z hlediska uživatele – jednoduše řečeno, bude opravdu těžké systém rozbít.
Silverblue toho docílila tak, že celý systém je postavený na něčem, co se jmenuje OSTree. OSTree je upgradovací systém pro linux, který se k systému chová podobně, jako by se jednalo o git repozitář. Jednodlivé updaty jsou ekvivalentní commitům a nové verze systému odpovídají novým větvím. Stejně jako v gitu, i zde se můžeme pohybovat po různých commitech, nebo se přepnout do jiné větve. Hlavní výhodou je poté to, že pokud se systém po aktualizaci rozbije, návrat do předchozího stavu je skutečně velmi jednoduchý.
Rozbití je o to složitější, že většina systému je „read-only“ – uživatel nemůže měnit žádné soubory. Výjimkou je pouze adresář /var. Dokonce i domovský adresář /home je pouze symlink do /var/home. Systém je tedy opravdu robustní a rozbít ho je poměrně těžké (ale ne nemožné – vyzkoušeno za vás :)).
Problém ovšem nastává, pokud bychom si chtěli nainstalovat aplikaci pomocí klasického balíčkovacího systému dnf. Prvním problémem je, že žádné dnf v Silverblue nenajdete a místo něj je zde CLI utilita rpm-ostree. Instalace rpm balíčku ovšem znamená, že je třeba vytvořit nový commit vašeho systému a celý systém restartovat, aby bylo možné do tohoto nového commitu nabootovat. Nemluvě o tom, že při aktualizaci z „upstreamu“ může dojít ke konfliktům.
Jak tedy instalovat aplikace?
Flatpak: nový způsob distribuce aplikací
První (a preferovaná) možnost je používat nový balíčkovací systém – flatpak. Jelikož o něm bude celý jeden díl seriálu, tady popíšu jen jeho základní vlastnosti.
Flatpak se jmenuje podle plochých krabic, které používá IKEA. Idea těchto krabic je, že si zákazník může sestavit nábytek jen z toho, co je v krabici. A flatpaky se tomu velmi podobají. Klasické balíčkovací systémy fungují na tom, že jsou provázány sítí závislostí. To může vést k různým problémům, třeba když potřebujete mít v systému dva balíčky v různých verzích. Flatpak tohle elegantně řeší.
Všechny závislosti jsou pomyslně rozdělené do dvou skupin. V první skupině jsou běžně používané balíčky, které potřebuje velké množství aplikací a zároveň nejsou přítomné na hostitelském systému. Z této skupiny se vytvoří běhové prostředí – runtime – a závislosti z tohoto prostředí budou k dispozici pro všechny flatpaky. Druhá skupina obsahuje závislosti, které jsou specifické pro každou aplikaci – starší (nebo naopak novější) verze knihoven nebo takové balíčky, které používá jen omezenné množství aplikací. Takové balíčky jsou poté zabalyn do jednoho balíčku spolu s aplikací – a tak vznikne samotný flatpak.
Díky téhle architektuře může flatpak poté běžet kdekoli, kde jde nainstalovat i samotný runtime, nehledě na operační systém.
Další vlastností, která činí flatpak tak speciálním, je správá oprávnění. To jednoduše znamená, že v základu nemůže aplikace dělat nic; nemůže zobrazovat na displej, přehrávat zvuk ani se připojit k internetu. Všechna tato oprávnění jsou jí explicitně povolená a činnosti provádí přes tzv. portály. To znamená, že uživatel může přesně vědět, co která aplikace potřebuje ke svému fungování a zároveň to komplikuje situaci lidem, kteří by snad chtěli na váš systém dostat nějakou podvodnou aplikaci.
Toolbox: když flatpaky nestačí…
No, ale co dělat, pokud moje aplikace ve flatpaku není, nebo je to pro můj účel nepoužitelné řešení – například v situaci, kdy potřebuji měnit systém, vyvýjím nějakou specifickou aplikaci atp.? V takovém případě nastupuje na scénu toolbox – skvělá CLI utilita postavená nad kontejnerizačním nástrojem podman.
Pomocí dvou příkazů se dostanete do kontejneru, který je na první (a několik dalších) pohledů k nerozeznání od normální Fedory Workastation – byť pouze v textovém režimu. Uvnitř toolboxu máte k dispozici své oblíbené dnf, můžete instalovat rpm balíčky i třeba celý kontejner v toolboxu rozbít, pokud chcete. Ovšem váš hostitelský systém zůstane neporušený (přinejhorším přijdete o data z /home, jelikož tento adresář je připojený ke kontejneru).
Ideální případ použití toolboxu je v situaci, kdy jste programátor a vyvíjíte nějakou aplikaci – i když samotný kontejner nemá GUI, grafické aplikace (většinou) spustíte.
Závěr
Co jsme se tedy dozvěděli? Že existuje Fedora Silverblue, téměř nerozbitný operační systém, který se chová podobně jako gitový repozitář. Aplikace můžeme instalovat pomocí flatpaku, čímž nám odpadnou starosti se závislostmi a díky přehledu oprávnění víme, co která aplikace může a nemůže dělat. A pokud potřebujeme Fedoru Workstation (například při vývoji), máme k dispozici mocný nástroj toolbox, který nám dá kontejner prakticky k nerozeznání od Fedory Workstation v CLI. A to je pro dnešní díl vše.
Na úplný závěr přidávám kompletní přehled užitečných odkazů:
- Článek „Co je Fedora SIlverblue?“ od Tomáše Popely: https://mojefedora.cz/co-je-silverblue/
- OSTree dokumentace: https://ostreedev.github.io/ostree/introduction/
- Odkaz ke stažení Feodry Silverblue: https://silverblue.fedoraproject.org/download