Ubuntu 12.04 Linux Installation mit KVM auf Hetzner-Server - Installations-Image erstellen

21.04.2012

Diese Anleitung zeigt, wie man ein eigenes Image für die Installation von Ubuntu 12.04 in der Hetzner Rescue-Konsole erstellt. Der Server soll nach der Installation als KVM-Server (Virtualisierung) dienen. Das erfordert eine etwas komplexere Netzwerkkonfiguration.

Ich verwende für die Erstellung des Installations-Images Oracle VirtualBox, das bei mir auf einem Ubuntu 11.10 Desktop läuft. VirtualBox werde ich hier nicht erklären. Ich gehe davon aus, dass du einen virtuellen Computer mit VirtualBox erstellen kannst. Mein Computer unterstützt Intel-VT. Es handelt sich um einen Intel Core i7 Prozessor. Ideale Bedingungen, da der Server bei Hetzner ebenfalls eine Core i7 CPU hat.

Sobald Hetzner ein eigenes Image für die Installation von Ubuntu 12.04 zur Verfügung stellt, ist diese Anleitung nicht mehr notwendig. Verwende dann einfach das Image von Hetzner.

Und noch etwas: Das hier ist keine Anleitung für Linux-Laien. Bitte selbst Hirn einschalten und Dinge die ich deiner Meinung nach falsch mache bitte besser machen.

Das Installations-Image das ich im Laufe dieses Tutorials erstelle, kannst du gerne verwenden. Denke aber daran, dass das Image am 19. April 2012 erstellt wurde. Es macht keinen Sinn, dieses Installations-Image länger als ein paar Monate (wenn überhaupt) zu benutzen. In dieser Zeit ändert sich doch noch einiges an Ubuntu 12.04. Und Updates könnten evt. Schwierigkeiten bereiten - vielleicht.

So ein Installations-Image ist mit einem schnellen Computer in einer Stunde erstellt (wenn es zu keinen Problemen kommt). Das Hochladen dauerte bei mir eine Stunde (ca. 260 MB). Rechne mit zwei bis drei Stunden.

Installations-CD herunterladen

Derzeit (19.04.2012) ist das aktuelle Installations-Image für den Ubuntu-Server 12.04 LTS auf dieser Seite zu finden: http://cdimages.ubuntu.com/ubuntu-server/daily/current/

Ich wähle für die Installation dieses Image und lade es herunter: http://cdimages.ubuntu.com/ubuntu-server/daily/current/precise-server-amd64.iso

Virtuelle Maschine erstellen

Es folgen ein paar Screenshots mit den Einstellungen der virtuellen Maschine.

01.png

02.png

03.png

04.png

05.png

06.png

Nach dem Erstellen der virtuellen Maschine erhöhe ich die Prozessoranzahl auf zwei Prozessoren. Nur um sicher zu stellen, dass der zukünftige Kernel garantiert mehrere Prozessorkerne unterstützt. Ich weiß nicht ob das notwendig ist, aber schaden wird es wahrscheinlich nicht.

07.png

08.png

Das vorher heruntergeladene CD-Image wird in die virtuelle Maschine eingebunden. Es folgt eine normale Installation des Ubuntu-Servers.

09.png

10.png

11.png

Als Benutzer gebe ich natürlich nicht meinen Namen und mein Passwort an. Es wird ein Installationsbenutzer (Benutzername: "install", Passwort: "install") erstellt, den ich später wieder löschen werde.

12.png

Die Aufteilung der Festplatten wird später vom Programm installimage im Rescue-System erledigt. Es bringt nichts, hier groß "herumzupartitionieren".

13.png

Der SSH-Server ist unbedingt notwendig. Daneben möchte ich den Hetzner Server als KVM-Server verwenden. Deshalb wähle ich im "tasksel"-Fenster auch den Punkt "Virtual Machine host" aus. Das stellt unter anderem sicher, dass das KVM-Kernelmodul installiert und aktiviert wird.

