- Žádné nadcházející události
BrandZ - Linuxové zóny
V předchozím příspěvku Kenji popsal, co to zóny vlastně jsou, jak se s nimi pracuje a jak se jim dá přidělovat různý výkon. V tomto článku nastíním jak takovou jednoduchou zónu s Linuxem nastavit. Ukázka se bude týkat distribuce Debian GNU/Linux.
Motivace
Mám aplikaci spustitelnou pouze na Linuxu ale chtěl bych ji používat i v OpenSolarisu. Zároveň chci využít technických možností OpenSolarisu jako jsou právě zóny a ZFS.
Co je to BrandZ
OpenSolaris neumožňuje spouštět aplikace z jiných systémů, tzn. aplikace, které nejsou nativní. V současné chvíli tu není žádný ELF emulátor, který by to umožňoval. Zóny, které mají schopnost spouštět jiné než nativní Solaris aplikace se nazývají brandované zóny, BrandZ. Zóny jsou rozšířené o podporu linuxového userlandu. Aplikace potom běží ve virtuálním prostředí i když hostitel je OpenSolaris.
OpenSolaris standardně umožňuje emulaci linuxového kernelu verze 2.4 a experimentálně verze 2.6. Pokud chceme použít právě kernel 2.6, který je pro novější distribuce, jako je např. CentOS 5.x nebo mnou použitý Debian 5.x nutný, stačí si ze stránek projektu stáhnout šablonu rozšířenou o verzi kernelu. Pro starší CentOS 4.x bez problému postačí i kernel 2.4 což ale v dnešní době není úplně to pravé oříškové.
Poznámka: Experimentální podpora kernelu 2.6 je dostupná pouze pro OpenSolaris. Klasický Solaris 10 v tuto chvíli takovou možnost nenabízí.
Poznámka 2: Linuxové zóny nepodporují přímý přístup k hw sítě, tzv. ip-type=exclusive.
# wget -O /etc/zones/SUNWlx26.xml http://hub.opensolaris.org/bin/download/Community+Group+brandz/linux_2_6/SUNWlx26.xml
Konfigurace
Konfigurace se provádí úplně stejně jako u klasické zóny, pouze navíc specifikujeme, že se jedná o linuxový userland, lx brand pomocí přepínače -t a názvu šablony. V našem případě právě SUNWlx26.
# zonecfg -z debian debian: No such zone configured Use 'create' to begin configuring a new zone. zonecfg:debian> create -t SUNWlx26 zonecfg:debian> set zonepath=/zones/debian zonecfg:debian> add net zonecfg:debian:net> set physical=e1000g0 zonecfg:debian:net> set address=192.168.4.2 zonecfg:debian:net> end zonecfg:debian> verify zonecfg:debian> commit zonecfg:debian> exit
Instalace
Nainstalovat systém je možné přímo z CD, iso souboru nebo předpřipraveného archivu, což je asi nejrychlejší a nejpohodlnější. Poslední možností je využít přímo ZFS a celý systém pouze naklonovat z nějakého jiného. V praxi si tak nainstalujeme jeden čistý systém, vytvoříme snapshot a každou další zónu během vteřiny naklonujeme pomocí zfs clone. Ukážeme si později.
Díky ZFS může mít každá zóna vlastní pool, který se vytvoří automaticky. Výhody z toho plynoucí netřeba opakovat. Ostatně jak bývá u ZFS dobrým zvykem, o vytvoření a připojení se nemusí uživatel vůbec starat.
# zfs create -o mountpoint=/zones rpool/zones
Já jsem pro instalaci použil svůj předpřipravený archiv s nainstalovaným Debian GNU/Linux 5.0.3 (51MB), kterou jsem si připravil na jiném počítači pomocí utility debootstrap.
# zoneadm -z debian install -d /tmp/debian-lenny.tar.gz
A ZFS file system has been created for this zone.
Installing zone 'debian' at root directory '/zones/debian'
from archive '/tmp/debian-lenny.tar.gz'
This process may take several minutes.
Setting up the initial lx brand environment.
System configuration modifications complete.
Setting up the initial lx brand environment.
System configuration modifications complete.
Installation of zone 'debian' completed successfully.
Details saved to log file:
"/zones/debian/root/var/log/debian.install.719.log"Spuštění
Před spuštěním ověříme stav zóny.
# zoneadm list -icv ID NAME STATUS PATH BRAND IP 0 global running / native shared - devzone installed /zones/devzone ipkg shared - debian installed /zones/debian lx shared
Pokud je zóna ve stavu installed, nic nám nebrání ji spustit.
# zoneadm -z debian boot
Práce se zónou
Zónu máme nastavenou, nakonfigurovanou a vše šlo jako po drátku, tak i běžící. Teď už je to rutinní záležitost. Veškerá práce s ní je jako s každou jinou, nativní či nenativní.
# zoneadm list -icv ID NAME STATUS PATH BRAND IP 0 global running / native shared 1 debian running /zones/debian lx shared - devzone installed /zones/devzone ipkg shared
Do zóny vstupujeme pomocí příkazu zlogin nebo na konzoli s přepínačem -C. Další parametry jsou předány přímo systému.
# zlogin debian "uname -a" Linux debian 2.6.18 BrandZ fake linux i686 GNU/Linux
Tipy triky, možné problémy
Cestu k archivu je vždy nutné zadat absolutní cestou. Použít ./debian-lenny.tar.gz nestačí. Obvykle vám systém sice vyhubuje ale zóna se občas dostane do stavu incomplete a nelze ji nainstalovat, dokud ji neodinstalujeme a nezačneme opět od začátku. Jinými slovy, nesmažete to co zvládl rozbalit, než narazil na chybu. Na tom se dá chvíli ztratit nejen čas ale i klidné nervy.
Jindy se nám může stát, že použijeme archiv, který není správný nebo instalační iso, které je prozměnu nepodporované. Za validní Linux se v tomto případě považuje RPM-based distribuce ale podle toho co jsem vysledoval, tak jen pro samotnou instalaci. V průběhu rozbalování se systém odkazuje na některé soubory, které jsou právě jen v RPM-based distribucích. Ty se poté snaží upravit. Na samotný běh to vliv nemá.
# zoneadm -z debian install -d /iso A ZFS file system has been created for this zone. Checking for valid Linux distribution ISO images... No valid ISO images available or mountable. Installation of supported Linux distribution to zone 'debian' FAILED Monday 09 November 2009 02:57:22 PM CET. Cleaning up after failed install... Installation of zone 'debian' FAILED. See the log file: '/zones/debian/root/var/log/debian.install.4333.log' for details. # zoneadm list -ivc ID NAME STATUS PATH BRAND IP 0 global running / native shared - devzone installed /zones/devzone ipkg shared - debian incomplete /zones/debian lx shared # zoneadm -z debian uninstall Are you sure you want to uninstall zone debian (y/[n])? y The ZFS file system for this zone has been destroyed.
Mnohem jednoduší je novou zónu nainstalovat z jiné funkční již nastavené pomocí klonovaní, které nám ZFS nabízí. Navíc lze zónu nainstalovat jedním příkazem. Samotná instalace pak trvá skutečně jen zlomek vteřiny.
# zfs snapshot rpool/zones/debian@install # zonecfg -z novy-debian "create -t SUNWlx26; set zonepath=/zones/novy-debian" # zoneadm -z novy-debian clone -s rpool/zones/debian@install debian
Linuxové zóny rovněž neumožňují přidat další disk, tzv. dataset, což je určitě škoda. Berličkou je vytvořit si nový pool a připojit ho přímo do adresářové struktury zóny. Úplně křišťálové řešení to není, systém nám za to bude po právu hubovat. Pool je tedy třeba ručně připojit pokaždé až po startu zóny. V každém případě, jde to ale nedoporučuji.
# zfs create -o mountpoint=/zones/debian/root/data rpool/zones/debian/data # echo test > /zones/debian/root/data/file.txt # zlogin debian cat /data/file.txt test # zoneadm -z debian reboot # zlogin debian cat /data/file.txt cat: /data/file.txt: No such file or directory # zfs mount rpool/zones/debian/data # zlogin debian cat /data/file.txt test
Zdroje
| Příloha | Velikost |
|---|---|
| Debian GNU/Linux 5.0.3 | 50.7 MB |
| CentOS 5.4 | 94.25 MB |






