Jak vytvořit bezdiskový stroj s operačním systémem GNU/Linux

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

Operační systémy virtuálních strojů mají většinou své soubory uloženy podobně jako fyzické stroje v rámci souborového systému na lokálním blokovém zařízení.

Za tímto lokálním blokovým zařízením se může ovšem může ve skutečnosti skrývat cokoliv:

Lokální blokové zařízení

  • běžné fyzické blokové zařízení ve stroji
  • logický LV disk
  • soubor uložený na lokálním souborovém systému, připojený připojený přes loop

Síťové blokové zařízení

  • iSCSI disk
  • RBD disk (Ceph)
  • NBD zařízení

Blokové zařízení typu RAID

  • DRBD raid
  • sw RAID složený ze síťových blokových zařízení

O komunikaci mezi virtuálním blokovým zařízením a místem kde jsou data ve skutečnosti uložená se stará použitý virtualizační nástroj.

Bezdiskové stroje s operačním systémem GNU/Linux využívají toho, že jádro, které běží v paměti může použít i jiné speciální souborové systémy - mezi nimi i síťový souborový systém NFS.


NFS (Network File System) je distribuovaný souborový systém, který umožňuje sdílet obsah lokálního počítače (serveru) z více míst současně prostřednictvím internetové sítě. Na rozdíl od clusterových souborových systémů, které pracují s distribuovaným blokovým zařízením, neřeší konkurenční přístup k souborům vzdálený klient na stanicích (tj. nody), ale NFS server který data publikuje.

Výhody síťového souborového systému NFS

  • Umožňuje přístup do jednoho adresáře z více přípojných bodů, což usnadňuje průběžné zálohování
  • Nasdílení jednotlivých souborů sebou nese nižší nároky na síťovou režii - Největší nápor na I/O operace totiž bývá při startu operačního systému, kdy se načítají do paměti systémové soubory. Dál se již načítají soubory pouze v případě potřeby a ukládají změny. 95% nainstalovaných souborů většinou systém nikdy nepoužije. Je-li používán jeden adresář z více míst, nemusí server data opakovaně načítat z disku, ale může použít vyrovnávací paměť, což vede ke snížení průběžné režie I/O operací na blokových zařízeních serveru.

Nevýhody síťového souborového systému NFS

  • Jeden centrální přístupový bod - když se rozpadne síťové připojení může dojít ke zhroucení stroje, není-li spojení obnoveno včas.
  • Je třeba dbát na zajištění bezpečnosti přístupu - Multiuživatelský přístup dovoluje měnit soubory pod rukou.
  • Nižší hrubý výkon při rozsáhlých I/O operacích. NFS není vhodné pro uložení velkých souborů, u kterých dochází v celém rozsahu ke změnám uložených dat - typicky databáze či obrazu disků virtuálních strojů
Upozornění I když síťové souborové systémy obecně nejsou vhodné pro práci s takovými soubory lze při dobrém HW vybavení a optimalizované konfiguraci síťových prvků[1] NFS použít.
  1. Výkon síťových přenosů lze zvýšit kupř. použitím tzv. jumbo frames, které ovšem musí podporovat rovněž síťové prvky mezi serverem a klientem.
direction a suivre 3 yve 01.svgČíst dále..

Vytvoření výchozí instalace bezdiskového stroje

Použití bezdiskových strojů předpokládá, že máte k dispozici:

datové úložiště
na kterém běží NFS server[1]
stroj
který může být buď fyzický nebo virtuální. Musí všakale mít funkční síťové připojení ke stroji s adresářem sdíleným přes NFS
Poznámka Pokud se chystáme instalovat distribuci Debian, je nejrychlejším řešením použít jiný - již existující - stroj, s nainstalovaným balíkem deboostrap. Máme-li však k dispozici zapakovanou nějakou čistou výchozí instalaci, lze použít libovolný linuxový systém s jádrem, které podporuje připojení adresáře přes NFS.

Instalace do NFS adresáře s použitím utility debootstrap

1. Nejprve si vytvořím adresář /path_to_blank, který poslouží jako přípojný bod pro NFS
2. Po jeho vytvoření připojím adresář /volumes/diskless_root_dir nasdílený datovým úložištěm s IP adresou 147.32.87.10
3. Příkazem mount zkontroluji, zda-li je adresář opravdu připojen v režimu rw
Poznámka
root@stroj~# mkdir -p /path_to_blank
root@stroj~# mount -t nfs4 147.32.87.10:/volumes/diskless_root_dir/ /path_to_blank -o defaults,noatime,rw
root@stroj~# mount
 ...
