Hlavní navigace

Xen na NetBSD 8.0: instalace Linuxu

Petr Topiarz

Minule jsme si ukázali, jak v NetBSD rozpohybovat podporu virtualizace pomocí Xenu. Tentokrát si ukážeme, jak nainstalovat Linux jako PV domU na dva způsoby. Použijeme přitom distribuce CentOS a SUSE Leap.

Doba čtení: 7 minut

Co s Xenem?

prvním dílu miniseriálu jsme si ukázali, jak nainstalovat dom0, čili vrstvu, která umožňuje virtualizaci, a jak na ní nainstalovat virtuální stroj s NetBSD v režimu paravirtualizace. 

Takový typ virtualizace má tak nízký overhead, že výkonově se to dá spíše nazvat izolací procesů, než skutečnou virtualizací. Co ale s ostatními systémy? Linux, OpenBSD, nebo Windows? To je téma dneška.

Není paravirtualizace jako paravirtualizace

Linux se dá spustit klasicky paravirtualizovaně, úplně stejně jako NetBSD. Dodáme externí modifikovaný kernel, který umístíme v prostoru dom0 a ve virtuálním stroji rozběhneme systém. Jako příklad použijeme široce rozšířený CentOS 7.

Kromě toho ale lze Linux spustit se speciálním loaderem nazvaným pygrub a jeho bezpečnější variantou pv-grub. Systém funguje tak, že pygrub začne bootovat a načte si kernel z domU a ten pak zavede. Znamená to, že i v tomto případě je nutné, aby kernel v domU měl podporu pro Xen.

Jedná se tedy stále o PV, nejde o HVM ani o PHVM (o tom více v příštím díle). Tady jsou dva příklady, jeden s kernelem v úložné prostoru domO a druhý s pygrubem a kernelem v prostoru domU.

CentOS 7 s kernelem v dom0

Předpokládáme, že dom0 a síťový bridge máme nastaveno dle prvního dílu. Podobně jako v případě s NetBSD potřebujeme pro Linux dom0, prázdnou image, externí kernel + initrd a konfigurační soubor.

Prázdnou 20G image disku vytvoříme příkazem:

# cd /var/xen
# dd if=/dev/zero of=centos.img bs=1m count=20480

Image kernelu a initrd si stáhneme ze stejného umístění, jaké nastavíme do konfiguračního souboru v příkazu extra, aby nám odpovídala verze kernelu a balíků, jinak instalace selže.

# mkdir -p /var/xen/boot/centos
# cd /var/xen/boot/centos
# wget http://ftp.ciril.fr/pub/linux/centos/7/os/x86_64/images/pxeboot/initrd.img
# wget http://ftp.ciril.fr/pub/linux/centos/7/os/x86_64/images/pxeboot/vmlinuz

Při vytváření konfiguračního souboru, musíme zvláště pozorně vyplnit sekci extra, kde nastavujeme instalační repozitář a následně dočasnou adresu virtuálu::adresu výchozí brány:masku sítě a také nameserver.

# vim /usr/pkg/etc/xen/centos.cfg
name = "CentOS"
memory = "3800"
xen_platform_pci=1
extra = "xencons=tty1"
extra = "ksdevice= inst.repo=http://ftp.ciril.fr/pub/linux/centos/7/os/x86_64 ip=192.168.1.222::192.168.1.1:255.255.255.0:cento7:eth0:none nameserver=8.8.8.8"
vcpus=1
acpi=1
apic=1
vif = [ 'ip=192.168.1.222, mac=00:12:3e:03:9c:56, bridge=bridge0' ]
disk = [ 'file:/var/xen/centos.img,xvda,w' ]
kernel="/var/xen/boot/centos/vmlinuz"
ramdisk="/var/xen/boot/centos/initrd.img"
usbdevice = 'tablet'
sdl=0
opengl=1
vnc=1
stdvga=0
on_reboot = 'restart'
on_crash = 'destroy'

Nyní máme připravený stroj k instalaci a můžeme zatáhnout za páky:

# xl create /usr/pkg/etc/xen/centos.cfg
Parsing config from /usr/pkg/etc/xen/centos.cfg
# xl console CentOS

Následně sledujeme v konzoli start systému, až se nás zeptá, zda zvolíme instalaci textovou nebo grafickou. Pokud zvolíme textovou, můžeme vesele pokračovat v konzoli. Pokud zvolíme grafickou, je třeba připojit se k VNC serveru, který Xen pro náš virtuál spustil

# vncviewer localhost:5900

Pokud potřebujeme přistoupit z jiné stanice, můžeme použít ssh tunel, nebo forwardované X ssh -Y, případně upravit IP, na kterých naslouchá XEN přes /usr/pkg/etc/xen/xend-config.sxp. Pokud máme více strojů se spuštěnou grafikou vnc=1, budou mít port podle pořadí spuštění 5900+N.

Když dokončíme instalaci (v našem případě síťovou, adresa se načte z konfigu), máme plnohodnotný CentOS. Než ho spustíme, musíme změnit konfiguraci. Na rozdíl od NetBSD neměníme kernel (instalační/běhový), ale vše změníme v konfiguračním souboru. Vyhodíme cestu s instalací a přidáme direktivu root=. Při výchozí instalaci bez LVM nalezneme root na /dev/xvda3. Dále je při DHCP lepší vyhodit adresu z  vif=.

