Gentoo Logo

Konfiguracja Xen w Gentoo

Spis treści:

1.  Wprowadzenie

Xen umożliwia uruchamianie kilku systemów operacyjnych na jednym fizycznym systemie, zarządza zużyciem zasobów i przenosi domeny będące wirtualnymi środowiskami, w których uruchomiony jest system-gość z jednego systemu opartego na Xen do innego. Xen wymaga, by system bazowy wspierał technologię Xen (w przypadku Linuksa należy wkompilować obsługę Xen w jądro systemu), system-gość nie potrzebuje żadnych modyfikacji jeśli posiadany sprzęt wspiera Intel Virtualization Technology (VT-x) lub AMD Virtualization Technology (SVM). W przeciwnym razie system-gość również musi wspierać technologię Xen.

Ten artykuł omawia krok po kroku kolejne etapy konfiguracji Xen do pracy w systemie Gentoo Linux. Nie będzie tu omawiana technologia Xen sama w sobie (projekt Xen ma bowiem dość obszerną dokumentację). Najpierw należy zająć się ustawieniami, które mogą być bardzo interesujące dla poszczególnych instalacji Xen, ale niekoniecznie związane z samym Xen (np. eksportowanie Portage przez protokół NFS, uruchamianie Linuksa przy pomocy PXE, itp.).

2.  Przygotowywanie Domeny0

Wprowadzenie

Domena0 jest główną domeną pod Xen, system operacyjny hosta zarządza wszystkimi innymi domenami. W tym rozdziale omówione zostanie przygotowanie istniejącej instalacji Gentoo do pełnienia roli systemu-hosta w tej domenie i zbudowane jądro oparte na Xen. Po tych zmianach Gentoo będzie gotowe do hostowania innych domen Xen.

Przebudowywanie instalacji Gentoo

Ważną i zwykle konieczną zmianą jest przebudowanie całego Gentoo z innymi ustawieniami CFLAGS. W przeciwnym wypadku systemy uruchamiane pod kontrolą Xen mogą mieć bardzo słabą wydajność. W przypadku gdy chodzi jedynie o przetestowanie platformy Xen można pominąć ten krok. W tym przypadku strata wydajności będzie odczuwalna, ale Xen będzie działać poprawnie.

Ważne: GCC w wersji niższej niż 4 z ustawioną flagą -Os może produkować zepsuty kod.

Listing 2.1: Edycja CFLAGS i przebudowa Gentoo

~# nano -w /etc/make.conf
(Dodać -mno-tls-direct-seg-refs)
CFLAGS="-O2 -march=pentium4 -pipe -mno-tls-direct-seg-refs"

~# emerge -e world

Jeśli system jest uruchamiany z użyciem wewnętrznego ramdysku (initrd), należy też przebudować initrd. Najlepiej zrobić to przechodząc wszystkie kroki związane z przebudową jądra systemu.

Instalacja Xen

Xen zawiera sporo składników, będzie więc potrzebna instalacja kilku pakietów. Ponieważ Xen jest wciąż ~zamaskowany należy dodać odpowiednie wpisy do /etc/portage/package.keywords i dopiero potem zainstalować pakiety.

Listing 2.2: Odmaskowywanie i instalacja Xen

~# nano -w /etc/portage/package.keywords
app-emulation/xen
app-emulation/xen-tools
sys-kernel/xen-sources

~# emerge xen xen-tools xen-sources

Budowanie jądra

Następnie należy zbudować jądro Linuksa wspierające Xen. To jądro, którego źródła są dostępne w /usr/src/linux-2.6.x.z-xen będzie głównym jądrem obsługującym domenę0. W sekcji XEN znajdują się sterowniki dla różnego rodzaju urządzeń wejścia/wyjścia. Każdy sterownik ma dostępne dwa rodzaje implementacji: backend i frontend. Dla jądra domeny0 niezbędna jest implementacja sterowników typu backend: są one używane przez inne domeny (używające sterowników typu frontend) do bezpośredniej komunikacji ze sprzętem.

Oczywiście nie można zapomnieć o wybraniu Xen-compatible w sekcji Processor type and features. Jeśli chodzi o sieć to każdy interfejs w domenie jest bezpośrednio połączony z interfejsem domeny0 (nazywa się vifX.Y gdzie X oznacza numer domeny, a Y kolejny numer interfejsu w domenie). Sieć można skonfigurować wg uznania (mostkowanie, NAT, itp.)

