Vrstvy

Z DCEwiki
Skočit na navigaci Skočit na vyhledávání

Dynamické skládání systémového disku disklessového systému z různých vrstev, je originální technologie kterou v rámci disklessové infrastruktury na Karlově náměstí implementoval od září 2016 správce disklessové infrastruktury, Aleš Kapica.

Sdílený souborový systém

Vývoj infrastruktury, která by umožnila používat disklessové pracovní stanice začal již v průběhu 80. let 20. století. Ale k tomu byl potřeba síťový souborový systém.[1] který by umožnil, na rozdíl od běžných Non-Diskless počítačů co mají svůj systémový adresář umístěný v rámci souborového systému na lokálním blokovém zařízení, pracovat se soubory na straně centrálního serveru.

Centralizace měla usnadnit administrátorům údržbu operačního systému, ale vybudování potřebné infrastruktury bylo drahé. Pořizovací náklady se odvíjely od kapacity úložiště, rozsahu sítě a počtu klientů. A byly tak vysoké, že si to většina subjektů nemohla dovolit. Proto se, až do počátku 21. století, diskless téměř nikde nepoužíval.

Ale v průběhu 90. let 20. století se hodně věcí změnilo:

  1. Masová výroba 8bitových počítačů[2], zlevnila výrobu HW komponent a konkureční boj podpořil jejich technologický vývoj.
  2. 13.2.1992 nadšenci z ČVUT v učebně 256 Fakulty elektrotechnické prostřednictvím telefonu připojili svůj sálový počítač IBM k internetovému uzlu na Univerzitě Johannese Keplera v rakouském Linci. Čímž se tehdejší ČSFR připojila k internetu a češi se velice záhy dostali mezi TOP vývojáře IT technologií.
  3. Popularita internetu[3] vedla k masovému šíření PC a to mělo druhotný vliv na technologický vývoj a produkci disků a RAM. Zvyšovala se propustnost sítí, rychlost CPU a rostla i kapacita blokových zařízení a klesala cena za RAM – to vše sráželo pořizovací náklady na vybudování centrálního úložiště.
  4. Masová produkce switchů srazila po roce 2000 ceny tak, že si gigabitové switche[4] mohly dovolit i měnší rozpočtové organizace – úřady a školy.

Na druhou stranu výrazně stoupaly náklady na údržbu Non-Diskless PC. Zpočátku, když byly osobní počítače ještě drahé a bylo jich jen pár, si oprašovali své stroje uživatelé sami a učili se za pochodu od sebe navzájem. Jenže během 90. let 20 stol. začala být administrace instalovaných operačních systémů tak složitá, že se museli v případě problému obrátit na specialistu. Takže začaly vznikat specializované IT firmy. A větší subjekty, disponující vlastními finančnímu prostředky zakládaly IT oddělení.

Jenže specialistů není nikdy dost a mají i své fyzické limity.

Udržovat lokálně instalovaný systém je časově velmi náročné. Všechno žere čas.

Disklessový linux, který se začal u laboratorních počítačů Katedry řídicí techniky používat v kooperaci s lokálně instalovaným systémem MS Windows XP od roku 2005 se původně používal jen při výuce.

Vrstva v RAM

Klíčovou inovací, se kterou přišel v roce 2007 Pavel Píša, byl overlay – vrstva umístěná v RAM, kterou se překryly adresáře nasdílené přes NFS a v roce 2008 vypadala situace tak, že každý laboratorní počítač měl k dispozici lokální disk o velikosti 120GB, na kterém byly v samostatných diskových oddílech tři lokální operační systémy (DOS, MS Windows 2000 a MS Windows 7), které zaváděl lokálně instalovaný zavaděč GRUB, který před zavedením vybraného lokálního systému u příslušného diskového oddílu přepínal typ diskového oddílu na 07 (NTFS), kdežto u těch zbylých ho změnil na 17 (Hide NTFS).

Zavaděč byl Michalem Sojkou rozšířený o zakompilovaný ovladač síťové karty, takže bylo možné linuxového jádro zavést i po síti. To předtím, než předalo řízení operačnímu systému překrylo připojené NFS adresáře vrstvou v RAM, takže se změny už nezapisovaly do sdíleného adresáře na straně NFS serveru, ale pouze do RAM, kterou klientská stanice s žádným jiným strojem nesdílela. Díky tomu bylo možné použít jeden a ten samý systémový adresář sdílený přes NFS na více strojích.

nfs classic.svg

Původní laboratorní diskless ale nebyl složen z vertikálně sestavených vrstev jako dnes.

