Celem laboratorium jest zapoznanie się z instalacją i konfiguracją hypervisora Xen. Po zakończeniu laboratorium student powinien rozumieć architekturę, na której oparty jest Xen; potrafić go zainstalować i skonfigurować podstawowe domeny gości.
Jak wszystko na Debianie (jeśli ktoś nie zauważył, pracujemy na Debianie), wymagane programy instalujemy menadżerem paczek apt-get
. Krótka instrukcja obsługi dla niewtajemniczonych:
apt-get install paczka
instaluje paczkę. Kiedy w treści laboratorium pojawi się sformułowanie: instalujemy paczkę 'nazwa paczki', należy użyć apt-get'a.
Aczkolwiek nazwa ma mało wspólnego ze znaną bohaterką lat 90-tych, warto zapamiętać, że w obu przypadkach powinno wymawiać się 'X' jako 'z'. Zatem 'zen'.
W związku z tym, że konfiguracja Xena wymaga licznych uprawnień, będą Państwo pracować na koncie root'a. Mogą Państwo zatem wszystko zepsuć. W razie odczuwania nieodpartej potrzeby psucia (także w przypadku wątpliwości, czy jakaś komenda czegoś nie zepsuje/nie zepsuła) proszę wołać prowadzącego. Za egoistyczne psucie „samemu” zostały obmyślone wyrafinowane kary:
Aby zalogować się na konto root'a, należy wykonać w terminalu polecenie:
sudo su
Xen wspiera (w drobnym uproszczeniu) trzy rodzaje gości:
Zatem, jeżeli chcemy obsługiwać pełną wirtualizację, musimy sprawdzić czy posiadamy wsparcie sprzętowe.
lscpu
w poszukiwaniu sekcji „Wirtualizacja” (ew. angielski odpowiednik). Powinno znajdować się tam informacja, jakie technologie są wspierane, w przypadku procesora marki AMD, szukamy nazwy 'AMD-V'.
/proc/cpuinfo
pod kątem występowania napisów 'vmx' (technologia Intela) lub 'svm' (technologia AMD). Polecamy zastosowanie narzędzi typu grep
, egrep
, etc. Pytanie 1: czy nasz sprzęt wspiera writualizację sprzętową? Jeśli tak, to w jakiej technologii?
Jeśli chodzi o inne wymagania sprzętowe, wiele zależy od typu gości. Dobrze byłoby mieć więcej niż jeden rdzeń, np. po jednym na gościa + gospodarz. Poza tym rozsądnie jest założyć, że gość może zużyć około 512MB RAM'u i jakieś 5GB miejsca na dysku twardym.
Pytanie 2: Czy nasze PC'y wystarczą na spokojne uruchomienie trzech gości?
lscpu
, fdisk
, free
.fdisk --help
lub
man fdisk
Żeby być dobrym gospodarzem, trzeba mieć skonfigurowaną sieć. Xen nie zrobi tego za nas. Potrzebujemy mostka („bridge interface”), który pozwoli nam maszyny gości podpiąć pod fizyczny interfejs sieciowy. Istnieje co najmniej pięć narzędzi potrafiących stworzyć bridge interface:
Mamy to nieszczęście, że Debian wspiera wszystkie z nich. Ze względu na prostotę użyjemy ostatniej metody (nie znaczy najlepszej). Zacznijmy od instalacji pakiety bridge-utils
(patrz: preliminaria). Dzięki temu pakietowi możemy używać nowej komendy brctl
, służącej do kontrolowania istniejących mostków.
Pytanie 3: Ile jest aktualnie mostków w systemie, jak je wyświetlić? Proszę skorzystać z dokumentacji komendy.
Zanim dodamy mostek, musimy sprawdzić jakie fizyczne interfejsy sieciowe istnieją w naszym systemie. Ponownie istnieje na to setka sposobów, ale najprościej jest użyć polecenia:
ip addr show
i znaleźć połączenie posiadające przypisany adres ip.
Pytanie 4: Ile jest fizycznych interfejsów sieciowych w systemie i jak się nazywają?
UWAGA: gdyby ktoś te laboratoria wykonywał przez sesję ssh, niech ma się na baczności. Bardzo łatwo można doprowadzić do zerwania połączenia, więc zawsze trzeba mięć pod ręką inny sposób komunikacji.
Aby dodać mostek, edytujemy plik /etc/network/interfaces
. Aktualnie powinien tam być tylko jeden wpis na temat interfejsu loopback
. Poniżej dopisujemy wpis dotyczący fizycznego interfejsu.
iface <nazwa fizycznego interfejsu sieciowego> inet manual
manual
mówi tyle, że interfejs ten ma mięć ręczny ustawiany adres ip. Robimy tak dlatego, że od teraz to mostek będzie odpowiadał za komunikację i to on będzie korzystał z tego adresu. W tym celu dopisujemy nowy wpis dotyczący interfejsu mostka o wiele mówiącej nazwie xenbr0
:
auto xenbr0 iface xenbr0 inet dhcp bridge_ports <nazwa fizycznego interfejsu sieciowego>
, gdzie nazwa występująca po bridge_ports
mówi, z jakiego interfejsu fizycznego będzie korzystał mostek.
Teraz proszę zrestartować system, np. komendą reboot
.
Pytanie 5: Ile teraz mostków jest w systemie?
Pytanie 6: Proszę ponownie użyć komendy: ip addr show
. Jakie zmiany wystąpiły w połączeniu domyślnym?
Zaczynamy łatwo, proszę zainstalować paczkę xen-hypervisor
.
Teraz zacznie się dziać magia: otóż, Xen to taki trochę system operacyjny pasożyt korzystający z zasobów, sterowników, etc. systemu gospodarza. Żeby mógł się dossać do naszego systemu musimy go uruchomić jak każdy inny system operacyjny — z poziomu menadżera bootowania GRUB. Możemy to zrobić ręcznie wybierając odpowiednią pozycję przy włączaniu komputera, ale w przypadku serwerów to głupi pomysł. W przypadku awarii chcemy, żeby Xen włączył się domyślnie.
Kolejność opcji bootowania określona jest przez nazwy plików w katalogu /etc/grub.d
. Plik o mniejszym numerku na początku ma większy priorytet. Pliki 00_header
i 05_debian_theme
mają największy priorytet, bo to one definiują wygląd menu bootowania. Plik 10_linux
natomiast to nasz poczciwy debian, który ma aktualnie większy priorytet od Xena: 20_linux_xen
. Najprostszym sposobem, żeby to zmienić, to zmienić nazwę na, np. 08_linux_xen
. Problemem byłoby jednak, gdyby ktoś zaktualizował paczkę xen-linux-system
, mogłyby wtedy powstać konflikty. Żeby zmienić nazwę pliku z paczki tak, żeby nie doszło do konfliktów, trzeba użyć narzędzia dpkg-divert
, np.
dpkg-divert --add --rename --divert <nowa ścieżka pliku> <stara ścieżka pliku>
Proszę użyć tego narzędzia, aby zmienić nazwę 20_linux_xen
na 08_linux_xen
. O wyniki operacji proszę się upewnić korzystając z komendy ls
.
Następnie proszę uruchomić komendę:
update-grub
Jest to komenda aktualizująca konfigurację gruba i należy ją wywołać przy każdej zmianie jego konfiguracji.
Teraz ponownie włączamy komputer ponownie. Xen powinien być pierwszą opcją na liście.
Teraz znowu jesteśmy w grze, nie powinniśmy odczuwać żadnej różnicy, ale… nasz poczciwy debian jest teraz jedną z maszyn (domen) Xena! Wyjątkową, bo wyjątkową, ale zawsze. Żeby upewnić się, że Xen działa, możemy zalogować się na konto roota i wykonać kilka komend konsoli xena, np.
xl info
xl list
xl help
xl top
Pytanie 7: Jak się nazywa domena naszego poczciwego Debiana?
Pytanie 8: Do czego służy komenda xl top
?
Zanim przejdziemy do instalacji gości, musimy zadbać o naszego gospodarza. Problemem jest to, że aktualnie gospodarz to zwykła domena, która będzie musiała współdzielić zasoby z innymi gośćmi. W szczególnym przypadku może zabraknąć zasobów dla gospodarza. Dlatego też musimy zarezerwować dla niego trochę pamięci i czasu procesora.
Plik konfiguracji Xena: /etc/xen/xend-config.sxp
ma lisp'ową składnię, tzn. żeby ustawić opcję o nazwie opcja
na wartość wartość
, należy w nim wpisać linijkę:
(opcja wartość)
Interesują nas dwie opcje:
dom0-min-mem
, której wartość to ram (w megabajtach) zarezerwowany dla domeny gospodarza.enable-dom0-ballooning
, której wartość to boolean (yes/no), oznaczający, czy Xen może pożyczać pamięć od domeny gospodarza dla innych gości.Zadanie 1: Proszę, używając pliku konfiguracyjnego, zarezerwować dla gospodarza jeden gigabajt ramu i zabronić Xenowi pożyczania pamięci.
Plik konfiguracji gruba: /etc/default/grub
zawiera domyślne opcje bootowania. W szczególności można w nim przekazać dodatkowe argumenty w zmiennej GRUB_CMDLINE_XEN
, np.
GRUB_CMDLINE_XEN="opcja1=wartosc opcja2=wartosc flaga"
Aby zarezerwować pamięć dla domeny gospodarza, trzeba ustawić opcję bootowania Xena o nazwie „dom0_mem” na wartość odpowiadającą rezerwowanej pamięci, np. „512M” (zachęcam jednak, by użyć wyższej wartości).
Zadanie 2: Proszę wpisać odpowiednie wartości w pliku konfiguracyjnym gruba. Następnie zrestartować system i sprawdzić, czy zmiany rzeczywiście zostały wprowadzone.
Pytanie 9: Czy pamiętaliście o wywołaniu komendy, która zawsze trzeba wywołać przy zmianie konfiguracji gruba?
Chcemy zarezerwować chociaż jeden rdzeń dla naszego dzielnego debiana. Żeby to zrobić, należy wykonać dwa zadanka:
dom0-cpus
na wartość 1
I znowu magiczna komenda, i znowu restart, i znowu trzeba sprawdzić, czy wszystko działa według naszych gustów.
Dobra, zbliżamy się do meritum. Żeby stworzyć domenę „gościa”, wystarczy użyć komendy:
xl create <ścieżka do pliku konfiguracji gościa>
Rzecz się wydaje prosta, ale brakuje nam pliku konfiguracji maszyny. Moglibyśmy stworzyć własny na podstawie dokumentacji i plików przykładowych: /etc/xen/xlexample.hvm
oraz /etc/xen/xlexample,pvlinux
, ale spróbujmy zrobić to prościej.
Zacznijmy od zainstowania pakietu xen-tools
. Zawiera on kilka narzędzi, nas zainteresuje w szczególności jedno: xen-create-image
.
Zadanie 3: Korzystające z dokumentacji tego polecenia, proszę stworzyć obraz spełniający dane warunki:
sitw
(ostatnia opcja w manualu komendy). Narzędzie pobiera i konfiguruje dla Państwa świeżą instalacje debiana, proszę spędzić 5 minut na lekturze internetu, co to jest lvm. Lub innych konstruktywnych zajęciach.
Pytanie 11: Jakie jest hasło root'a utworzonej maszyny?
Po udanym utworzeniu obrazu gościa, trzeba uruchomić maszynę. Jej plik konfiguracyjny znajduje się w /etc/xen
. Proszę użyć komendy xl create
do uruchomienia maszyny.
Pytanie 12: Jaki jest teraz wynik komendy xl list
.
Pytanie 13: Ile istnieje teraz interfejsów sieciowych na gospodarzu?
Aby zalogować się na gościa wystarczy użyć komendy:
xl console <nazwa gościa>
Mam nadzieję, że pamiętają Państwo hasło roota… Jeżeli uda się Państwu zalogować na maszynę, konsolę można opuścić używając skrótu CTRL+]
.
Istnieją oczywiście inne metody logowania do maszyny gościa. Spróbujmy zalogować się na niego przez ssh i stworzyć na nim jakąś usługę, żeby nie czuł się bezużyteczny.
xl console
+ adduser
).systemctl start ssh && systemctl enable ssh
).Teraz wystarczy zalogować się poprzez ssh używając nowo stworzonego użytkownika na podanym adresie.
ssh user@adres
Pytanie 13: Czy kolega/żanka z innej grupy też może zalogować się przez ssh na Państwa gościa?
apache2
apache2
(znowy systemctl
, chyba już Państwo załapali jak to działa?)/var/www/html/index.html
Pytanie 14: Czy kolega/żanka z innej grupy też widzi Państwa stronę?
Zadanie 4: Zatrzymać gościa jednym z poleceń 'xl'.
Zadanie 5: Usunąć obraz gościa poleceniem xen-delete-image
Teraz trzeba tylko przygotować komputer na przybycie kolejnej grupy laboratoryjnej. W tym celu, proszę uruchomić, jako root, komendę:
wget -O lab_1_clean.tar.gz https://ai.ia.agh.edu.pl/wiki/_media/pl:dydaktyka:sitw:2016:xen:lab_1_clean.tar.gz && tar xf lab_1_clean.tar.gz && cd lab_1_clean && ./clean_xen_lab1.sh && cd .. && rm -rf lab_1_clean.tar.gz && rm -rf lab_1_clean
Następnie proszę uruchomić komputer ponownie, tym razem bez Xena i zaktualizować konfigurację gruba:
update-grub