Gentoo Logo

Linux-VServer w Gentoo

Spis treści:

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 --->
(Nie zaznaczamy opcji 'legacy')
  [ ] Enable Legacy Kernel API
  [ ] Enable Legacy Networking Kernel API
(Warto przeczytać pomoc dla tych opcji)
  [ ] 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

(Budowanie jądra)
# make
(Instalacja)
# make modules_install
# cp arch/<arch>/boot/bzImage /boot/kernel-<WERSJA_JĄDRA>-vserver-<WERSJA_VSERVER>
(Zmiana konfiguracji bootloadera w razie potrzeby i restart)
# 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 \ (Sposób uruchamiania, można go zmienić jeśli zachodzi taka potrzeba)
  -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)

(Należy to wykonać dla każdego gościa którego chce się uruchamiać na starcie systemu)
# 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

(Synchronizacja metadanych dla 'myguest')
# vesync myguest
(Synchronizacja metadanych dla wszystkich)
# vesync --all
(Synchronizacja nakładki o nazwie "myoverlay" dla wszystkich)
# vesync --all \
  --overlay /usr/local/overlays/myoverlay \
  --overlay-host rsync://rsync.myhost.com/myoverlay \
  --overlay-only
(Instalacja app-editors/vim na 'myguest')
# 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
(Dodanie linijki na koniec pliku)
/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

(Symulacja aktualizacji dla 'myguest')
# vupdateworld myguest -- -vp
(Aktualizacja 'myguest' przy użyciu prekompilowanych pakietów)
# vupdateworld myguest -- -k
(Aktualizacja wszystkich vserwerów przy użyciu prekompilowanych pakietów)
# 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

(Aktualizacja konfiguracji dla 'myguest')
# vdispatch-conf myguest
(Aktualizacja konfiguracji dla wszystkich vserwerów)
# 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.



Drukuj

Zaktualizowano 26 marca 2007

Podsumowanie: Opis instalacji wirtualnych serwerów przy użyciu technologii Linux-Vserver.

Benedikt Boehm
Autor

Shyam Mani
Redakcja

Paweł Kwiatkowski
Tłumaczenie

Piotr Miedzik
Tłumaczenie

Donate to support our development efforts.

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