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

Anglické slovo bootstrap původně označovalo jenom poutko na botě, za které si ji přidržujeme, když se do ní snažíme narvat nohu. Během 20. století se přeneslo do oblasti počítačů. Procesu, při které se cpe jádro operačního systému do RAM, podobně jako noha do boty, se začalo říkat boot (angl. bota) a tohle slovo přešlo na proceduru, při níž se připravuje kromě jádra také základní sada knihoven a nástrojů, neboli operační systém, jak se obvykle tomuto „slepenci” říká. A linuxová distribuce Debian má k dispozici dokonce hned dva nástroje, přes které lze tuhle proceduru realizovat:

cdebootstrap
Podle manuálu jde o zjednodušenou obdobu následující utility, určenou k instalaci hotové sady, na základě zvoleného setu a kódového názvu distribuce (např. jessie, stretch, sid atp.). Sety neboli flavours (angl. příchutě) se od sebe liší tím, kolik toho nainstalují:
minimal (cca 172 MB pro trixie) – Nainstaluje pouze základ operačního systému + apt – nástroj přes který lze stáhnout a doinstalovat další binární balíky, ve kterých jsou zabalené hotové, již sestavené aplikace.
build (cca 454 MB pro trixie) – Kromě základních utilit operačního systému a nástroje apt doinstaluje také základní sadu software, nezbytnou pro sestavení binárních balíků ze stažených zdrojových balíků, ve kterých nejsou zkompilované aplikace, ale jejich zdrojový kód. Tuhle variantu lze použít pokud si chce někdo sestavit operační systém optimalizovaný pro svůj HW.
standard (cca 259MB pro trixie) – Je výchozí sada, která nainstaluje veškeré balíky, které lze považovat z hlediska operačního systému za důležité.
Poznámka Vyžaduje doinstalování balíků libdebian-installer-extra4 libdebian-installer4
debootstrap
Na první pohled se od předchozí aplikace neliší a má dokonce podobnou syntaxi. Ale neodstraňuje po instalaci balíky a navíc instaluje utility pro souborové systémy ext, balík tzdata. A balíky mount, passwd, logsave, které dnes nahrazuje z hlediska funkcionality systemd. A naopak neobsahuje by default fakeroot.
Má rovněž k dispozici řadu parametrů, jimiž lze ovlivnit, jak bude vypadat nainstalovaný systém. V zásadě je tedy úplně fuk, který z těchto nástrojů použijeme. I tahle utilita umožňuje instalovat předchystané sety, označované jako variants:
minbase (cca 213 MB po odstranění balíků 180 MB pro trixie) – tenhle ekvivalent setu minimal se liší jen v detailech. Také obsahuje pouze požadované (required) balíky + APT.
buildd (cca 622 MB po odstranění balíků 514 MB pro trixie) – ekvivalent setu build obsahuje oproti minbase navíc nástroje nezbytné ke kompilaci sofware ze zdrojového kódu.
fakechroot – vyžaduje doinstalovaný fakechroot a spuštěné prostředí fakechroot.
Pokud není uvedena žádná varianta, instaluje téměř stejný set jako cdebootstrap v případě variace 'standard'.
Poznámka Vyžaduje pouze doinstalování balíku arch-test, pokud nehodláte využít fakechroot.


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:/# dpkg-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.

Poznámka Občas se vyskytne situace, kdy potřebujeme, aby příkaz hostname v chrootovaném prostředí vracel jméno, které je nastaveno v něm. Ač je řešení triviální, není obecně známé
root@stroj:/# cat /etc/hostname
stroj-v-chroot
root@stroj:/# hostname
stroj
root@stroj:/# hostname $(cat /etc/hostname)
root@stroj:/# hostname
stroj-v-chroot


Unifikace UID a GID

Po zkopírování souborů /etc/group a /etc/passwd je třeba provést reinstalaci stávajících balíčků. Tím se zajistí, že se UID a GID adresářů, se kterými software nainstalovaný v támci těchto balíčků nastaví podle aktuální konfigurace

stroj (chroot) :~# for i in $(dpkg -l | awk '{print $2}'); do apt-get --reinstall install $i; done

Při aktualizaci balíku base-files na vás APT zařve, že chce tyto soubory přepsat:

May I update your system? [Y/n]

V žádném případě mu to nesmíte dovolit!

Upozornění U některých instalačních balíků se může vyskytnout postinstalační skript, který bude za každou cenu chtít uživatele a jeho skupinu vytvořit. Typicky ntp. V takovém případě zhavaruje instalační proces na konfiguraci balíku.

Řešení je jednoduché. Řádky, které vytváří uživatele a skupinu v příslušném postinstalačním skriptu zakomentovat. Pro 'ntp se jedná o soubor /var/lib/dpkg/info/ntp.postinstall.

Pak už konfigurace balíku proběhne v pořádku.

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

Instalace dalších balíčků