Listing 2.3: Włączanie wsparcia dla Xen w jądrach i386

Processor type and features  --->
      Subarchitecture Type (Xen-compatible)

Listing 2.4: Włączanie wsparcia Xen w jądrach x86_64

Processor type and features  --->
      Subarchitecture Type (PC-compatible)
  [*] Enable Xen compatible kernel

Listing 2.5: Domena-0 Konfiguracja jądra

Bus options (PCI etc.)  --->
  [*] PCI support
  [ ]   Xen PCI Frontend Debugging

Networking  --->
  Networking options  --->
    <*> 802.1d Ethernet Bridging
    Wyłącznie dla sieci wykorzystujących mostki

XEN  --->
  [*] Privileged Guest (domain 0)
  <*> Backend driver support
  <*>   Block-device backend driver
  <*>   Network-device backend driver
  <*>   PCI-device backend driver
           PCI Backend Mode (Virtual PCI) --->
  [*] Scrub memory before freeing it to Xen
  [*] Disable serial port drivers
      Xen version compatibility (3.0.4 and later)

Listing 2.6: Domena-U Konfiguracja jądra

Bus options (PCI etc.)  --->
  [ ] PCI support

Device Drivers  --->
  SCSI device support  --->
    < > SCSI device support
    Wyłączenie obsługi SCSI uwalnia nazwy urządzeń /dev/sd* i umożliwia
    ich wykorzystanie przez wirtualne urządzenia blokowe Xen

XEN  --->
  [ ] Privileged Guest (domain 0)
  <*> Block-device frontend driver
  <*> Network-device frontend driver
  [*] Scrub memory before freeing it to Xen
  [*] Disable serial port drivers
      Xen version compatibility (3.0.4 and later)

Ciekawą opcją jest zmuszenie jądra systemu do przechowywania akcesoryjnych plików obiektowych w innym miejscu. Możliwe jest wtedy użycie tego samego drzewa jądra do zbudowania różnych konfiguracji:

Listing 2.7: Budowanie jądra

~# mkdir -p ~/build/dom0 ~/build/domU
~# make O=~/build/dom0 menuconfig
(Konfigurowanie jądra)
~# make O=~/build/dom0 && make O=~/build/dom0 modules_install

Kiedy jądro zostanie zbudowane, jego obraz znajdzie się natychmiast w katalogu ze źródłami (nie w arch/ ani żadnym innym podkatalogu) pod nazwą vmlinuz. Należy skopiować ten plik do katalogu /boot oraz skonfigurować bootloader do współpracy z Xen hypervisor (jednym z poprzednio zainstalowanych pakietów) zapisanym jako /boot/xen.gz. W konfiguracji bootloadera należy dodać nowo zbudowane jądro. Dla programu GRUB:

Listing 2.8: Konfiguracja GRUB-a dla Xen

title Xen 3.0 / Gentoo Linux 2.6.x.y
root (hd0,0)
kernel /boot/xen.gz
module /boot/kernel-2.6.x.y-xen0 root=/dev/hda3

Teraz należy ponownie uruchomić komputer. Przy każdym uruchomieniu należy załadować usługę Xen:

Listing 2.9: Ładowanie usługi Xen

~# /etc/init.d/xend start

Należy sprawdzić czy możliwe jest wszystko to co na normalnym systemie. Jeśli tak to można ustawić bootloader, by uruchamiał Xen domyślnie oraz dodać usługę Xen do uruchamiania podczas startu systemu.

Uwaga: Jeśli chcemy by domeny-goście startowały automatycznie z systemem należy dodać xendomains do domyślnego poziomu uruchomieniowego oraz utworzyć dowiązanie symboliczne w /etc/xen/auto/ do plików konfiguracyjnych domen Xen, które mają zostać uruchomione.

3.  Tworzenie nieuprzywilejowanej domeny

Budowanie jądra

Należy przejść do katalogu ze źródłami jądra Xen i zaktualizować konfigurację. Dobrym pomysłem jest skonfigurowanie wszystkiego tak jak w głównym jądrze i jedynie dokonanie zmiany implementacji sterowników z backend na frontend. Następnie należy zbudować jądro i umieścić otrzymany plik vmlinuz w odpowiednim miejscu (może to być /mnt/data/xen/kernel):

Listing 3.1: Budowanie jądra systemu-gościa

~# make O=~/build/domU
~# cp ~/build/domU/vmlinuz /mnt/data/xen/kernel/kernel-2.6.x.y-xen

