Installation in Virtuozzo Container

Aus Gentoo Linux Wiki
Wechseln zu: Navigation, Suche

Dieser Artikel beschreibt die Installation von Gentoo Linux in einem Virtuozzo-Container bei einem Server-Provider am Beispiel eines Strato V-PowerServer. Virtuozzo ist eine Virtualisierungslösung auf Basis von OpenVZ, die sehr häufig bei gemieteten virtuellen Servern eingesetzt wird.

Inhaltsverzeichnis

[Bearbeiten] Voraussetzungen

  • Virtueller Server in einem Virtuozzo- oder OpenVZ-Container.
  • Recovery-System, das statt des Standard-Systems gebootet werden kann und Zugriff auf die Daten des echten Systems erlaubt. Der Wechsel zwischen den beiden Systemen sollte relativ einfach über die Web-Oberfläche des Providers durchgeführt werden können, da dieser Wechsel möglicherweise mehrfach durchgeführt werden muss.
  • Diese Anleitung sollte nur auf einem neuen Server ausgeführt werden, auf dem noch keine wichtigen Daten liegen, da dabei sämtliche Daten gelöscht werden.
  • Außerdem setzt diese Anleitung allgemeine Installations-Kenntnisse für Gentoo voraus. Wer noch nie Gentoo installiert hat, sollte sowieso erstmal in einer geschützten Umgebung (z.B. Zuhause oder im Büro) üben.
  • Auch wenn der Provider prinzipiell erlaubt ein anderes System zu installieren, kann man dabei leider meist keinen Support erwarten. Darüber sollte man sich bewusst sein.

[Bearbeiten] Vorbereitung

Schon eine gute Wahl der vorinstallierten Distribution ist wichtig, wie die Erfahrung gezeigt hat. Bei Strato hat man beispielsweise u.a. openSUSE, Ubuntu und CentOS zur Auswahl. Man sollte immer diejenige Distribution wählen, deren Init-System dem von Gentoo möglichst ähnlich ist. Bei den aktuellen (Ende 2010) V-PowerServern hat sich beispielsweise CentOS als gute Wahl herausgestellt, Ubuntu hingegen als schlechte. Der Grund dafür ist, dass die Virtuozzo-Container je nach Distribution teilweise auch etwas anderes konfiguriert sein können.

Bei Strato kann man in der Web-Oberfläche zur Konfiguration des Servers die entsprechende Distribution auswählen und auf Knopfdruck installieren lassen. Danach muss man auf das Recovery-System umstellen, wonach der Server automatisch neu gestartet wird. Danach kann man sich per SSH mit dem auf der Web-Oberfläche angegebenen root-Passwort einloggen.

[Bearbeiten] Installation des Basis-Systems

[Bearbeiten] Stage 3 Installation

Zunächst wechseln wir ins repair-Verzeichnis, wo die bisherige Distribution liegt. Dort sichern wir uns zunächst die Konfiguration des ursprünglichen Distribution in das private-backup-Verzeichnis und löschen den Rest.

# cd /repair cp -R etc private-backup/original/etc find -maxdepth 1 ! -name . -and ! -name private-backup -exec rm -rf {} \;

Danach laden wir das aktuelle stage3- und Portage-Archiv herunter und entpacken beides. Die nachfolgenden Zeilen stellen nur ein Beispiel dar. Bitte selbst auf einem Mirror eine passende aktuelle Version auswählen:

# wget http://...DEIN_MIRROR.../releases/x86/current-stage3/stage3-i686-AKTUELLES_DATUM.tar.bz2 wget http://...DEIN_MIRROR.../releases/snapshots/current/portage-latest.tar.bz2 tar -xvjpf stage3-i686-AKTUELLES_DATUM.tar.bz2 tar -xvjf portage-latest.tar.bz2 -C usr/

Wenn wget nicht vorhanden ist, funktioniert auch 'curl http:\\mirror\stage3-xyz.tar.bz2 > stage3-xyz.tar.bz2'

Bevor wir mit chroot ins neue System wechseln können, müssen wir noch die resolv.conf-Datei aus dem Recovery-System in unser neues System kopieren sowie /proc und /dev mounten:

# cp -L /etc/resolv.conf etc/ mount -t proc none /repair/proc mount --rbind /dev /repair/dev

Nun können wir endlich erstmals per chroot in unser neues System wechseln:

# chroot /repair /bin/bash env-update source /etc/profile

Wenn alles soweit geklappt hat, können wir nun das Portage-Repository auf den aktuellen Stand bringen:

# emerge --sync

Bevor wir weiter machen, sollten wir noch prüfen, ob das richtige Profil ausgewählt ist. Das Standard-Profil (default/linux/x86/10.0) leistet hierbei gute Dienste:

# eselect profile list

Als nächstes sollten wir die Einstellungen in der Datei /etc/make.conf prüfen und gegebenenfalls auf die persönlichen Bedürfnisse anpassen. Die Compiler-Einstellungen sollte man normal so lassen können, wie sie sind, aber je nach Einsatzzweck des Servers sollten gegebenenfalls noch entsprechende USE Flags gesetzt werden:

# nano -w /etc/make.conf

Außerdem sollten die Locale-Einstellungen noch angepasst werden. Für einen Server ist hier en_US.UTF-8 UTF-8 empfehlenswert:

# nano -w /etc/locale.gen locale-gen

Ebenso sollte noch die lokale Zeitzone des Servers konfiguriert werden.

# cp /usr/share/zoneinfo/Europe/Berlin /etc/localtime

[Bearbeiten] Konfiguration des Basis-Systems

[Bearbeiten] Dateisystem

Die Datei /etc/fstab sollte so angepasst werden, wie sie bei der ursprünglich auf dem Server installierten Distribution war:

# nano -w /etc/fstab

Normal sollte man alles auskommentieren können und dafür folgende Zeilen am Ende hinzufügen:

Datei: /etc/fstab
proc                    /proc           proc            defaults        0 0
none                    /dev/pts        devpts          rw              0 0

[Bearbeiten] Netzwerk

In der Datei /etc/conf.d/hostname muss der Hostname konfiguriert werden.

# nano -w /etc/conf.d/hostname

Die Datei sollte am Ende ungefähr so aussehen:

Datei: /etc/conf.d/hostname
# Set to the hostname of this machine
hostname="hostname"

In der Datei /etc/conf.d/net müssen die statischen IP-Adressen des Servers konfiguriert werden. Die IP-Adressen können mit Hilfe des ifconfig-Befehls herausgefunden werden, das benötigte Default-Gateay mit Hilfe von route. Das richtige Interface ist hierbei venet0. Die Nameserver stehen in der Datei /etc/resolv.conf.

# ifconfig route cat /etc/resolv.conf nano -w /etc/conf.d/net

Die Datei sollte am Ende ungefähr so aussehen:

Datei: /etc/conf.d/net
config_venet0=("<IP-Addresse 1>/32"
                   "<IP-Addresse 2>/32") 
 
routes_venet0=("<IP-Addresse 1>/32"
                   "<Default Gateway>/32"
                   "default via <Default Gateway>")
 
dns_servers_venet0="<Nameserver 1> <Nameserver 2>"
 
dns_domain_venet0="domainname.tld"
nis_domain_venet0="domainname.tld"

Außerdem muss das Interface auch in den Init-Prozess eingebunden werden:

# cd /etc/init.d ln -s net.lo net.venet0 rc-update add net.venet0 default

Außerdem sollte die Datei /etc/hosts noch entsprechend erweitert werden.

# nano -w /etc/conf.d/hosts

Die Datei sollte am Ende ungefähr so aussehen:

Datei: /etc/hosts
# /etc/hosts: Local Host Database
#
# This file describes a number of aliases-to-address mappings for the for
# local hosts that share this file.
#
# In the presence of the domain name service or NIS, this file may not be
# consulted at all; see /etc/host.conf for the resolution order.
#
 
# IPv4 and IPv6 localhost aliases
127.0.0.1       localhost
::1             localhost
 
<IP-Adresse 1>  hostname.domainname.tld    hostname

[Bearbeiten] SSH/Login

Damit wir uns nach einem Neustart auch einloggen können, müssen wir den SSH-Daemon noch entsprechend konfigurieren.

# nano -w /etc/ssh/sshd_config

Folgende Optionen sollten mindestens gesetzt sein, damit wir uns mit dem root-Account einloggen können. Dies ist nur für den ersten Test. Später sollten Logins über den root-Account unbedingt abgeschaltet werden und am besten auch auf Key-Authentication umgestellt werden.

Datei: /etc/ssh/sshd_config
Port 22
ListenAddress 0.0.0.0
ListenAddress ::
PermitRootLogin yes         # TODO: Später einen separaten Account anlegen und auf no setzen
PasswordAuthentication yes  # TODO: Später auf Key-Authentication umstellen und auf no setzen
PermitEmptyPasswords no
UsePAM yes

