Projekt Fedora stojí v čele snahy o sloučení adresářů v rámci linuxové adresářové struktury. Vývojář systemd Lennart Poettering napsal o aktivitě nazývané /usr-merge vysvětlující článek na FreeDesktop.org. Přečtěte si, oč se jedná.

Text vychází z popisu vlastnosti Fedory, který sepsali Harald Hoyer a Kay Sievers. Česká verze je překladem článku The Case for the /usr Merge.

Mějte na paměti, že tento článek mluví o otázce, která není závislá na systemd. Systemd podporuje systémy s rozděleným i sloučeným /usr, přičemž sloučení /usr dává smysl i na systémech bez systemd. Přesto bychom byli rádi, kdyby distribuce, které zavádějí systemd, na sloučený /usr přešly.

O co se jedná?

Fedora (a další distribuce) začaly pracovat na tom, abychom se zbavili rozdělených adresářů /bin a /usr/bin, stejně jako /sbin a /usr/sbin, /lib a /usr/lib a také /lib64 a /usr/lib64. Všechny soubory z adresářů v / budou zařazeny do svých protějšků v /usr a místo starých adresářů budou symbolické odkazy:

/bin → /usr/bin
/sbin → /usr/sbin
/lib → /usr/lib
/lib64 → /usr/lib64

Ptáte se, proč to dává smysl a proč se o to distribuce snaží? Následuje pár odpovědí na tyto dotazy s důrazem na otázky kompatibility.

Kompatibilita

  • Lepší kompatibilita s dalšími Unixy/Linuxy v chování: Po sloučení /usr budou všechny binárky dostupné jak v /bin, tak v /usr/bin, resp. v /sbin i /usr/sbin (prostě proto, že se z /bin stane symlink na /usr/bin, resp. /sbin na /usr/sbin). To znamená, že skripty/programy psané pro jiné Unixy nebo Linuxy a portované na vaši distribuci už nebudou vyžadovat opravy cest k binárkám v souborovém systému. /usr/bin a /bin (resp. /usr/sbin a /sbin) budou naprosto totožné.
  • Lepší kompatibilita s dalšími Unixy (hlavně Solarisem) v podobě: Hlavní komerční implementací Unixu je dnes Oracle Solaris. Solaris už sloučení /usr dokončil ve verzi 11. Stejná změna v Linuxu minimalizuje rozdíly s hlavní implementací Unixu, což usnadní portování ze Solarisu.
  • Lepší kompatibilita s GNU buildovacími systémy: Většina linuxového softwaru je sestavována pomocí nástrojů GNU autoconf/automake (tj. GNU autotools), které neví o rozděleném /usr, jež je specifické pro Linux. Údržba rozděleného /usr vyžaduje u jednotlivých projektů netriviální zásahy do upstream buildovacích systémů a distribučních balíčků. Sloučením /usr to přestane být potřeba a portování balíčků na Linux bude snazší.
  • Lepší kompatibilita s aktuálním upstream vývojem: Sloučení /usr je klíčové k minimalizaci rozdílů mezi linuxovými distribucemi a upstream vývojem.

Nad rámec kompatibility

Jednou z velkých výhod sloučení /usr je snížení komplexnosti systému: nová hierarchie souborového systému bude výrazně jednodušší a rozdíl mezi distributorem dodávanými systémovými prostředky a uživatelskými prostředky bude mnohem zřetelnější. Díky menší komplexnosti hierarchie bude snazší i balíčkování, protože zmizí problémy s řešením rozděleného /usr ve .spec souborech.

Sloučený adresář /usr, který obsahuje téměř všechny distributorem dodávané systémové prostředky, nabízí řadu nových možností v oblasti snímků OS a v podnikových prostředích v oblasti sdílení sítí nebo provozu více hostů na jednom hostiteli. Většinu z toho je mnohem těžší nebo dokonce nemožné docílit se současným nahodilým rozdělením nástrojů do několika adresářů.

Se všemi distributorem dodávanými systémovými prostředky v jediném adresáři /usr mohou být automaticky sdíleny, jejich snímky budou atomické a souborový systém bude moci být omezen pouze na čtení jako jeden celek.

Příklad: Sdílení /usr po síti

  • Se sloučeným /usr můžeme nabídnout read-only export distributorem dodávaného systému po síti, což bude obsahovat téměř všechny systémové prostředky. Klienty pak budou potřebovat pouze minimální kořenový souborový systém pro daného hostitele se symlinky na sdílený /usr souborový systém. Z hlediska údržby je to poprvé, kdy dává smysl sdílet operační systém po síti. Bez sdíleného adresáře /usr (jako v tradičním Linuxu) můžeme najednou sdílet jen části OS, ale ne jeho hlavní komponenty, které se nacházejí v kořenovém souborovém systému. Kořenový souborový systém pro daného hostitele tedy tradičně musí být větší, nemůže být sdílen mezi klienty a musí být individuálně a často aktualizován. Distributorem dodávané systémové prostředky často „prosakovaly“ do kořenového souborového systému pro daného hostitele.

