S virtuálními stroji můžete bezpečně objevovat dosud neznámé možnosti Linuxu, např. load balancing, 802.1d bridgování, bonding, virtuální sítě a jiné, na které byste potřebovali více hardwaru, než máte běžně k dispozici.
Pro jednodušší představu o tom, jak to celé funguje, použijeme protection model definovaný pro procesory Intel x86. Takový procesor sestává ze čtyř ringů (úrovní ochrany), přičemž v případě nejběžnějších operačních systémů běží v ringu 0 jádro a v ringu 3 potom jednotlivé aplikace. Ostatní ringy jsou využívány zřídka (např. systémem OS/2). Pokud ovšem jde o Xen, pak hypervizor (program přijímající systémová volání) běží v ringu 0, kde je za normálního stavu jádro OS, privilegovaná doména dom0 (v podstatě prostředí operačního systému, ve kterém běžně pracujete) běží spolu s neprivilegovanými doménami domU (tj. virtuálními stroji) v ringu 1 a aplikace potom jako obvykle v ringu 3. Proces bootování tomuto schématu odpovídá - nejdříve je do ringu 0 zaveden hypervizor, pak se spustí upravené jádro privilegované domény dom0 v prvním ringu. Z něj může být spuštěn další virtuální stroj (doména domU), jehož jádro je zavedeno rovněž v ringu 0. Aplikace v rámci domény pak běží v ringu posledním, tj. třetím.
Přestože je tento článek o verzi Xen 2.0.7, k dispozici je již verze 3.0 s mnoha vylepšeními. Verze starší má však stále lepší podporu a stabilitu a, pokud nechcete experimentovat, je vhodnější ji použít.
Doména 0 při svém spuštění vytváří backend ovladače zařízení, se kterými posléze komunikují frontend ovladače v jednotlivých doménách U, které tak mohou přistupovat k blokovým zařízením, síťovým rozhraním apod. Jádra hostovaných neprivilegovaných systémů musejí být zatím patchována, nicméně na procesorech s podporou VT-X (Intel) nebo Pacifica (AMD) by již mělo být možné provozovat hostované domény domU bez změn v jejich jádrech. To ovšem až od verze Xen 3.0, v tomto článku bude pojednáno o verzi 2.0.7, která má zatím větší podporu a množství informačních zdrojů.
Nezbytný software
K instalaci Xenu 2.0.7 potřebujeme kromě samotných zdrojových kódů následující software: funkční Linux (na distribuci prakticky nezáleží)
- zavaděč GRUB
- balík iproute2 (na Debianu iproute)
- udev, popř. hotplug
- vývojové nástroje (překladač GCC, make, binutils, Python a další)
- vývojový balík zlib-devel
- vývojový balík python-devel
- vývojový balík libcurl-devel
- balík bridge-utils
- máme-li zájem o dokumentaci, pak LaTeX a transfig
Na webu xen.sf.net, zejména v sekci wiki, je vám k dispozici mnoho užitečných informací včetně návodů. Většinou se týkají verzí z řady 2.0.x.
Twisted (verze min. 1.3), můžete doinstalovat buď balíkovou verzi nebo pomocí make install-twisted, viz níže. Poznámka - vývojové balíky se na různých distribucích mohou jmenovat jinak, základ názvu je ovšem vždy zachován, proto by neměl být problém správné balíky nalézt.
Zdrojové soubory
Aby vůbec bylo co instalovat, musíme si nejdříve stáhnout zdrojové soubory z webu www.XenSource.com. Samotné soubory je také možno stáhnout pomocí wget ze zrcadla:
$ wget http://www.cl.cam.ac.uk/Research/SRG/netos/xen/downloads/xen-2.0.7-src.tgz $ wget http://www.cl.cam.ac.uk/Research/SRG/netos/xen/downloads/xen-2.0.7-src.tgz-md5
Ověříme pravost zdrojového tarballu:
$ md5sum -c xen-2.0.7-src.tgz-md5
Pozn: v souboru xen-2.0.7-src.tgz-md5 je špatně uvedena cesta, samotný hash byl v pořádku, což ovšem v dnešní době, kdy je možné vygenerovat archiv se stejným hashem, nic neznamená.
Tarball rozbalíme a přepneme se do něj:
$ tar xzvf xen-2.0.7-src.tgz $ cd cd xen-2.0
Určitě bychom si jako správní správci měli přečíst soubor README. Dále již můžeme pokračovat jako uživatel root. Pakliže nemáme nainstalované Twisted, můžeme ho nainstalovat následovně: make install-twisted . Nyní zkompilujeme Xen a obě jádra, jedno pro doménu 0, druhé pro jednotlivé linuxové hosty (domény U). K tomu nám slouží cíl world. Zkompilovaný výsledek nainstalujeme klasicky pomocí make install:
# make world # make install
V průběhu prvního make můžeme postřehnout, že dochází ke stažení jádra, které je následně rozbaleno, opatchováno a zkompilováno. Pokud již někde stejnou verzi jádra máme, můžeme ji umístit do aktuálního adresáře a make jej použije. O jakou verzi jádra jde, zjistíme snadno vylistováním obsahu aktuálního adresáře.
Kompilace vlastních jader
Chceme-li si zkompilovat vlastní jádra, pak si nejdříve vyčistíme příkazem make kclean příslušné adresáře.
Následně můžeme do adresářů linux-* vstoupit a spustit si konfiguraci jádra pomocí menuconfig. Pro doménu 0 tak učiníme následovně:
# cd linux-2.6.11-xen0 # make menuconfig ARCH=xen
Linuxové jádro pro doménu U pak konfigurujeme následovně:
# cd linux-2.6.11-xenU # make menuconfig ARCH=xen
Tato doména nepotřebuje ke svému fungování klasické ovladače zařízení (device drivers), proto je její konfigurace jednodušší a rychlejší. Tedy pokud už pro jádro nemáte vlastní konfigurační soubor, pak totiž vám odpadá většina práce a jediné, kam se opravdu musíte podívat, je sekce Xen, která je ovšem malá a intuitivní. Když máme zkonfigurováno, tak se vrátíme do hlavního adresáře Xenu a pustíme kompilaci a instalaci jader:
# cd .. # make kernels # make install-kernels
Konfigurace zavaděče
Nyní přidáme příslušnou položku do grubu. Editujeme soubor /boot/grub/menu.lst, do něhož přidáme následující řádky:
title Xen 2.0.7 / XenLinux 2.6.11 kernel /boot/xen-2.0.gz dom0_mem=131072 module /boot/vmlinuz-2.6-xen0 root=/dev/sda4 ro
První řádek nám říká, jak se bude daná položka v menu jmenovat. Na druhém si pak definujeme použitý kernel (zde však jde o samotný hypervizor Xen) a množství paměti, která bude přiřazeno doméně 0. Na třetím řádku je pak uveden jako modul kernel této domény a oddíl, který bude připojen jako její root (tj. /). Parametr ro značí, že bude připojen jen pro čtení (read-only), dokud si jej systém nepřepojí. Když máme hotovo, můžeme se směle pokusit o reboot a zavedení Xenu.
Instalace Debianu pomocí debootstrap
Instalace Debianu pomocí debootstrap je jednoduchá. Použijeme volný oddíl disku (např. sda5), který jsme si připravili na hostování virtuálních strojů. Swapovat se bude na sda6. Nejdříve na sda5 vytvoříme souborový systém, např. ext3 a na sda6 swap:
# mkfs.ext3 /dev/sda5 # mkswap /dev/sda6
Následně jej připojíme do /mnt:
# mount -t ext3 /dev/sda5 /mnt
A můžeme se směle pustit do instalace. Dejme tomu, že cílem je mít virtuální stroj s Debianem Sarge. Vybereme si tedy nejbližší zrcadlo a spustíme instalaci následujícím způsobem:
# debootstrap --arch i386 sarge /mnt ftp://ftp.sh.cvut.cz/debian
Předchozí příkaz asi nepotřebuje další komentář. Debootstrap začne stahovat, rozbalovat a instalovat nezbytné balíky na určený oddíl disku. Nyní musíme udělat ještě nějaké úpravy, aby nám systém bez problémů nabootoval. Protože zvyk je železná košile a my si nechceme rozvrtat svůj funkční systém, raději se do /mnt chrootneme: chroot /mnt.
Teď už můžeme bez obav upravovat konfigurační soubory tak, jak jsme zvyklí a nemusíme si dávat pozor na cesty. Upravte si tedy následující soubory tak, aby to vyhovovalo vašim požadavkům: /etc/resolv.conf, /etc/network/interfaces, /etc/networks, /etc/fstab (!!!).
Můžete jich upravit více (nebo i méně), ale speciálně na fstab byste neměli zapomenout. Samozřejmě pokud máte někde po ruce živý systém s Linuxem (ideálně Debianem), pak se můžete nechat inspirovat nebo dokonce i použít copy&paste (samozřejmě s rozmyslem). A protože běžící systém bude potřebovat root oddíl, swap a /proc, vystačíte si s následující podobou:
proc /proc proc defaults 0 0 /dev/sda1 / ext3 defaults,errors=remount-ro 0 1 /dev/sda2 none swap sw 0 0
Hostovaný systém máme prakticky připravený, odejdeme z chrootu pomocí exit nebo rychleji klávesovou kombinací [Ctrl+d] a odpojíme oddíl z /mnt: umount /mnt.
Vytvoříme si následující konfigurační soubor (v adresáři /etc/xen, já ovšem preferuji adresář /etc/xen/config, neboť mi to přijde přehlednější) s následujícím obsahem:
kernel = "/boot/vmlinuz-2.6.11-xenU" memory = 64 name = "sarge" nics=1 disk = [ 'phy:sda5,sda1,w', 'phy:sda6,sda2,w' ] root = "/dev/sda1 ro" extra = "2"
Parametr kernel ukazuje na naše zkompilované jádro pro virtuální domény, memory označuje množství vyhrazené paměti pro doménu, name je označení naší domény, pod kterým k ní budeme přistupovat pomocí administrativního nástroje xm, nics je počet virtuálních síťových rozhraní, parametr disk nám říká, že použijeme fyzický oddíl sda5, který bude ve virtuálním stroji viditelný jako sda1 (viz fstab) a bude připojen pro čtení. Co se děje se sda6, si z konfiguračního souboru a fstabu odvoďte sami. root je parametr, který bude předán jádru, aby vědělo, který oddíl má během bootování připojovat jako /, parametr extra nám říká, do jakého runlevelu chceme bootovat. Sami si odhadněte analogii některých parametrů s parametry v lilo či grubu. A teď konečně můžeme nabootovat:
# xm create -c /etc/xen/config/sarge
Parametr -c způsobí, že se konzole rovnou přepne do virtuálního stroje. Bez něj bychom se do něj museli přepnout pomocí xm console sarge. Po nabootování a přihlášení jako root (heslo je prázdné) si spustíme base-config, nástroj, pomocí kterého lze Debian poměrně snadno a rychle nakonfigurovat.
Instalujeme NetBSD
Pro instalaci NetBSD existují dvě různé cesty. Jedna z nich spočívá v možnosti využít patche v distribučním stromu adresáře se zdrojovými soubory Xenu (pro verzi 2.0.7) a kompilovat a instalovat kernel s parametrem KERNELS=netbsd-2.0-xenU. Druhá možnost, kterou si zde popíšeme, spočívá ve stažení přímo instalačního jádra z FTP serveru projektu NetBSD. Instalační a produkční jádra stáhneme následovně:
Díky Xenu se mohou linuxáři pohodlně seznamovat se systémy BSD, aniž by museli své oblíbené prostředí opustit.
$ wget ftp.netbsd.org:/pub/NetBSD-daily/netbsd-3/200512110000Z/ \\ i386/binary/kernel/netbsd-INSTALL_XENU.gz $ wget ftp.netbsd.org:/pub/NetBSD-daily/netbsd-3/200512110000Z/ \\ i386/binary/kernel/netbsd-XENU.gz
Jak je patrné, jde o kernel NetBSD verze 3. Číslo 200512110000Z označuje datum vydání, použijte samozřejmě to nejnovější. Jádra rozbalíme a zkopírujeme do /boot:
# gunzip netbsd-INSTALL_XENU.gz # cp netbsd-INSTALL_XENU /boot # gunzip netbsd-XENU.gz # cp netbsd-XENU /boot
Vytvoříme konfigurační soubor (např. /etc/xen/config/netbsd) bootující instalační jádro, opět se můžete inspirovat následující ukázkou:
kernel = "/boot/netbsd-INSTALL_XENU" memory = 64 name = "netbsd" nics=1 disk = [ 'phy:/dev/sda7,0x3,w'] root = "/dev/wd0d"
Pozn: inspirovat neznamená doslova opsat, přeci jen minimálně řádek disk = se bude lišit. A můžeme klasicky nabootovat a začít instalovat.
Až budete mít nainstalováno, pusťte si ještě z konfiguračního menu shell a proveďte následující operace:
# mount /dev/xbd0a /mnt # cd /mnt/dev # cp -pR /dev/rxbd* . # cp -pR /dev/xbd* .
Tato zařízení totiž z nějakého důvodu nejsou při bootování vytvořena, a tak byste se setkali s chybami typu:
/dev/xbd0a (No such file or directory)Can't stat /dev/xbd0a Can't stat /dev/xbd0a: No such file or directory
Po skončení změňte řádek kernel = tak, aby ukazoval na druhé jádro a můžete si začít užívat své nové NetBSD. Malá poznámka pro NetBSD začátečníky - pokud chcete eliminovat chybová hlášení typu
wsconscfg: /dev/ttyEcfg: Device not configured
zakomentujte v souboru /dev/ttys všechny řádky kromě řádku definujícího konzoli:
console "/usr/libexec/getty Pc" vt100 on secure
a v souboru /etc/wscons.conf zakomentujte všechny řádky začínající screen...
Pár poznámek k instalacím
1.Pokud vás v Linuxu otravují hlášky o TLS, můžete v klidu provést mv /lib/tls /lib/tls.disabled (navíc je to doporučeno a tímto doporučením bychom se měli řídit).
2.Abyste nedostávali hlášení o chybách při vykonávání init skriptů, můžete dotyčné skripty většinou v klidu vypnout. Jedná se převážně stejně o hardwarové záležitosti, které obstarává doména 0.
Nástroj xm
Nástroj xm umožňuje ovládání Xenu přímo z konzole. Můžeme mu předávat různé parametry, vyjmenujme si pro začátek pár nejvýznamnějších:
- create - vytvoří novou doménu U;
- destroy - ukončí běžící doménu ("zabitím");
- list - vypíše seznam běžících domén;
- console - připojí konzoli k zadané doméně;
- help - vypíše nápovědu pro používání xm;
- save - uloží běžící doménu (uloží obraz paměti do souboru);
- restore - "probudí" uloženou doménu.
Xen je ideální nástroj pro podporu výuky - i ve školách, kde je na stanicích nainstalován jiný systém, je možné učit žáky a studenty zacházet s Linuxem. Pomocí Xenu lze velmi jednoduše a levně realizovat workshopy na téma routingu, filtrace paketů apod.
Závěrem...
Ačkoliv se příprava Xenu může jevit jako velmi složitá záležitost, skutečnost je přesně opačná - je to naopak velmi jednoduché. Stačí porozumět relativně jednoduchému principu, podle jakého Xen funguje a pak už získané znalosti využít tím pravým způsobem. V tomto článku nebyly ani zdaleka probírány všechny možnosti, jak Xen nakonfigurovat a jak s ním pracovat, přesto podle něj lze vytvořit virtuální stroje a úspěšně je používat. Zájemci mohou dále nastudovat konfiguraci plánovačů (schedulerů), správu paměti, přístup k hardwaru atd. Na obzoru se navíc rýsuje již funkční Xen 3.0 slibující poměrně značný pokrok.