Základem každé instalace byl adresář s instalací Debianu, sdílený přes NFS, do kterého bylo namaštěno vše, včetně uživatelských skriptů pro překrytí overlayem a následnou konfiguraci spouštěného systému namaštěno do jednoho adresáře. Jenom software, co se neinstaloval z distribučních balíků byl instalovaný do odděleného adresáře, rovněž sdíleného před NFS, který se mountoval v RO režimu RO před překrytím na adresář opt. Potíž byla v tom, že do tohoto adresáře v průběhu času přibýval další a další software, ale žádný neubýval, protože vyučující odcházeli pryč aniž by se dál starali o relikty své výuky. V roce 2013 tak dosahoval tenhle adresář obludných 50 GB.


Linuxové jádro s radiskem uměl přes PXE zavést pxelinux.0, proto se mohlo přejít na Full-Diskless, který byl schopen fungovat bez lokálního disku. Jenže ten zas neuměl zavést lokální systém, proto jako druhou alternativu natahoval pxegrub, kterým se zaváděly lokálně instalované MS Windows XP.

Tehdejší Full-Diskless řešení, aktivně používané při výuce od roku 2011, mělo pouze jednu vrstvu v RAM, protože jich stejně nešlo více použít. Ovšem z hlediska administrace lokálních MS Windows to byl ohromný pokrok, protože umožnil hromadnou distribuci aktualizované verze lokálních MS Windows XP po síti.

Každá používaná verze Debianu tehdy měla na straně serveru vlastní adresář, který vyžadovala specifické úpravy, bez kterých by jinak nemohly všechny laboratorní stroje používat jeden a ten samý systémový adresář. Během „ladění” laboratorního disklessu se tak míchaly v jednom pomyslném kotli distribuční soubory instalované přes APT s aplikacemi, co se instalovaly jinou cestou a sledovat dílčí konfigurační změny v prostředí off-line adresáře na straně serveru bylo víc a víc obtížné.

Operativní vypnutí překrytí

Situaci komplikovalo mimo jiné to, že ani jedna technologie umožňující překrytí vrstvou v RAM nebyla součástí hlavní větve linuxového jádra. A když se modul Miklose Szerediho[5] konečně dostal do jádra, neuměl (na rozdíl od vývojé verze) překrýt adresář mountovaný přes NFS. Nicméně bylo jen otázkou času, kdy to půjde. Proto byl skript overlay upraven dočasně alespoň tak, aby šlo překrytí podle potřeby vypnout.

Varianty, jak to udělat, byly dvě. Buď jádru předat volbu overlay=off před začátkem zavádění

vmlinuz ... overlay=off ...

Nebo zavádění přerušit parametrem break, pomocí příkazu touch vytvořit v kořeni ramdisku soubor s názvem off a následně příkazem exit pokračovat v zavádění.

vmlinuz ... break ...
...
(initramfs) touch off
(initramfs) exit
...

Tak bylo možné dělat změny rovnou v systémovém adresáři na NFS serveru, který pochopitelně musel mít při exportu pro adresu laboratorního stroje, na kterém se realizovaly změny povolen RW přístup.[6]

Sendvič

Szerediho modul také umožnil – na rozdíl od modulu aufs, který byl k dispozici v distribučním jádru Debianu – sestavení stacku z více vrstev.

První verze sendviče – oddělení konfigurační vrstvy

V září kdy měl modul overlay, již vyřešen problém s překrytím NFS přišel čas definitivně zahodit aufs a to umožnilo přejít na sendvič, sestavený z většího počtu vrstev.

První verze sendvičování, používaná od 22.září 2016, také pracovala s parametrem jádra overlay=, ale jiným způsobem. Zavaděč totiž nově předával také parametr layers=, ve kterém byl seznam vrstev co se měly sloučit do sendviče, kromě hodnoty off bylo možné předat také pořadové číslo vrstvy, která se po zavedení namountovala na přípojný bod /opt-layer kde v ní bylo možné za běhu dělat potřebné změny, pokud měl stroj povolen RW přístup na NFS.

Mělo to ovšem jednu drobnou vadu – systémová (distribuční) vrstva musela být první v pořadí, na nejnižší úrovni, protože jinak by systém nenajel.

nfs sandwich.svg

Schéma které vidíte názorně demonstruje jak funguje sendvič.

Překrytím lze soubory nejenom přidat, ale také odstranit či nahradit. Přičemž přednost má vrstva co je nejvíc nahoře. Jak naznačuje obrázek, pokud se ve 3. vrstvě ocitnou soubory, které překryjí soubory níže položených vrstev, může nastat problém (jak je naznačeno vykřičníkem), pokud jde o soubory které jsou důležité pro systém.

U disklessu, který pracoval pouze s jedním adresářem sdíleným přes NFS, k takové situaci dojít nemohlo, protože s ním pracoval pouze administrátor disklessové infrastruktury, který dobře ví co dělat nemá. Ale sendvičování mělo otevřít do budoucna cestu k tomu, aby si mohli obsah svých vrstev modifikovat sami uživatelé.

Druhá verze sendviče – libovolná kombinace vrstev