Możliwe jest również zbudowanie pojedynczego jądra zarówno dla domeny administracyjnej jak i dla domeny nieuprzywilejowanej. Więcej informacji na ten temat można znaleźć w manualu Xen.

Creating the Domain Disks

By osiągnąć najlepsze wyniki, doskonałym rozwiązaniem jest przeznaczenie całej partycji (bądź woluminu logiczny) na domenę zamiast systemu plików opartego na pojedynczym pliku. Jeśli jednak Xen ma być używany głównie jako platforma testowa, system plików oparty na pojedynczym pliku ma pewne zalety (głównie w kwestii podtrzymywania).

System plików oparty na pliku można utworzyć używając dd i mke2fs (lub innego dowolnego narzędzia do tworzenia systemu plików). Na przykład, by utworzyć plik o rozmiarze 2GB zawierający system plików ext3:

Listing 3.2: Tworzenie systemu plików opartego na pliku

~# dd if=/dev/zero of=/mnt/data/xen/disks/ext3root.img bs=1M count=2048
~# mke2fs -j /mnt/data/xen/disks/ext3root.img

Konfigurowanie domeny

Następnie należy utworzyć plik konfiguracyjny dla domeny. Można je przechowywać w dowolnym miejscu, przykładowo w /mnt/data/xen/configs. Jako przykład zostanie utworzony plik konfiguracyjny dla małego środowiska opartego na Gentoo korzystającego z uprzednio stworzonego obrazu dysku:

Listing 3.3: Tworzenie pliku konfiguracyjnego dla domeny

~# nano -w /mnt/data/xen/configs/gentoo

kernel = "/mnt/data/xen/kernel/kernel-2.6.x.y-xen"
memory = 512
name   = "gentoo"
(Mapowanie obrazu dysku do wirtualnego /dev/sda1)
disk   = ['file:/mnt/data/xen/disks/ext3root.img,sda1,w']
root   = "/dev/sda1 ro"

Jeśli w użyciu jest urządzenia blokowe (woluminu LVM lub zwykłej partycji) jako dysk należy wpisać 'phy:' zamiast 'file:' oraz opuścić /dev/. Na przykład:

Listing 3.4: Używanie urządzenia blokowego

(Wolumin LVM)
disk = [ 'phy:lvm/xen-guest-root,sda1,w' ]

(Fizyczna partycja)
disk = [ 'phy:sdb6,sda1,w' ]

Przykładowe pliki konfiguracyjne znajdują się w /etc/xen.

Uruchamianie nowej domeny

Możliwe jest teraz uruchomienie nowej domeny. Jeśli obraz dysku zawiera system operacyjny, możemy utworzyć domenę używając polecenia xm (Xen manager):

Listing 3.5: Tworzenie i uruchamianie nowej domeny

~# xm create /mnt/data/xen/configs/gentoo -c

Domena zostanie uruchomiona w terminalu, w którym uruchomiono odpowiednie polecenie. W opisywanym przypadku, obraz dysku jest jednak pusty, więc domena się nie uruchomi. Słowem, jest bezużyteczna. Żeby to naprawić, należy zamontować obraz i zainstalować Gentoo.

Aby rozłączyć się od domeny wystarczy nacisnąć kombinację klawiszy Ctrl+]. Zawsze można jednak połączyć się ponownie z domeną przez konsolę korzystając z polecenia xm console gentoo. Dostępna jest jednak tylko jedna konsola na domenę. Należy używać jej tylko wtedy, gdy niemożliwe jest inne połączenie (na przykład przez protokół SSH).

4.  Sieć w nieuprzywilejowanych domenach

Wprowadzenie

Xen wspiera dwa typy konfiguracji wirtualnych sieci: routowanie oraz mostkowanie.

Jeśli zostanie wybrane routowanie interfejs domeny nieuprzywilejowanej będzie podłączony do wirtualnego interfejsu domeny administracyjnej (domeny0), w której wirtualny interfejs jest połączony z eth0. Interfejs domeny nieuprzywilejowanej powinien mieć adres IP z tej samej sieci co domena administracyjna. Jeśli nie zostaną ustawione odpowiednie zasady routingu, pakiety do tego adresu IP trafią tylko do domeny administracyjnej.

W wypadku, gdy zostanie wybrane mostkowanie, domyślny interfejs w domenie administracyjnej stanie się mostkiem akceptującym połączenia do domen wirtualnych, także do adresu IP domeny administracyjnej.