147.32.87.10:/volumes/diskless_root_dir/ on /path_to_blank type nfs4 (rw,noatime,vers=4,rsize=1048576,
wsize=1048576,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=147.32.87.200,
minorversion=0,local_lock=none,addr=147.32.87.10)
root@stroj~#
4. Pokud je připojení v pořádku, vytvořím v připojeném adresáři podadresář /path_to_blank/blank_wheezy do kterého provedu minimalistickou instalaci debootstrap
5. Po jeho vytvoření do něj příkazem cd skočím..
6. ..a spustím přes debootstrap instalaci Debianu wheezy pro 64 bitovou architekturu procesoru (amd64)
Poznámka
root@stroj~# mkdir -p /path_to_blank/blank_wheezy
root@stroj~# cd /path_to_blank/blank_wheezy
root@stroj:/path_to_blank/blank_wheezy# debootstrap --verbose \
	--keyring=/usr/share/keyrings/debian-archive-keyring.gpg \
	--include=debian-keyring,etckeeper \
	--arch=amd64 \
	wheezy \
	./ \
	http://ftp.cz.debian.org/debian
 ...
root@stroj:/path_to_blank/blank_wheezy#
  • Parametrem --keyring se předá cesta ke klíči, kterým se bude kontrolovat důvěryhodnost stažených balíků
  • Parametr --include zajistí během bootstrapu instalaci balíků, které nejsou součástí základní instalace
Upozornění Při instalaci Debian wheezy jsem narazil na problém u balíku dash. Jeho konfigurace troskotala na symlinku /usr/share/man/man1/sh.1.gz, který odkazoval na soubor dash.1.gz. Aby však mohl být balík dash zkonfigurován musí tento symlink odkazovat na bash.1.gz.

Pro úspěšné dokončení bootstrapu tedy bylo nutné tento symlink opravit a spustit debootstrap znovu:

Poznámka
root@stroj:/path_to_blank/blank_wheezy# pushd usr/share/man/man1/
 /path_to_blank/blank_wheezy/usr/share/man/man1/ /path_to_blank/blank_wheezy ~
root@stroj:/path_to_blank/blank_wheezy/usr/share/man/man1/# rmdir sh.1.gz
root@stroj:/path_to_blank/blank_wheezy/usr/share/man/man1/# ln -s bash.1.gz sh.1.gz
root@stroj:/path_to_blank/blank_wheezy/usr/share/man/man1/# popd
 /path_to_blank/blank_wheezy ~
root@stroj:/path_to_blank/blank_wheezy# debootstrap --verbose --arch=amd64 wheezy ./ http://ftp.cz.debian.org/debian
 ...

Pokud deboostrap doběhne v pořádku, odstraní sám svůj dočasný adresář. Přesto je ovšem třeba ještě provést menší čistku a úpravu konfigurace.

Vyčištění a úprava konfigurace bezdiskového stroje

Součástí argumentů pro debootstrap byla instalace aplikace etckeeper, což je v podstatě wrapper pro git. Jeho použití ve vhodné všude tam, kde chceme mít podchycené veškeré úpravy konfigurace.

Pro větší kontrolu jednotlivých konfiguračních kroků je vhodné v jeho konfiguraci odkomentovat konfigurační volby v souboru /etc/etckeeper, které zamezí tomu, aby etckeeper ukládal změny do git repozitáře automaticky:

AVOID_DAILY_AUTOCOMMITS=1
AVOID_COMMIT_BEFORE_INSTALL=1
Pozn.: K editaci konfiguračního souboru lze použít minimalistické vi, nebo nano, které jsou součástí výchozí instalace přes debootstrap.


Nastavení /etc/hostname

Při instalaci přes deboostrap je obvykle zkopírován soubor hostname stroje na kterém byl příkaz spuštěn.

Pokud budeme tuto instalaci používat jako výchozí polotovar, je dobré nastavit obsah tohoto souboru tak aby to bylo zřejmé. Kupř. blank_wheezy

Pokud má být tato instalace spuštěna jako konkrétní stroj, tak samozřejmě musí obsah /etc/hostname odpovídat jeho jménu

Debian a chroot

Po přepnutí do systémového adresáře přes utilitu chroot lze se systémem pracovat stejně, jako by byl spuštěn jako na reálném či virtuálním stroji. Tzn. že lze rovněž spouštět a restartovat nejrůznější démony, které by se však mohly dostat do kolize s démony hostitelského stroje.

Pokoušejí se o to i některé instalačí balíčky Debianu. Proto u něj existuje možnost vytvořit spustitelný bezpečnostní skript /usr/sbin/policy-rc.d.

Pokud tento skript vrátí jinou hodnotu než 0, je spouštění démonů při instalaci a rekonfiguraci přes APT potlačeno.

/usr/sbin/policy-rc.d

Jednou z možností, jak odlišit systém hostitele od systému, který běží přes chroot je test aktuálního hostname. Pokud systém běží autonomně, vrací obsah souboru /etc/hostname. Je-li spuštěn přes chroot, vrací hostname hostitele.

Poznámka
stroj (DATASERVER) :~# chroot /path_to_blank/blank-wheezy
root@stroj:/# cat /etc/hostname
wheezy-diskless
root@stroj:/# cat /usr/sbin/policy-rc.d 
#!/bin/sh