Jádro a nástroje pro úpravu ramdisku je třeba instalovat pouze v případě, že chceme ramdisk, který se pak použije při spouštění bezdiskového stroje sestavovat v prostředí bezdiskového stroje. Přo běžný provoz to není zapotřebí, pokud se do něj zavedou všechny potřebné moduly během zavádění z ramdisku,

Instalaci lze v prostředí chroot provést příkazem

apt-get install linux-image-3.2.0-4-amd64 initramfs-tools

APT kromě distribučního balíčku jádra, který obsahuje všechny potřebné moduly, stáhne a nainstaluje vše potřebné pro úpravu ramdisku.

Upozornění Při kompilaci vlastního jádra z vanilla kódu je třeba mít na paměti, že kód pro aufs, který umožňuje překrytí systémového disku - overlay filesystem není - na rozdíl od distribučního balíku se zdrojovým kódem co je v Debianu, jeho součástí.


Mohou se přidat i další balíčky, které sice nejsou součástí minimalistického systému instalovaného přes bootstrap, ale určitě by neměly chybět..

  • locales

A balíčky které zvyšují komfort při administraci

  • less - utilita pro prohlížení obsahu souborů
  • screen
  • ntp - démon pro nastavení systémového času
  • mc - správce souborů
  • openssh-server - pro vzdálený terminálový přístup do diskless systému
  • openssh-client - pro vzdálený terminálový přístup z diskless systému
  • puppet - klient systému pro řízenou správu konfigurace počítače Puppet
  • ...

Pro rychlé získání seznamu nainstalovaných balíčků z jiné/dřívější instalace Debianu lze použít následující příkaz

 aptitude search '?installed?not(?automatic)' \
 | sed -n -e 's/^i[ \t]\+\([^ \t]*\)[ \t].*$/\1/p' >packages

Podmínka hledání zajistí, že se v seznamu neobjeví balíčky nainstalované v důsledku automatických závislostí. Tyto není dobré explicitně instalovat, protože v mnoha případech se závislosti koncových balíků mění (používají již jinou verzi/variantu nebo daný balík již nepotřebují) a je tedy správné, aby se závislosti vyhledaly nově.

Instalace upraveného seznamu je pak možná příkazem

 aptitude install `cat packages`

Nastavení locales

dpkg-reconfigure locales

Pro češtinu UTF-8

Nastavení fontu zobrazovaného na konzoli

Pokud se mají na kozoli správně zobrazovat znaky v UTF-8 je třeba provést rekonfiguraci konzole následujícím příkazem:

dpkg-reconfigure console-setup

Pro zobrazování češtiny je třeba zvolit znakovou sadu Latin2 a nakonfigurovat font konzole.

Nastavení rozložení klávesnice

dpkg-reconfigure console-data

Pro nastavení české klávesnice s psaním angl. kláves přes pravý ALT - qwerty

Nastavení časové zóny

dpkg-reconfigure tzdata

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:::

Odstranění nepotřebných souborů

Adresář /dev

Výchozí obsah adresáře /dev lze s klidnou duší vymazat, protože moderní linuxový kernel detekuje a vytváří potřebná zařízení sám při startu na základě rozpoznaného hardware.

Adresář /tmp

Do adresáře /tmp se ukládají věci, které nejsou trvalého charakteru, ale které by se - pokud není použitý(!) overlay filesystem - rovněž průběžně ukládaly na straně NFS serveru, přesto že to není třeba.

Tomu lze zamezit tím, že se adresář /tmp namountováním přes tmpfs, namapuje do paměti počítače na straně klienta. Automatický mount zajistí následující řádek přidaný do souboru /etc/fstab :

none /tmp tmpfs defaults 0 0

Stávající obsah adresáře /tmp lze s klidem vymazat

Adresář /run

Je adresářem, do kterého si ukládají svoje soubory spuštěné démony. Podobně jako u adresáře /tmp má jeho obsah význam pouze pokud je virtuální stroj spuštěný, proto ja adresář /run, namapován přes tmpfs pouze do paměti počítače.

Je dobré vědět, že při práci přes chroot se v něm mohou objevit nějaké soubory. V případě systému, který pak bude spuštěn jako bezdiskový se mohou s klidem odstranit.

Poznámka Původně byl tento adresář součástí adresáře /var a některé aplikace se snaží zapisovat tam. Ovšem dnes je soubor /var/run pouze symlink na adresář /run.

Adresář /var/cache/apt/archives

Stejně tak můžeme vymazat veškerý obsah adresáře /var/cache/apt/archives, do kterého se stáhly během instalace a aktualizace instalační balíky, které už nejsou zapotřebí.

apt-get clean

Příprava ramdisku

Nezbytné moduly - nfs, ipv6, overlayfs, loop, nbd

Skript pro overlay

Jak zabalit. Atp.

Spuštění bezdiskového stroje

KVM

Více síťových rozhraní

XEN

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