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.
Inhalt
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
Es folgen ein paar Screenshots mit den Einstellungen der virtuellen Maschine.
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.
Das vorher heruntergeladene CD-Image wird in die virtuelle Maschine eingebunden. Es folgt eine normale Installation des Ubuntu-Servers.
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.
Die Aufteilung der Festplatten wird später vom Programm installimage
im Rescue-System erledigt. Es bringt nichts, hier groß "herumzupartitionieren".
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.
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.
Damit man den "install"-Benutzer entfernen kann, muss man sich vorher abmelden und als root
wieder anmelden:
deluser install
aptitude update
aptitude full-upgrade
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.
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.
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.
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.
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).
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.
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
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"
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:
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. ;-)
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:
/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.
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
/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).
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.
aptitude install htop iftop jnettop gdisk gnu-fdisk smartmontools
aptitude install rkhunter chkrootkit
aptitude install ubuntu-virt
aptitude install ubuntu-desktop
reboot
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.
apt-add-repository ppa:x2go/stable
aptitude update
aptitude install x2goserver
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.
Beim Konfigurieren der neuen X2Go-Sitzung muss man für den Ubuntu-2D-Desktop folgende Einstellungen berücksichtigen:
gnome-session --session=ubuntu-2d
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:
xfce4-session
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:
startlubuntu
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 ü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.
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.
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
Mit einem rechten Mausklick auf die "localhost (QEMU)"-Zeile öffnet sich das Kontextmenü. Wähle dort "Neu" aus.
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.
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.
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.
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
:-)
Ich programmiere Progressive Web Applications, Mobile Apps, Desktop-Programme und noch vieles mehr. Falls es dich interessiert, findest du mehr Informationen darüber auf meiner Business-Website.