Po zavedení dynamicky řízeného ramdisku, je možné měnit operativně pořadí vrstev. Systémovou vrstvu lze umístit na libovolnou úroveň a tak využít specifických vlastností slučování vrstev skrze modul overlay velmi sofistikovaným způsobem.

  • Bylo tak odstraněno riziko, že někdo neúmyslně nabourá fungování systému, protože rizikové vrstvy jsou umístěné na nižšší úroveň, než je systém, takže se nekompatibilní knihovna či záměrně infikovaná systémová aplikace z takové vrstvy do spuštěného systému nedostane, protože ji nahradí ta správná.
  • A zároveň to umožnilo jednoduchou hromadnou konfiguraci tam, kde je to potřeba.

Kombinovaný sendvič

Sendvič, který umožňuje kombinovat squashované obrazy vrstev s NFS umožňuje na strojích typu Half-Diskless sestavit crypto.

Oddělení

101/bookworm - distro
    \
00   \_bootstrap (145MB)
11    \_základní diagnostické CLI aplikace, ověřování uživatelů, ssh server a nfs klient (303M)
22     \_X server & Lightdm (1.1G-2GB)
33      \_office (3.3GB)
44       \_develop (5,6GB)
55        \_texlive - musí být nad vrstvou X a develop (12GB)

  1. S první implementací NFS, které bylo alternativou k unixovému RFS, přišla v roce 1984 firma SUN. Ale reálně se začalo v produkci používat až NFSv2 specifikované v březnu 1989. NFS na rozdíl od RFS pracovalo se soubory na straně serveru, kdežto RFC pracovalo s jeho lokální kopií. Vyvíjely se však i jiné protokoly. Na soukromé Carnegie Mellon University, běžel od roku 1982 projekt Andrew, jehož cílem bylo vytvoření univerzitního disklessového systému, a k tomu byl potřeba i síťový souborový systém a tak se objevil AFS. Ale rokem 1997 a verzí Andrew-8.2 ten projekt de fakto skončil. Implementace poslední verze AFSv4 do linuxového jádra byla implementovaná jen v omezené míře a DFS, které vycházelo z komerční verze AFSv3 mělo jepičí život (1996–2005). DFS převálcovalo NFSv3, jehož specifikace se objevila v červnu 1995 a to co mělo navíc AFSv4 (ověřování přes Kerberos) bylo zahrnuto do NFSv4 v prosinci 2000.
  2. Používaly se především jako herní platforma, ale zároveň přivedly hodně mladých z zájmu o výpočetní techniku.
  3. History of Internet by John A. Clark (archive.org)
  4. Standard IEEE 802.3z 1000Base-X (gigabitový Ethernet), který se objevil v roce 1998, umožnil agregaci většího počtu strojů připojených přes 100Mb ethernet. Viz článek Průmyslový Ethernet I: Historický úvod Františka Zezulky a Ondřeje Hynčicy na webu https://www.automa.cz (archive.org)
  5. Odseparovat adresář s balíky instalovanými z distribučními repozitářů a překrýt ho dalšími vrstvami bylo možné až poté, co se do linuxového jádra dostal modul overlay, který to umožnil. Jenže nebylo to hned. Původní verze modulu overlay, vyvíjená od roku 2010 pod názvem overlayfs, uměla – stejně jako aufs, sloučit pouze dva adresáře. Ale kód přejmenovaného modulu, který byl začleněn roku 2015 do hlavní vývojové větve jádra for-next obsahoval změny, které umožnily sloučit do jednoho sendviče několik vrstev najednou. Jenže to mělo háček – overlay neuměl sloučit adresář, který byl namountován přes NFS. Provizorní řešení přes aplikaci unionfs a modul fuse se mi podařilo najít v únoru 2016. Disklessové stroje sice měly o něco horší výkon při diskových operacích, ale umožnilo nám to opustit aufs, které vyžadovalo kompilaci vlastního jádra. A protože jsem od dubna 2016 začal pracovat také pro DC, nasadil jsem (od září 2016) stejnou diskless infrastrukturu také tam. To už byl problém s překrytím NFS u modulu overlay vyřešen, takže jsem se mohl zbavit závislosti na kombinaci unionfs a fuse. A když už jsem byl v tom, přepsal jsem rovnou skript overlay tak, aby podporoval více vrstev.
    Citace z článku Jak jsem se dostal k vývoji disklessové infrastruktury, autor Aleš Kapica (*1969)
  6. Z bezpečnostního hlediska představuje adresář sdílený přes NFS v režimu RW velký problém, pokud se dá připojit z laboratorního stroje, ke kterému je volný přístup. Je mnoho způsobů jak donutit takový stroj spustit vlastní linuxový systém. DHCP přiděluje IP adresu na základě MAC adresy, která se nezmění. A k nežádoucímu nabourání infrastruktury, která s takovým adresářem pracuje stačí přepnout na lokálního uživatele root, namountovat nasdílený adresář a v něm udělat nežádoucí změny.