[ "wheezy-diskless" = "$(hostname)" ] && exit 0
exit 101
root@snoopy:/# /usr/sbin/policy-rc.d 
root@snoopy:/# echo $?
101
root@snoopy:/# pkg-reconfigure cron
invoke-rc.d: policy-rc.d denied execution of stop.
invoke-rc.d: policy-rc.d denied execution of start.

Výše uvedený příklad demonstruje, jak dopadne v chrootovaném prostředí pokus o rekonfiguraci debianího balíku cron, pokud příkaz hostname nevrací wheezy-diskless.


Odstranění nepotřebných souborů

Nyní můžeme s klidnou duší vymazat obsah adresáře /dev, protože ten si moderní linuxový kernel vytváří při startu sám na základě rozpoznaného hardware.

Stejně tak můžeme vymazat veškerý obsah adresáře /var/cache/apt/archives, který se stáhnul během instalace, protože už více nebude třeba.

Po vyčištění je třeba provést úpravu základní konfigurace

Nastavení obsahu /etc/hosts

Obsah souboru /etc/hosts se nekopíruje a ve výchozím nastavení obsahuje pouze lokální adresy. Tudíž u polotovaru nedoplňujeme nic. U stroje který má být spuštěn nastavíme před lokální adresy jeho síťovou adresu a doménu.

Nastavení obsahu /etc/resolv.conf

Soubor /etc/resolv.conf opět deboostrap kopíruje ze stroje na kterém byl spuštěn. Jeho obsah se obvykle nijak nemění. Pouze má-li být stroj spouštěn v jiné síti, než kde byl instalován, je nutná úprava

Nastavení výchozího uživatele

Jsme-li v chrootu, je to vhodná příležitost k nastavení výchozího uživatele a jeho hesla. Tímto uživatelem nemusí být nutně uživatel root, pokud si doinstalujete aplikaci sudo a nově vytvořeného uživatele přidáte do stejnojmenné skupiny.

Pokud nechcete sudo používat, tak je třeba nastavit uživateli root heslo příkazem passwd, neboť pak byste nemohli v prostředí virtuálního použít příkaz su, ani provést případné opravy v single režimu.

Přidání již existujícího hesla

Heslo, resp. jeho "hash" nemusíte příkazem passwd nutně generovat znovu, ale má-li se při autorizaci používat soubor /etc/passwd, je možné ho překopírovat jeho "hash" do tohoto souboru odjinud.

Obecně je však doporučeno používat hesla umístěná v souboru /etc/shadow. To však vyžaduje úpravu i souborů /etc/passwd a /etc/groups, kdy první znak * (hvězdička) na každém řádku musí být nahrazen znakem x (malé x). Tuto operaci však lze jednoduše realizovat pomocí editoru sed

cd /etc
cp group group-
sed 's/:*:/:x:/' ./group- > group
cp passwd passwd-
sed 's/:*:/:x:/' ./passwd- > passwd
cp shadows shadows-
sed 's/:*:/:x:/g' ./shadows- > group

Do souboru shadow se pak uživateli root místo znaku 'x' vloží hash pro heslo

root:x:15550:0:99999:7:::
root:$6$rdGp6JD2$2EWFVk36DTP0oUCmyv.O9fiD3vY1W1dG8togiu37501MI9.pQr2pJ0YSe/NPEU7q7BQgAD5GUxWjzT49iH9UU.:15550:0:99999:7:::

Instalace a aktualizace bezdiskového stroje

Instalaci bezdiskového virtuálního stroje lze aktualizovat a případně rozšiřovat o další instalační balíky z několika způsoby.

Je-li stroj spuštěn z NFS adresářem vypublikovaným a připojeným v režimu, který umožňuje také zápis, pak lze provádět tyto operace přímo v něm. Ovšem s jednou výjimkou. Tou je aktualizace balíku mount, při které je vyžadován mj. remount připojeného kořenového adresáře. Ten pochopitelně u diskless stroje nelze provést, neboť jsou z něj otevřeny soubory se kterými se zrovna pracuje.

I v takovém případě si ale lze poradit, a to tak, že se systém spustí z ramdisku a aktualizace se udělá přes chroot.

Práce v prostředí ramdisku

Archivace, instalace a konfigurace

Spuštění a aktualizace bezdiskového stroje

Nejprve stroj přes PXE získá konfiguraci z DHCP a cestu k zaváděcímu souboru na TFTP serveru Zaváděcí soubor mu předá cestu k zaváděcím souborům a parametry jádra

V případě virtuálních strojů není nutné DHCP, ale parametry pro zavedení jádra lze předat přes příkazovou řádku, či prostřednictvím konfiguračního souboru virtuálního stroje.

Důležité je zajistit aby měl stroj v okamžiku připojení NFS funkční síťovou konfiguraci a připojení. Dále je nutné odstavit služby, které by se při startu případně pokoušely o rekonfiguraci síťového připojení. V takovém případě by se totiž mohlo stát, že stroj zůstane viset, protože mu přestane fungovat připojení na NFS server.

KVM

Více síťových rozhraní

XEN

  1. Instalace a konfigurace NFS serveru není obsahem tohoto manuálu, ale manuálu k NFS