nfsroot

From DCEwiki
Jump to navigation Jump to search

Technologie dynamického ramdisku, zavedená v září 2019 posunula disklessovou infrastrukturu na zcela jinou úroveň, protože umožnila zjednodušit konfiguraci zavaděče[1] a soustředit konfiguraci veškeré disklessové infrastruktury[2] do jednoho adresáře verzovaného přes git.

Princip

Sestavení dynamického ramdisku, který předá zavaděč spolu s jádrem přes PXE při zavádění po síti, musí obsahovat jen to, co je nezbytné pro nahození sítě.

Součástí instalačního balíku initramfs-tools je skript nfs, který je poněkud zastaralý. Proto používáme jeho upravenou verzi, která umožňuje ladění disklessového systému on-the-fly. Kterou stačí umístit do adresáře /etc/initramfs-tools/scripts – během sestavení ramdisku mají soubory z adresáře /etc/initramfs-tools přednost před defaultními soubory, které můžete najít v adresáři /usr/share/initramfs-tools/

Dále je potřeba skript nfsroot, který se spouští ve fázi top, ale jen pokud se systém zavádí před NFS!

/etc
   /initramfs-tools
       /conf.d
       /hooks
           enable-wireless      <-- hook pro zahrnutí modulů a aplikací potřebných pro Wi-Fi
           cachefs              <-- OBSOLETE hook pro zahrnutí modulů a aplikace mcachefs
           crypto               <-- klíčový hook pro utility s nimiž pracuje autonomní Half-Diskless
           nfs4                 <-- hook pro zahrnutí modulů pro NFSv4
           omit                 <-- hook pro vyřazení nadbytečných modulů
       initramfs.conf
       /scripts
           /nfs-top
               enable_wireless  <-- skript pro nahazování Wi-Fi
               nfsroot          <-- hlavní skript pro stažení konfigurace z TFTP
           nfs                  <-- upravený skript pro zavedení systému přes NFS
           wpa_supplicant.conf  <-- konfigurace pro Wi-Fi


/conf/conf.d/nfsroot       <-- konfigurační soubor, který stáhl nfsroot
/scripts
   _sdileno                <-- soubor sdílených funkcí, který stáhl skript _functions
   functions               <-- soubor sdílených funkcí, který přetáhl skript _functions
   /init-bottom
       ORDER
       udev
   /init-top
       ORDER
       all_generic_ide
       blacklist
       keymap
       udev
   local
   /local-bottom
       ORDER
       ntfs_3g
   /local-premount
       ORDER
       btrfs
       ntfs_3g
       resume
   nfs                     <-- upravený soubor
	/nfs-bottom
       ORDER
       crypto              <-- skript, který stáhl nfsroot jako 4.
       overlay             <-- skript, který stáhl nfsroot jako 5.
   /nfs-premount
       ORDER
       _functions          <-- skript, který stáhl nfsroot jako 1.
       debug               <-- skript, který stáhl nfsroot jako 2.
       findswap            <-- skript, který stáhl nfsroot jako 3.
   /nfs-top
       ORDER
       enable_wireless     <-- 1.
       nfsroot             <-- 2.


Původně se totiž předával seznam vrstev a další proměnné prostřednictvím parametrů jádra. K těm se dá velice snadno dostat výpisem obsahu souboru /proc/cmdline, ale pokud došlo k nějaké chybě při zápisu, skončil systém ve stavu, který vyřešil jen manuální restart přímo na místě.

Dynamický ramdisk pracuje s konfigurací, kterou si stahuje buď na základě předaného parametru name=, nebo konfigurace sítě z DHCP, přidělené na základě MAC adresy. V případě, že se v konfiguraci objeví nějaká chyba, např. překlep v URL vrstvy sdílené před NFS, přeskočí neplatnou položku a pokračuje dál v zavádění.

Dynamický ramdisk vyřešil také otázku zavaděčů, protože se pracuje se stejnou konfigurací bez ohledu na to, který zavaděč a jakým způsobem jádro spustil. Nezáleží tedy na tom, je-li jádro zavedeno přes Legacy či UEFI PXE, nebo ho zavedl lokálně instalovaný Grub.

Díky tomu se administrace všech strojů disklessové infrastruktury soustředila do jediného místa a několika málo konfiguračních souborů. Většina strojů si vystačí s generickou konfigurací. Jenom stroje, které tvoří specifickou součást disklessové infrastruktury mají konfiguraci vlastní.

Také úprava konfigurace systému je velice snadná. Vše se řeší přes vrstvy. Základní vrstva, ve které jsou systémové soubory a distribuční software je u všech strojů stejná. A konfigurace se mění pouze tím, že se nad ní použije jiná vrstva.

Např. rozdílné metody ověřování řeší dvě velice tenké vrstvy, které obsahují pouze konfigurační soubory. Prostřednictvím vrstvy isolate lze velice elegantním způsobem získat stroj ideální ke zkouškám, kde je dostupný veškerý software ale přístup do sítě omezen jen na vyhrazené stroje.

Dynamický ramdisk také umožnil vytvořit technologii autonomního Half-Disklessu. [3]

Princip

Základní skript dynamického ramdisku, který stahuje konfiguraci stroje z TFTP serveru. Používá se od září 2019. Obsahuje čtyři základní funkce:

tftp_download
Pomocná funkce pro stažení konfiguračního souboru
script_download
Pomocná funkce pro stažení dalších skriptů
get_script
Stahuje skripty
find_nfsroot
Stahuje konfiguraci

Od nasazení tohoto skriptu není nutné aby byly skripty spouštěné v dalších fázích zavádění (findswap, overlay, crypto, aj.) součástí komprimovaného ramdisku.

Upozornění Netýká se to skriptu enable_wireles, nezbytného pro nahození sítě, který se spouští (stejně jako tenhle skript ve fázi nfs-top!

Verze

MD5SUM Velikost kB Datum vytvoření
2f7de9c79c2d55a6abd01536ac1bac1f 2320 2019-09-07 první verze (bullseye)
6bd8069b4436e5187e00c1bd604af0c9 2349 2021-01-26 druhá, vývojová verze původního skriptu, kterou (ne)servíruje DHCP, rozšířená o podporu pro stahování skriptů z různých TFTP lokací
bf448e064d383fadf1f5664cfef76d70 2497 2021-01-26 třetí produkční verze (bullseye)
658068280627daebb75ad5511ffded4e 2503 úno 12 2021-02-12 čtvrtá, produkční verze (bookworm) s upravenou podmínkou
  1. Více v kapitole Zavádění bezdiskových strojů.
  2. Viz – Přehled vývoje infrastruktury pro diskless Debian na katedře DCE.
  3. Aleš Kapica (*1969) Jak jsem se dostal k vývoji disklessové infrastruktury – dokončení:
    Aleš Kapica (*1969), psáno 7. až 9. ledna 2024