Grub wird in den Master Boot Record installiert.

14.png

Nach der Installation wird der neue Server gestartet. Mit Hilfe des "install"-Benutzers kann man sich anmelden. Mit

sudo su -

wird man zu "root".

Damit man sich später als "root" anmelden kann, muss ein Passwort vergeben werden:

passwd

Ich verwende hier auch das "install"-Passwort.

Server vorbereiten

Install-Benutzer entfernen

Damit man den "install"-Benutzer entfernen kann, muss man sich vorher abmelden und als root wieder anmelden:

deluser install

Updates installieren

aptitude update
aptitude full-upgrade

mdadm und Midnight Commander installieren

mdadm wird für das Software-RAID benötigt. Und den Midnight Commander brauche ich als Editor und Dateimanager:

aptitude install mdadm mc
aptitude clean

Eventuell wird bei der Installation nach einer Konfiguration des Postfix-Servers gefragt. Ich habe "Keine Konfiguration" ausgewählt. Postfix wird später konfiguriert.

Es darf nur einen Kernel geben

Unter http://wiki.hetzner.de/index.php/Eigene_Images_installieren steht, dass nur ein Kernel im /boot-Ordner liegen darf. Folgendes Kommando listet die installierten Kernel-Versionen auf:

aptitude search linux-image-3

Alte Kernel-Versionen kannst du mit folgendem Befehl deinstallieren. Die drei "xxx" musst du natürlich durch die zu deinstallierende Kernelversion ersetzen:

aptitude purge linux-image-3.xxx

Danach würde ich den Server nochmal herunterfahren und neu starten. Wenn alles passt, dann ist der Server für die Erstellung des benötigten TAR-Images bereit.

Install-Image erzeugen

Ich erstelle das Image des Systems direkt aus dem laufenden System heraus. Dazu wechsle ich als "root" in den "/"-Ordner und führe dort folgenden Befehl aus:

tar -cvjf ubuntu-server-image.tar.bz2 --exclude=/dev --exclude=/proc --exclude=/sys /*

Wie unter http://wiki.hetzner.de/index.php/Eigene_Images_installieren erklärt wird, lasse ich "/dev", "/proc" und "/sys" aus.

Jetzt muss das soeben erstellte Installations-Image nur noch aus der virtuellen Maschine raus geholt werden.

Dazu fahre ich die virtuelle Maschine herunter und ändere die Netzwerkeinstellungen der virtuellen Maschine von "NAT" auf "Host-only Adapter". Danach starte ich die Maschine wieder und melde mich an.

15.png

Nach dem Anmelden erfahre ich welche IP-Adresse die virtuelle Maschine vom Host bekommen hat. Falls die IP-Adresse von eth0 doch nicht angezeigt wird, findet man diese mit ifconfig heraus.

16.png

Da auf der virtuellen Maschine SSH installiert wurde, ist es kein Problem vom Host aus mit scp die vorher erstellte Image-Datei zum Host zu kopieren.

Dazu wechsle ich in ein Terminal meines Desktop-Computers (Host).

17.png

Der Befehl zum Kopieren lautet:

scp root@192.168.xxx.xxx:/ubuntu-server-image.tar.bz2 .

Die IP-Adresse muss natürlich die der virtuellen Maschine sein.

Install-Image hochladen

Während ich das hier schreibe, wird die soeben erstellte TAR-BZ2-Datei auf meinen Webserver hochgeladen. Die URL mit der das Image später heruntergeladen werden kann ist http://halvar.at/krimskrams3/linux/hetzner/ubuntu-server-image.tar.bz2

Installation des Images durchführen

Die Installation des Images findet in der Hetzner Rescue-Konsole (ISO-8859-15 Encoding) statt. Nach der Anmeldung als "root" wird installimage ausgeführt:

screen
installimage
--> "custom_image"

Konfigurationsdatei für installimage

Achtung! Diese Einstellungen gelten für 3 GB Festplatten.

Diese Zeilen müssen entsprechend angepasst werden:

HOSTNAME servername

PART /boot ext4 512M
PART / ext4 2764G
PART swap swap all

IMAGE http://halvar.at/krimskrams3/linux/hetzner/ubuntu-server-image.tar.bz2

Das Ergebnis sind drei Partitionen:

  • 512 MiB /boot
  • 2,7 TiB /
  • 30 GiB swap

Folgender Fehler taucht während der Installation auf, aber es scheint trotzdem zu funktionieren: /root/.oldroot/nfs/install/functions.sh: line 1536 [: server: integer expression expected

installimage erstellt das Software-RAID, formatiert die RAID-Partitionen und kopiert das Installations-Image auf die Festplatten. Danach werden die Netzwerkeinstellungen überschrieben. Zusätzlich wird ein neuer SSH-Key erstellt und die mdadm-Konfiguration angepasst. Warum eine RAM-Disk erstellt wird, weiß ich nicht. Interessant ist, dass auch die NTP-Konfiguration angepasst wird.

Nachdem installimage erfolgreich ausgeführt wurde, steht nach einem Neustart mit reboot der neue Server zur Verfügung. Vergiss nicht, gleich nach dem Anmelden an das neue System das root-Passwort zu ändern. ;-)

Netzwerkeinstellungen

Als DNS-Server verwende ich die Google-DNS-Server (8.8.x.x), da ich es nicht besser weiß.

Ich dachte ich brauche eine Bridge mit mehreren IP-Adressen für die einzelnen KVM-Server. Aber laut http://wiki.hetzner.de/index.php/Zusaetzliche_IP-Adressen ist eine Bridge-Konfiguration mit einzelnen IP-Adressen bei Hetzner nicht möglich. Es muss ein geroutetes Netzwerk eingerichtet werden.

Ich habe auch einen IPv6 Adressbereich bei Hetzner beantragt und sofort erhalten. Diesen möchte ich auch gleich aktivieren. Zuerst richte ich mal mein Netzwerk ohne die zusätzlichen IP-Adressen ein und teste ob alles funktioniert.

Wichtige Hinweise für die Netzwerkinstallation findet man unter:

Netzwerkeinstellungen für eine IP-Adresse

/etc/network/interfaces:

# Loopback-Adapter
auto lo
iface lo inet loopback

# eth0
auto eth0

# eth0 IPv4
iface eth0 inet static
    address <HauptIPv4Adresse>
    netmask 255.255.255.255
    gateway <GatewayIPv4Adresse>
    pointopoint <GatewayIPv4Adresse>
    dns-nameservers 8.8.8.8 8.8.4.4

# eth0 IPv6
iface eth0 inet6 static
    address <HauptIPv6Adresse>
    netmask 64
    up ip -6 route add <GatewayIPv6Adresse> dev eth0
    down ip -6 route del <GatewayIPv6Adresse> dev eth0
    up ip -6 route add default via <GatewayIPv6Adresse> dev eth0
    down ip -6 route del default via <GatewayIPv6Adresse> dev eth0

Leider bin ich mir bei der IPv6 Konfiguration total unsicher. Ich weiß nicht wie ich sie testen kann. Von meinem Heimcomputer aus kann ich die IPv6-Adresse nicht pingen. Ich werde mich wohl einlesen müssen.

Weiterleitung der zusätzlichen IP-Adressen aktivieren

Dazu erstelle ich im Ordner /etc/sysctl.d die neue Datei mit dem Namen 10-forwarding.conf:

net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
net.ipv6.conf.all.proxy_ndp = 1

Zusätzliche IP-Adressen für die virtuellen Server hinzufügen

/etc/network/interfaces:

# virbr1
auto virbr1

# virbr1 IPv4
iface virbr1 inet static
    address <HauptIPv4Adresse>
    netmask 255.255.255.255
    bridge_fd 0
    pre-up brctl addbr virbr1

    # <ZusätzlicheIPv4Adresse1>
    up ip route add <ZusätzlicheIPv4Adresse1>/32 dev virbr1
    down ip route del <ZusätzlicheIPv4Adresse1>/32 dev virbr1

    # <ZusätzlicheIPv4Adresse2>
    up ip route add <ZusätzlicheIPv4Adresse2>/32 dev virbr1
    down ip route del <ZusätzlicheIPv4Adresse2>/32 dev virbr1

    # <ZusätzlicheIPv4Adresse3>
    up ip route add <ZusätzlicheIPv4Adresse3>/32 dev virbr1
    down ip route del <ZusätzlicheIPv4Adresse3>/32 dev virbr1

# virbr1 IPv6
iface virbr1 inet6 static
    address <HauptIPv6Adresse>
    netmask 128

    # <ZusätzlicheIPv6Adresse1>
    up ip -6 route add <ZusätzlicheIPv6Adresse1> dev virbr1
    down ip -6 route del <ZusätzlicheIPv6Adresse1> dev virbr1
    up ip -6 neigh add proxy <ZusätzlicheIPv6Adresse1> dev eth0
    down ip -6 neigh del proxy <ZusätzlicheIPv6Adresse1> dev eth0

    # <ZusätzlicheIPv6Adresse2>
    up ip -6 route add <ZusätzlicheIPv6Adresse2> dev virbr1
    down ip -6 route del <ZusätzlicheIPv6Adresse2> dev virbr1
    up ip -6 neigh add proxy <ZusätzlicheIPv6Adresse2> dev eth0
    down ip -6 neigh del proxy <ZusätzlicheIPv6Adresse2> dev eth0

    # <ZusätzlicheIPv6Adresse3>
    up ip -6 route add <ZusätzlicheIPv6Adresse3> dev virbr1
    down ip -6 route del <ZusätzlicheIPv6Adresse3> dev virbr1
    up ip -6 neigh add proxy <ZusätzlicheIPv6Adresse3> dev eth0
    down ip -6 neigh del proxy <ZusätzlicheIPv6Adresse3> dev eth0

Möchte man den Netzwerkzugriff zwischen den virtuellen Computern einschränken, dann muss für jeden virtuellen Computer ein eigenes Bridge-Interface erstellt werden (siehe: http://wiki.hetzner.de/index.php/KVM_mit_Nutzung_aller_IPs_aus_Subnetz). Das habe ich hier nicht gemacht. Hier gibt es nur eine Bridge (virbr1).

Netzwerkkonfiguration der virtuellen KVM Maschinen

Soll die virtuelle Maschine auch außerhalb des Host-Computers erreichbar sein, dann benötigt sie eine eigene IP-Adresse, die du im Hetzner-Robot beantragen musst. Diese zusätzliche IP-Adresse muss in den Netzwerkeinstellungen des Host-Computers (siehe oben) und der virtuellen Maschine eingetragen werden.

Diese Netzwerkeinstellungen sind für die virtuelle Maschine (/etc/network/interfaces):

# eth0
auto eth0

# eth0 IPv4
iface eth0 inet static
    address <IPv4AdresseDerMaschine>
    netmask 255.255.255.255
    gateway <IPv4AdresseDesHosts>
    pointopoint <IPv4AdresseDesHosts>
    dns-nameservers 8.8.8.8 8.8.4.4

# eth0 IPv6
iface eth0 inet6 static
    address <IPv6AdresseDerMaschine>
    netmask 128
    up ip -6 route add <IPv6AdresseDesHosts> dev eth0
    down ip -6 route del <IPv6AdresseDesHosts> dev eth0
    up ip -6 route add default via <IPv6AdresseDesHosts> dev eth0
    down ip -6 route del default via <IPv6AdresseDesHosts> dev eth0

Hier gilt wieder, dass ich mir bei den IPv6-Einstellungen sehr unsicher bin.

Tools, Virtualisierung und Ubuntu-Desktop

aptitude install htop iftop jnettop gdisk gnu-fdisk smartmontools
aptitude install rkhunter chkrootkit
aptitude install ubuntu-virt
aptitude install ubuntu-desktop
reboot

X2Go (GUI Terminalserver)

Mit X2Go kann man den Server über einen grafischen Desktop fernwarten. Es kann jeder Desktop verwendet werden der keine 3D-Unterstützung benötigt. Unity und Gnome3 scheiden also aus. Ich habe mich für Ubuntu-2D (Unity) entschieden, da dieser Desktop während der gesamten Laufzeit des Servers von Ubuntu gewartet wird.

X2Go-Server

apt-add-repository ppa:x2go/stable
aptitude update
aptitude install x2goserver

X2Go-Client

Unter Ubuntu-Linux installiert man den X2Go-Client am einfachsten über die Kommandozeile:

apt-add-repository ppa:x2go/stable
aptitude update
aptitude install x2goclient

Die Installationsdatei für Windows, Mac und andere Linux-Distributionen findest du unter http://www.x2go.org/doku.php/download:start

Sei bitte gewarnt: Über X2Go funktionieren manche Desktop-Umgebungen als root nicht korrekt. Ubuntu-2D funktioniert auch als root (halbwegs), aber arbeiten möchte ich nicht damit. Erstelle über diesen Desktop (als root) einen Admin-Benutzer mit dem du arbeitest.

Ubuntu-2D ist in den letzten Wochen wesentlich stabiler geworden und macht als normaler Benutzer bis jetzt die wenigsten Probleme. Xubuntu und Lubuntu machten bei meinen Tests als root größere Probleme.

Ubuntu-2D Desktop

20.png

Beim Konfigurieren der neuen X2Go-Sitzung muss man für den Ubuntu-2D-Desktop folgende Einstellungen berücksichtigen:

  • Sitzungsart: Andere Desktopumgebung
  • Befehl: gnome-session --session=ubuntu-2d
  • Audiounterstützung: deaktivieren (optional)
  • Clientseitige Druckunterstützung: deaktivieren (optional)
18.png

19.png

Xubuntu (XFCE) Desktop

Falls du Xubuntu/XFCE verwenden möchtest, musst du auf dem Server vorher natürlich Xubuntu installieren.

aptitude install xubuntu-desktop
restart

Die Einstellungen im X2Go-Client für Xubuntu/XFCE sind:

  • Sitzungsart: Andere Desktopumgebung
  • Befehl: xfce4-session
  • Audiounterstützung: deaktivieren (optional)
  • Clientseitige Druckunterstützung: deaktivieren (optional)

Lubuntu (LXDE) Desktop

Falls du Lubuntu verwenden möchtest, musst du auf dem Server vorher natürlich Lubuntu installieren.

aptitude install lubuntu-desktop
restart

Die Einstellungen im X2Go-Client für Lubuntu/LXDE sind:

  • Sitzungsart: Andere Desktopumgebung
  • Befehl: startlubuntu
  • Audiounterstützung: deaktivieren (optional)
  • Clientseitige Druckunterstützung: deaktivieren (optional)

Virtuellen Server (Ubuntu 12.04) installieren

Die erste virtuelle Maschine soll bei mir als Webserver dienen. Wie man den Apachen, FTP, MySQL, usw. installiert und einrichtet, werde ich hier nicht erklären. Mir geht es nur um die Installation der virtuellen Maschine und der Konfiguration des Netzwerkes. Als Betriebssystem nehme ich, wie beim Host, Ubuntu 12.04 Server.

libvirt, libvirtd und virt-manager

libvirt übernimmt im Hintergrund die Verwaltung der virtuellen Maschinen. Dazu läuft auf dem Server der Deamon libvirtd. Damit ein normaler Benutzer virtuelle Maschinen über libvirt verwalten darf, muss man den Benutzer zur Gruppe libvirtd hinzufügen:

adduser <Benutzername> libvirtd

Falls man als dieser Benutzer angemeldet ist, muss man sich abmelden und neu anmelden. Die neu hinzugefügte Gruppe wird ansonsten nicht erkannt.

Zum einfachen Verwalten der virtuellen Maschinen gibt es das GUI-Programm virt-manager, das beim Installieren mit dem Paket ubuntu-virt installiert wurde.

21.png

Speicherpools

Klickt man doppelt auf die Zeile "localhost (QEMU)", kommt man in das Dialogfenster mit dem Titel "Verbindungsoptionen". In der Karteikarte "Speicher" sieht man den "default"-Speicherpool. Das ist bei Ubuntu der Ordner /var/lib/libvirt/images. In diesem Ordner werden später die Festplatten-Images der virtuellen Maschinen abgelegt.

Ich erstelle mir zusätzlich den Speicherpool "cdimages" mit dem Zielpfad /var/lib/libvirt/cdimages in den ich die CD-Images für die Installation der Betriebssysteme ablege. Man erstellt einen neuen Speicherpool durch Klick auf das Plus-Symbol in der linken unteren Ecke.

22.png

Danach muss noch die Berechtigung des Ordners angepasst werden (als root):

cd /var/lib/libvirt
chmod --reference images cdimages

Jetzt wird es Zeit, die Installations-CD für Ubuntu-Server 12.04 herunterzuladen und in den Ordner /var/lib/libvirt/images zu legen (als root):

cd /var/lib/libvirt/cdimages
wget http://cdimages.ubuntu.com/ubuntu-server/daily/current/precise-server-amd64.iso

Erstellen der virtuellen Maschine

Mit einem rechten Mausklick auf die "localhost (QEMU)"-Zeile öffnet sich das Kontextmenü. Wähle dort "Neu" aus.

23.png

Unten sind ein paar Bilder von der Konfiguration der virtuellen Maschine. Achte bitte (in zwei der Bilder) darauf, dass ich als Festplatten-Bus Virtio und bei der Netzwerkschnittstelle den Gerätetyp virtio auswähle. Aktuelle Linux Distributionen unterstützen nativ virtio als schnellst möglichen Zugriff auf die Festplatte und die Netzwerkkarte.

24.png

25.png

26.png

27.png

28.png

29.png

Mit einem Klick auf die Schaltfläche "Installation beginnen" (links oben) wird mit der Installation der virtuellen Maschine losgelegt.

Die Standard-Installation des Ubuntu Server 12.04 kennen wir ja schon vom vorher erstellten Installations-Image.

30.png

31.png

Wie die Netzwerkeinstellungen für eine virtuelle Maschine aussehen müssen, habe ich bereits weiter oben gezeigt. Während der Installation haben wir in den Einstellungen der virtuellen Netzwerkschnittstelle (im virt-manager) nichts geändert und das Quellgerät auf Virtuelles Netzwerk 'default' : NAT gelassen. Nachdem die Netzwerkeinstellungen innerhalb der virtuellen Maschine in der Datei /etc/network/interfaces vorgenommen wurden, muss in den Einstellungen der virtuellen Netzwerkschnittstelle das Quellgerät auf Namen des geteilten Gerätes angeben gesetzt werden. Mit der Einstellung Brücken-Name: legt man das Bridge-Interface des Host-Systems fest, an das die virtuelle Maschine gebunden werden soll. Das wäre bei den oben festgelegten Einstellungen das Interface mit dem Namen virbr1.

32.png

Zum Testen der IPv6-Einstellungen habe ich im Web diese beiden Seiten gefunden:

Ich installiere jetzt den Apachen und die anderen Programme die ich auf meinem Webserver benötige. Aber das ist nicht mehr Teil dieses Erfahrungsberichtes.


Ich hoffe, dass dir das Durchlesen dieses Berichtes in irgend einer Weise geholfen hat und wünsche viel Vergnügen mit dem Installieren deines Servers.

lg Gerold :-)