Příklad: Více hostovaných OS na jednom hostiteli

  • Se sloučeným adresářem /usr můžeme nabízet sdílení /usr pouze ke čtení s více hostovanými operačními systémy, což zmenší souborový systém hostů na pár MB. Poměr mezi hostitelskou částí pro jednotlivé hosty a sdíleným operačním systémem tak bude téměř optimální.

Dlouhodobě je pravděpodobné, že údržba rozdělených nástrojů v distribuci a natvrdo zakódované odchylky instalačních cest kvůli rozmísťování binárek a dalších balených souborů do několika hierarchií způsobí více potíží než sloučení /usr.

Mýty a fakta

Mýtus č. 1: Fedora je první OS, který sloučení /usr implementuje.

Fakt: Oracle Solaris sloučení implementoval před 15 lety a dokončil v Solarisu 11. Fedora si bere příklad, není první.

Mýtus č. 2: Fedora je jediná linuxová distribuce, která sloučení /usr implementuje.

Fakt: Řada další distribucí se ubírá stejným směrem.

Mýtus č. 3: Sloučení /usr zhorší kompatibilitu s dalšími Unixy/Linuxy.

Fakt: Poskytováním všech binárních nástrojů v /usr/bin i v /bin (resp. /usr/sbin + /sbin) se kompatibilita s natvrdo napsanými binárními cestami ve skriptech zvýší. Když distro A instaluje nástroj „foo“ do /usr/bin a distro B do /bin, poskytneme ho v obou, čímž zařídíme kompatibilitu mezi A a B.

Mýtus č. 4: Jediný účel sloučení /usr je, aby to hezky vypadalo, jiné výhody nejsou.

Fakt: Sloučení /usr usnadňuje a atomizuje sdílení distributorem dodávaných systémových prostředků mezi hostitelem a klienty na síti i mezi hostitelem a lokálními kontejnery. Bude možné pořizovat snímky OS. Sloučení také umožní nastavení všech distributorem dodávaných systémových prostředků pouze pro čtení, což zvýší bezpečnost a robustnost.

Mýtus č. 5: Zavedení sloučeného /usr přidá práci správcům balíčků.

Fakt: Až bude změna provedena v dalších distribucích a v upstreamu, bude více práce znamenat nesloučený /usr. Zavedení nic nezhorší.

Mýtus č. 6: Rozdělený /usr je unixový „standard“ a sloučený /usr by byl pouze v Linuxu.

Fakt: Adresář /bin v SysV Unixu byl tradičně symlink na /usr/bin. Tento adresář bez symlinku je specifický pro non-SysV Unixy a Linux.

Mýtus č. 7: Po sloučení /usr nebude možné připojit /usr pouze ke čtení, jak se to často dělá.

Fakt: Právě naopak! Jeden z důvodů, proč to vlastně děláme, je zajistit, aby připojování /usr pouze pro čtení bylo důslednější: všechny distributorem dodávané systémové prostředky budou moci být pouze ke čtení, tj. také vše, co bylo tradičně uloženo v /bin, /sbin, /lib – nejen v /usr.

Mýtus č. 8: Sloučení /usr rozbije moji starou instalaci, která má /usr na samostatném oddílu.

Fakt: Takové situace jsou dobře podporovány a jedním z důvodů, proč to děláme, je zajistit, aby mohlo být uložení /usr na samostatný oddíl důslednější. Jediná změna je, že musíte nabootovat s initrd, které připojí /usr předtím, než skočí do kořenového souborového systému. Většina distribucí je tak jako tak postavená na initrd, takže v podstatě jen drobná změna.

Mýtus č. 9: Rozdělený /usr je užitečný, když chcete mít minimální záchranný systém v kořenovém souborovém systému a zbytek systému v /usr.

Fakt: Ve Fedoře má kořenový adresář už nyní ~450MB. To už dlouho není minimální a vzhledem k dnešním komplexním úložným a síťovým technologiím není reálné, že by se to ještě někdo zmenšilo. Ve skutečnosti převzal po svém zavedení do Linuxu roli minimálního záchranného systému initrd, který ke spuštění potřebuje jen funkční boot loader, ale ne celý souborový systém.

Mýtus č. 10: Stávající rozdělený /usr připojovaný bez initrd má výbornou podporu a funguje.

Fakt: Rozdělený /usr bez připojování přes initrd před skokem do kořenového souborového systému už dlouho správně nefunguje.

Mýtus č. 11: Místo sloučení / do /usr by dávalo větší smysl sloučit /usr do /.

Fakt: To by způsobilo, že oddělení distributorem dodávaných systémových prostředků a prostředků konkrétního stroje bylo ještě horší, takže by bylo mnohem těžší pořizovat snímky OS nebo sdílet OS po síti či s kontejnery. Kořenový souborový systém by byl zaneřáděn několika novými adresáři.