Regularne interfejsy routowane

Przed ustawieniem interfejsu domeny nieuprzywilejowanej, należy się upewnić czy sterowniki netloop i netbk są załadowane. Wskazówka: jeśli netloop jest skompilowany jako moduł, należy go załadować z opcją nloopbacks=0, co sprawi, że Xen nie będzie tworzył zbędnych interfejsów dla urządzenia loopback. Następnie trzeba wyedytować plik konfiguracyjny domeny i dodać do niego instrukcję vif.

Listing 4.1: Konfiguracja wirtualnego interfejsu

~# nano -w /mnt/data/xen/configs/gentoo

(Dodanie instrukcji vif)
vif    = [ 'ip=192.168.1.101, vifname=veth1' ]

W powyższym przykładzie interfejs jest tworzony dla domeny nieuprzywilejowanej. Będzie się on nazywać eth0) i Xen upewni się czy adres 192.168.1.101 jest osiągalny z domeny administracyjnej za pomocą interfejsu veth1.

To jednak nie znaczy, że wirtualnemu interfejsowi eth0 IP 192.168.1.101 zostanie nadane automatycznie, ale raczej, jeśli nie zostanie mu ono podane, wirtualny interfejs nie połączy się z domeną administracyjną.

Teraz należy wyedytować /etc/xen/xend-config.sxp tak jak poniżej, aby wybrać sieć routowaną:

Listing 4.2: Edycja xend-config.sxp

~# nano -w /etc/xen/xend-config.sxp

(Należy zakomentować poniższe linie)
#(network-script network-bridge)
#(vif-script vif-bridge)

(Włączyć: )
(network-script network-route)
(vif-script vif-route)

Interfejsy mostkowane

W odróżnieniu od interfejsów routowanych należy teraz załadować sterownik netloop z nloopbacks=1 (lub wyższym) jako dodatkowe urządzenie do stworzenia mostka. Dla innych modułów nadal niezbędny jest moduł netbk jako funkcji mostka (moduł bridge powinien być zbudowany).

Teraz należy wyedytować wirtualną domenę i dodać vif:

Listing 4.3: Konfiguracja wirtualnego interfejsu

~# nano -w /mnt/data/xen/configs/gentoo

(Dodanie instrukcji vif)
vif    = [ 'ip=192.168.1.101, vifname=veth0' ]

Następnie należy wyedytować plik /etc/xen/xend-config.sxp, by wyglądał tak jak poniżej, by wybrać mostkowaną konfigurację sieci:

Listing 4.4: Edycja xend-config.sxp

~# nano -w /etc/xen/xend-config.sxp

(Usunięcie komentarza sprzed linii:)
(network-script network-bridge)
(vif-script vif-bridge)

(Zakomentowanie:)
# (network-script network-route)
# (vif-script vif-route)

Domyślnie mostek zawiera tylko interfejs, który został skonfigurowany jako domyślny (ten który jest wymieniony jako domyślny przez ip route list). Aby zmienić to zachowanie, należy wyedytować xend-config.sxp jak poniżej:

Listing 4.5: Edycja xend-config.sxp w celu zmiany konfiguracji mostu

~# nano -w /etc/xen/xend-config.sxp

(Edycja linii network-script)
(network-script 'network-bridge netdev=eth0 bridge=xenbr0 vifnum=0')

Kiedy konfiguracja jest gotowa, należy jeszcze raz uruchomić skrypt xend aby zbudować mostek sieciowy:

Listing 4.6: Restartowanie usługi xend

~# /etc/init.d/xend restart

5.  Inne źródła

Dokumentacja Xen

Narzędzia Xen



Drukuj

Zaktualizowano 11 sierpnia 2008

Oryginalna wersja tego dokumentu została po raz ostatni zaktualizowana 26 grudnia 2011. Jeśli chcesz pomóc w aktualizacji tego dokumentu do najnowszej wersji, skontaktuj się z Łukaszem Damentko, koordynatorem polskiego projektu tłumaczeń dokumentacji Gentoo.

Podsumowanie: Opis użycia technologii Xen w systemie Gentoo Linux.

Sven Vermeulen
Autor

Artur Smęt
Tłumaczenie

Michał Laszuk
Tłumaczenie

Donate to support our development efforts.

Copyright 2001-2012 Gentoo Foundation, Inc. Questions, Comments? Contact us.