====== XEN: instalacja usług i dodawanie gości ====== 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. ===== Preliminaria ===== 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. ===== Lekcja 1: Nazewnictwo ===== Aczkolwiek nazwa ma mało wspólnego ze znaną [[https://youtu.be/_dF3VTOcbuo|bohaterką lat 90-tych]], warto zapamiętać, że w obu przypadkach powinno wymawiać się 'X' jako 'z'. Zatem 'zen'. ===== Lekcja 2: Z wielką mocą przychodzi wielka odpowiedzialność ===== 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: - brak obecności; - brak zaliczenia; - rozmowa z Dziekanem na temat przyszłości studiowania na tym wydziale. Aby zalogować się na konto root'a, należy wykonać w terminalu polecenie: sudo su ===== Lekcja 3: Czy nasz sprzęt da radę ===== Xen wspiera (w drobnym uproszczeniu) trzy rodzaje gości: - PV (Paravirtualization) --- goście są świadomi tego, że są tylko gośćmi na maszynie gospodarzy. Nie muszą udawać, że mają prawdziwy sprzęt --- ten typ gości nie wymaga wsparcia sprzętowego dla wirtualizacji. W szczególności mogłoby nawet dojść do tego, że XEN jest zainstalowany na gościu KVM, i posiada gości PV. - HVM (Hardware-Assisted Virtualization) --- tak zwana pełna wirtualizacja. Goście nie są świadomi istnienia gospodarza, trzeba im zatem zapewnić całą infrastrukturę. Wymaga to wsparcia sprzętowego. - PV+HVM --- obie techniki można mieszać, uzyskująć efekt hybrydowy, np. goście HVM mają zainstalowane specjalne sterowniki pozwalające im lepiej pracować w środowisku Xen. Zatem, jeżeli chcemy obsługiwać pełną wirtualizację, musimy sprawdzić czy posiadamy wsparcie sprzętowe. - I metoda (niezalecana): sprawdzić w dokumentacji procesora - II metoda: sprawdzić wyjście komendy: 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'. - III metoda (zalecana): sprawdzić zawartość pliku ''/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? * Podpowiedź 1: proszę posiłkować się narzędziami: ''lscpu'', ''fdisk'', ''free''. * Podpowiedź 2: zanim zaczną Państwo wołać prowadzącego, proszę sprawdzić dokumentację polecenia, np. fdisk --help lub man fdisk ===== Lekcja 4: Konfiguracja sieci ===== Ż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: - NetworkManager (nawet z poziomu GUI), - systemd, - ip, - bridgeutils, - zwykły edytor tekstu. 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: [[pl:dydaktyka:sitw:2016:xen:lab1#Preliminaria:|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 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 , 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? ===== Lekcja 5: Instalacja ===== 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 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. ===== Lekcja 6: konfiguracja domeny gospodarza ===== 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. ==== Pamięć ==== 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? ==== Procesor ==== Chcemy zarezerwować chociaż jeden rdzeń dla naszego dzielnego debiana. Żeby to zrobić, należy wykonać dwa **zadanka**: * w konfiguracji xena, ustawić wartość opcji ''dom0-cpus'' na wartość ''1'' * w konfiguracji gruba, dodać do opcji bootowania xena: * opcję dom0_max_vcpus o wartości 1 * flagę (czyli opcję bez wartości dom0_vcpus_pin) I znowu magiczna komenda, i znowu restart, i znowu trzeba sprawdzić, czy wszystko działa według naszych gustów. ===== Lekcja 7: Instalowanie gości ===== 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: * nazwa hosta: "lab1" * pamięć 512MB * dwa wirtualne procesory * sieć skonfigurowana przez dhcp * dystrybucja debian stretch * zapis obrazu używając lvm, grupy o nazwie ''sitw'' (ostatnia opcja w manualu komendy). * jeśli lvm nie jest skonfigurowane na hoście, proszę zapisać obraz w postaci pliku w katalogu domowym "studenta" 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? ===== Lekcja 8: Sterowanie gośćmi ===== Aby zalogować się na gościa wystarczy użyć komendy: xl console 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. ==== Konfiguracja SSH na gościu ==== - Tworzymy na gościu nowego użytkownika nie-roota (''xl console'' + ''adduser''). - Jako root uruchamiamy ssh (''systemctl start ssh && systemctl enable ssh''). - Jako root sprawdzamy adres ip interfejsu sieciowego (to chyba już umiemy) - Opuszczamy maszynę 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? ==== Wirtualny serwer WWW ==== - Logujemy się na konto root'a na gościu - Instalujemy pakiet ''apache2'' - Uruchamiamy usługę ''apache2'' (znowy ''systemctl'', chyba już Państwo załapali jak to działa?) - Modyfikujemy plik ''/var/www/html/index.html'' - Z poziomu gospodarza uruchamiamy przeglądarkę i oglądamy stronę pod adresem IP gościa. **Pytanie 14:** Czy kolega/żanka z innej grupy też widzi Państwa stronę? ===== Lekcja 9: Sprzątanie ===== **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