Und schließlich noch den SSH-Daemon in den Init-Prozess einbinden:

# rc-update add sshd default

Natürlich muss auch noch das root-Passwort gesetzt werden, mit dem man sich später einloggen kann.

# passwd

[Bearbeiten] Boot-Konfiguration

Damit der Boot-Prozess reibungslos klappt, müssen in der Datei /etc/rc.conf noch ein paar Einstellungen vorgenommen werden.

# nano -w /etc/rc.conf

Es muss mindestens die folgende Einstellung vorgenommen werden.

Datei: /etc/rc.conf
rc_sys="openvz"

Es ist empfehlenswert, auch noch folgende Einstellungen zu setzen. Alle anderen Einstellungen sollten am besten zunächst auf den Default-Werten belassen werden.

Datei: /etc/rc.conf
rc_parallel="NO"
rc_interactive="NO"
rc_depend_strict="YES"
rc_logger="YES"

Zusätzlich sollten wir in der Datei /etc/inittab noch die nicht benötigten Terminals auskommentieren, da wir die sowieso nicht verwenden können.

# nano -w /etc/inittab

Alles andere in der Datei sollte man so lassen können, wie es standardmäßig ist.

Datei: /etc/inittab
# TERMINALS
#c1:12345:respawn:/sbin/agetty 38400 tty1 linux
#c2:2345:respawn:/sbin/agetty 38400 tty2 linux
#c3:2345:respawn:/sbin/agetty 38400 tty3 linux
#c4:2345:respawn:/sbin/agetty 38400 tty4 linux
#c5:2345:respawn:/sbin/agetty 38400 tty5 linux
#c6:2345:respawn:/sbin/agetty 38400 tty6 linux

[Bearbeiten] Weitere Pakete

Gegebenenfalls können jetzt noch weitere Pakete aus dem Gentoo Handbuch installiert werden.

[Bearbeiten] Logger

Es ist zumindest empfehlenswert, jetzt schon einen Logger (z.B. app-admin/syslog-ng ) zu installieren, um bei Problemen gegebenenfalls schon Logs zu erhalten. Dabei sollte man darauf achten, dass der Logger nicht auf das nicht verfügbare Terminal /dev/tty12 schreiben will, ansonsten werden die Logs mit entsprechenden Warnungen zugemüllt. Bei app-admin/syslog-ng  muss man dazu beispielsweise in der Datei /etc/syslog-ng/syslog-ng.conf folgende Zeilen auskommentieren:

Datei: /etc/syslog-ng/syslog-ng.conf
#destination console_all { file("/dev/tty12"); };
#log { source(src); destination(console_all); };

[Bearbeiten] Abschluss

Zum Abschluss muss der Boot-Modus des Servers über die Web-Oberfläche des Providers zurück umgestellt werden und der Server neu gestartet werden. Der Neustart sollte ebenfalls über die Web-Oberfläche durchgeführt werden.

Mit etwas Glück kann man sich danach per SSH einloggen.

Ansonsten geht es jetzt an die Fehlersuche. Manche Provider wie beispielsweise Strato erlauben es, dass man eine Liste der laufenden Prozesse des Servers über die Web-Oberfläche einsehen kann. Sieht man hier überhaupt keinen Prozess (d.h. nicht einmal den init-Prozess), ist das ein schlechtes Zeichen und man sollte überprüfen, ob sys-apps/sysvinit  korrekt installiert ist und gegebenenfalls eine andere Distribution als Ausgangspunkt wählen. Startet hingegen zumindest der init-Prozess sind wir auf dem richtigen Weg und die Chancen stehen gar nicht schlecht, dass auch irgendwelche Log-Dateien gefüllt sind, beispielsweise /var/log/rc.log, die als Ausgangspunkt für die Fehlersuche dienen können, beispielsweise Fehlermeldungen über die Netzwerk-Konfiguration oder den SSH-Daemon. Um diese Log-Dateien zu lesen, muss natürlich wieder auf das Recovery-System umgestellt und neu gebootet werden.

[Bearbeiten] Sonstige Tipps und Tricks

  • Der Server sollte immer über die Web-Oberfläche des Providers neu gestartet werden, da die Erfahrung gezeigt hat, dass er sonst (manchmal?) nicht mehr selbständig hochfährt. Ist dies passiert, kann er aber wieder über einen Neustart über die Web-Oberfläche des Providers zum Leben erweckt werden.

[Bearbeiten] Links