# vim /usr/pkg/etc/xen/centos.cfg
name = "CentOS"
memory = "3800"
xen_platform_pci=1
extra = "xencons=tty1"
#extra = "ksdevice= inst.repo=http://ftp.ciril.fr/pub/linux/centos/7/os/x86_64 ip=192.168.1.222::192.168.1.1:255.255.255.0:cento7:eth0:none nameserver=8.8.8.8"
root="/dev/xvda3"
vcpus=1
acpi=1
apic=1
vif = [ 'mac=00:12:3e:03:9c:21, bridge=bridge0' ]
disk = [ 'file:/var/xen/centos.img,xvda,w' ]
kernel="/var/xen/boot/centos/vmlinuz"
ramdisk="/var/xen/boot/centos/initrd.img"
usbdevice = 'tablet'
sdl=0
opengl=1
vnc=1
stdvga=0
on_reboot = 'restart'
on_crash = 'destroy

Nyní můžete systém bezpečně zavést a začít vesele pracovat s virtuálem.

# xl create /usr/pkg/etc/xen/centos.cfg
Parsing config from /usr/pkg/etc/xen/centos.cfg

OpenSUSE Leap s kernelem uvnitř domU

K instalaci si zvolíme Suse Leap 15, který má v jádru dobrou podporu ovladačů pro Xen domU. Nepotřebujeme nic jiného, než instalační CD-ROM image, neboli ISO, které si můžeme stáhnout ze kteréhokoli zrcadla OpenSUSE.

Pro instalaci si napíšeme čistě HVM config, který nám pomůže projít rutinní instalační procedurou. V konfiguračním souboru narazíme na některé věci zřetelně jinak než v PV. Nepoužíváme například vůbec instalační kernel z prostoru dom0 a k pevnému disku přibyla image instalačního CD.

Dále tu tentokrát nemáme konsoli, budeme instalovat přes VNC. Přibyla direktiva boot="d", která znamená, že systém má spustit zaváděcí bloky z CD-ROM. (V podstatě je to stejný systém, jakým vidí písmena disků systém Windows.) A pro start použijeme HVM builder.

# vim /usr/pkg/etc/xen/suse-inst.cfg
builder = "hvm"
name = "suse-inst"
memory = "2048"
vcpus = 1
disk = [ 'file:/var/xen/suse.img,xvda,w',  'file:/var/xen/boot/suse.iso,hdc:cdrom,r' ]
vif = [ 'mac=00:01:3e:03:8a:55,bridge=bridge0,model=e1000' ]
vnc = 1
boot="d"

Poznámka: Kdybyste v konfiguračním souboru jen změnili boot=„d“ na boot=„c“, měli byste konfigurační soubor pro běh HVM, či v případě dobrého kernelu PVHVM, pokud by vám Linux správně nastartoval. Ale nás teď zajímá PV.

Nyní tedy spustíme stroj a připojíme se k němu pomocí VNC forwardovaného přes ssh.

Pokud jsme připojeni přes SSH na dom0, ujistíme se, že v konfiguračním souboru /etc/ssh/sshd.conf máme nastaveno X11Forwarding yes. Počítám pochopitelně s tím, že se nacházíme za firewallem v nějaké DMZ.

Instalaci spustíme následovně:

# xl create /usr/pkg/etc/xen/suse.cfg
Parsing config from /usr/pkg/etc/xen/suse.cfg
# vncviewer :5900

A otevře se nám grafické okno ve VNC, v němž provedeme klasickou instalaci. Po úspěšné instalaci je třeba vytvořit nový konfigurační soubor pro PV spuštění.

# vim /usr/pkg/etc/xen/suse.cfg                                            <
name = "suse"
memory = "2048"
bootloader = '/usr/pkg/bin/pygrub'
xen_platform_pci=1
extra = "xencons=tty1"
vcpus=1
acpi=1
apic=1
vif = [ 'mac=00:01:3e:03:8a:55,bridge=bridge0,model=e1000' ]
disk = [ 'file:/var/xen/suse.img,xvda,w' ]
sdl=0
opengl=1
vnc=1
stdvga=0
on_reboot = 'restart'
on_crash = 'destroy'

Spustíme

# xl create /usr/pkg/etc/xen/suse.cfg
Parsing config from /usr/pkg/etc/xen/suse.cfg
# vncviewer :5900

Poznámky

Spoustu akcí a nastavení, která dělám pro ilustraci by bylo možné řešit jinak, možností jsou opravdu spousty. Např. v případě první instalace by také bylo možné přidat instalační CD a při instalaci zvolit zdroj balíčků: CD-ROM, netřeba dělat jen primární pevné partice atd.

Neudělal jsem to spíše kvůli jednoduchosti. Jen pro zajímavost: pokud se rozhodnete nasadit jako Xen dom0 jiný operační systém, například Linux, bude konfigurace domU a instalační postup velmi podobný, ale musíte počítat s tím, že některá specifika se budou na bázi OS lišit, např. jména disků, nebo specifické direktivy typu zapnutí konzole atd.

Závěr

Ukázali jsme si jak nainstalovat a nastavit a spustit dvě linuxové distribuce v PV modu různým způsobem, jak přidat CD-ROM, nebo další disky. Nejsou to teoretické příklady, oběma způsoby paravirtualizuji už několik let. Běžně instaluji tím prvním, protože někdy bývá s pygrubem/pvgrubem problém. 

MIF18 tip v článku témata

Příklad s pygrubem se hodí, pokud máte systém nainstalovaný např. v KVM nebo VirtualBoxu a chcete ho, přesně tak jak je, spustit v Xenu (stačí překonvertovat image disku na RAW, a zadat UID v konfiguračním souboru), také má jednodušší upgrade. Navíc různé distribuce mají v kernelu zakompilované různé druhy podpory a úrovně podpory pro Xen, takže je možné, že některá půjde spustit jen jedním z uvedených dvou způsobů.

Co dále?

Čeká nás OpenBSD jako PVHVM a Windows jako HVM. A také si něco řekneme o porovnání výkonu PV/PVHM/HVM, které bude v některých ohledech velmi překvapivé.

Našli jste v článku chybu?