Linux-VServer w Gentoo
1.
Wprowadzenie
Koncepcja Linux-VServer
Linux-VServer pozwala na rozdzielenie przestrzeni użytkownika na jednostki, z
których każda jest osobnym serwerem dla procesów, które są w niej zawarte.
Pojęcia użyte w tym przewodniku
| Termin |
Opis |
| Linux-VServer, VServer |
Linux-VSerwer to oficjalna nazwa projektu i jest używana w tym przewodniku
dokładnie w tym znaczeniu
|
| vserwer, wirtualny serwer, gość |
Wszystkie te terminy odnoszą się do pojedynczej instancji serwera (tj.
jednego serwera wirtualnego)
|
| komputer host, host |
Komputer, na którym zainstalowany jest Gentoo Linux i na którym będą
znajdować się wszystkie wirtualne serwery
|
| util-vserver |
Pakiet util-vserver zawiera wszystkie programy potrzebne do
zarządzania serwerami wirtualnymi
|
2.
Konfiguracja hosta
Instalacja jądra wspierającego VServer
Listing 2.1: Instalacja vserver-sources |
# emerge vserver-sources
|
Po instalacji źródeł vserver-sources należy je skonfigurować przy użyciu make
menuconfig. Poniżej znajduje się standardowa konfiguracja dla wersji 2.1.1
oraz wyższych. W wersjach 2.0.x niektóre opcje konfiguracji mogą być
niedostępne.
Listing 2.2: Konfiguracja vserver-sources |
# cd /usr/src/linux-<WERSJA_JĄDRA>-vserver-<WERSJA_VSERVER>
# make menuconfig
Linux VServer --->
[ ] Enable Legacy Kernel API
[ ] Enable Legacy Networking Kernel API
[ ] Remap Source IP Address
[*] Enable COW Immutable Link Breaking
[ ] Enable Virtualized Guest Time
[*] Enable Proc Security
[*] Enable Hard CPU Limits
[*] Avoid idle CPUs by skipping Time
[*] Limit the IDLE task
Persistent Inode Tagging (UID24/GID24) --->
[ ] Tag NFSD User Auth and Files
[*] Enable Inode Tag Propagation
[*] Honor Privacy Aspects of Guests
[ ] VServer Debugging Code
|
Uwaga:
Jeśli korzysta się z reiserfs jako systemu plików, na którym będą przechowywane
obrazy, należy w jądrze uaktywnić opcję "Extended attributes for reiserfs" czyli
rozszerzone funkcje reiserfs oraz dodać opcję attrs do pliku
/etc/fstab.
|
Listing 2.3: Konfiguracja opcji reiserfs |
File systems --->
<*> Reiserfs support
[*] ReiserFS extended attributes
|
Listing 2.4: Przykład wpisu w fstab z atrybutami rozszerzonymi |
/dev/hdb1 /vservers reiserfs noatime,attrs 0 0
|
Po zbudowaniu jądra należy uaktualnić konfigurację programu ładującego, a
następnie ponownie uruchomić system i sprawdzić czy startuje poprawnie.
Listing 2.5: Instalacja jądra |
# make
# make modules_install
# cp arch/<arch>/boot/bzImage /boot/kernel-<WERSJA_JĄDRA>-vserver-<WERSJA_VSERVER>
# reboot
|
Konfiguracja na komputerze host
Aby zarządzać serwerami wirtualnymi, należy zainstalować pakiet util-vserwer,
który zawiera wszystkie niezbędne programy.
Listing 2.6: Instalacja util-vserver |
# emerge >=sys-cluster/util-vserver-0.30.212
|
W celu zapewnienia odpowiednich praw dostępu do systemu plików
/proc, po każdym ponownym uruchomieniu komputera trzeba będzie
wykonać polecenie vprocunhide. Aby to zautomatyzować, należy dodać
skrypty vservera do domyślnego poziomu uruchamiania.
Listing 2.7: Skrypty startowe util-vserver |
# rc-update add vprocunhide default
# /etc/init.d/vprocunhide start
# rc-update add util-vserver default
# /etc/init.d/util-vserver start
|
3.
Tworzenie szkieletu
Pobranie gotowych stage3/4
Wiele poleceń związanych ze sprzętem jest niedostępnych wewnątrz wirtualnego
serwera. Dlatego kiedyś powstała specjalna, poprawiona wersja pakietu baselayout
o nazwie baselayout-vserver. Obecnie, konkretnie od wersji
baselayout-1.13.0_alpha12, wszystkie potrzebne zmiany zostały wprowadzone do
standardowego baselayout, a co za tym idzie nie są już potrzebne osobne pliki
stage, profile ani osobny pakiet baselayout. Jedynym minusem jest to, że
baselayout-1.13 został dodany do stage będącego dopiero w wersji alpha i nie ma
możliwości pobrania go z serwerów lustrzanych.
Gdy baselayout-1.13 zostanie ustabilizowany, będzie można używać plików stage3/4
z jednego z serwerów lustrzanych. Zanim
jednak to się stanie, wciąż trzeba pobierać stage3/4 z tego miejsca. W
związku z tym, że stage3/4 zawiera kompletne drzewo plików, można użyć metody
budowania z szablonów. Jednakże ta metoda jest dostępna dopiero od
util-vserver-0.30.213_rc5, należy więc sprawdzić zainstalowaną wersję.
Należy wybrać identyfikator kontekstowy dla vserwera (odradzamy używanie
dynamicznych identyfikatorów) oraz potrzebne informacje o urządzeniu sieciowym
(w tym przykładzie eth0 zostało skonfigurowane jako 192.168.1.253/24, a
identyfikator jest odpowiedni dla ostatnich dwóch części adresu IP serwera
wirtualnego).
Uwaga:
Identyfikator powinien zawierać się w przedziale 1-49152.
|
Metoda budowy z szablonów
Przez długi czas zwykły styl uruchamiania był jedynym dostępnym. Na każdym z
gości był uruchamiany osobny proces init, tak jak na każdym innym uniksowym
systemie. Takie podejście miało jednak kilka wad:
-
Nie było możliwości przejrzenia informacji dotyczących uruchamiania skryptów
init/rc
-
Marnowały się zasoby dla każdego procesu init w każdym wirtualnym serwerze
- Pojawiały się denerwujące konflikty o plik /etc/inittab
Z tego powodu wielu użytkowników prosiło o ponowną implementację systemu
uruchamiania z Gentoo, która została zarzucona z powodu konieczności dodawania
ogromnej liczby poprawek działających mniej lub bardziej sprawnie oraz dużych
modyfikacji w baselayout. Jednak od wersji util-vserver-0.30.212 sposób
uruchamiania typowy dla Gentoo został ponownie zaimplementowany i w przyszłości
znów stanie się domyślną opcją.
Uwaga:
Użytkownicy, którzy nie chcą korzystać z osobnych procesów init dla każdego
gościa lub tacy, którzy po prostu nie wiedzą co wybrać, powinni zaznaczyć sposób
uruchamiania typowy dla Gentoo.
|
Listing 3.1: Rozpoczęcie instalacji stage3 |
# vserver myguest build \
--context 1253 \
--hostname gentoo \
--interface eth0:192.168.1.253/24 \
--initstyle gentoo \
-m template -- \
-d gentoo \
-t /path/to/stage4-<arch>-<version>.tar.bz2
|
Uwaga:
Następnie należy odpowiednio skonfigurować sieć poprzez zmianę plików
/etc/conf.d/hostname, /etc/conf.d/domainname oraz
/etc/hosts. Należy to zrobić na każdym gościu. Szczegóły
konfiguracji są opisane w
rozdziale 8.b.1 oraz
rozdziale 8.b.4 Podręcznika Gentoo. Pozostała część konfiguracji sieci dla
wirtualnych serwerów zostanie przeprowadzona na komputerze host.
|
Teraz można sprawdzić działanie serwera wirtualnego używając poleceń podanych
poniżej.
Listing 3.2: Testowanie serwera wirtualnego |
# vserver myguest start
Gentoo/Linux 1.13.0_alpha12; http://www.gentoo.org/
Copyright 1999-2007 Gentoo Foundation; Distributed under the GPLv2
Press I to enter interactive boot mode
* Using existing device nodes in /dev [ ok ]
* root filesystem is mounted read-write - skipping
* Checking all filesystems [ ok ]
* Mounting local filesystems [ ok ]
* Activating (possible) swap [ ok ]
* Setting hostname to myguest [ ok ]
* Updating environment [ ok ]
* Cleaning /var/lock, /var/run [ ok ]
* Cleaning /tmp directory [ ok ]
* Initializing random number generator [ ok ]
* Setting system clock using the hardware clock [VPS] [ ok ]
* Starting syslog-ng [ ok ]
* Starting vixie-cron [ ok ]
* Starting local [ ok ]
# vserver-stat
CTX PROC VSZ RSS userTIME sysTIME UPTIME NAME
0 90 1.4G 153.4K 14m00s11 6m45s17 2h59m59 root server
1252 2 3M 286 0m00s45 0m00s42 0m02s91 myguest
# vserver myguest enter
# ps ax
PID TTY STAT TIME COMMAND
1 ? S 0:00 init [3]
22887 ? Ss 0:00 /usr/sbin/syslog-ng
20496 pts/0 S 0:00 /bin/bash -login
20508 pts/0 R+ 0:00 ps ax
# logout
|
4.
Zarządzanie staje się prostsze
Uruchamianie gości razem z systemem
Każdy vserwer może zostać uruchomiony w trakcie ładowania systemu poprzez
oznaczenie go [ang. MARK]. W tym celu wystarczy tylko ustawić je w
konfiguracjach poszczególnych gości oraz dodać odpowiedni skrypt startowy do
domyślnego poziomu uruchamiania.
Listing 4.1: Konfiguracja oznaczeń (MARK) |
# mkdir -p /etc/vservers/myguest/apps/init
# echo "default" > /etc/vservers/myguest/apps/init/mark
|
Listing 4.2: Dodawanie skryptu startowego |
# rc-update add vservers.default default
|
Utrzymywanie zsynchronizowanego drzewa Portage
Skrypt vesync pozwala na łatwą aktualizację wszystkich nakładek (ang.
overlay) oraz metadanych. Skrypt vemerge jest prostą nakładką (ang.
wrapper) na emerge do użytku wewnątrz wirtualnych serwerów.
Listing 4.3: Przykłady |
# vesync myguest
# vesync --all
# vesync --all \
--overlay /usr/local/overlays/myoverlay \
--overlay-host rsync://rsync.myhost.com/myoverlay \
--overlay-only
# vemerge myguest -- app-editors/vim -va
|
Aktualizacja gości
Każdy gość Gentoo może współdzielić pakiety w celu skrócenia czasu
kompilacji. W tym celu należy stworzyć katalog na pakiety na komputerze hoście.
W przykładzie tym katalogiem będzie /var/cache/vpackages i zostanie
on zamontowany do /usr/portage/packages na każdym vserverze.
Listing 4.4: Dodawanie powiązanego (ang. bind) udziału do konfiguracji vserwera |
# mkdir -p /var/cache/vpackages
# $EDITOR /etc/vservers/myguest/fstab
/var/cache/vpackages /usr/portage/packages none bind,rw 0 0
|
Na koniec należy użyć vupdateworld do aktualizacji każdego vserwera.
Polecenie to jest odpowiednikiem emerge --deep --update --newuse world
wraz z dodatkowymi opcjami.
Listing 4.5: przykłady z vupdateworld |
# vupdateworld myguest -- -vp
# vupdateworld myguest -- -k
# vupdateworld --all -- -k
|
Uwaga:
Korzystanie z prekompilowanych pakietów jest możliwe po ustawieniu zmiennej
PORTAGE_BINHOST w każdym gościu (szczegóły w man make.conf) oraz
zmiennej FEATURES="buildpkg" przynajmniej w jednym.
|
Po udanej aktualizacji pakietów można łatwo zaktualizować wszystkie konfiguracje
za pomocą vdispatch-conf. Jest to nakładka na dispatch-conf i
identycznie się zachowuje.
Listing 4.6: przykłady z vdispatch-conf |
# vdispatch-conf myguest
# vdispatch-conf --all
|
Kontakt
W przypadku wystąpienia jakichkolwiek problemów, należy skontaktować się z autorem tego tekstu lub zgłosić problem na Bugzilli.
Materiał udostępniany na podstawie licencji Creative Commons -
Attribution / Share Alike.
|