Wechseln zu: Navigation, Inhalt, Suche

Permalink

1

HowTo: JeOS (Ubuntu-Server) in QEMU mit TUN/TAP-Network-Interface installieren und automatisch starten

QEMU ist ein freier Emulator und Virtualisierer, der das parallele Betreiben anderer Betriebssysteme ohne Neustart erlaubt. Dies ist vorallem sinnvoll, um Testumgebungen für andere Betriebssysteme einzurichten oder um die Hardware des Hosts besser auszunutzen.

Ubuntu Home-Server

Als Erstes installieren wir das qemu-Paket

sudo apt-get install qemu

KQEMU

Zum Virtualisierer wird QEMU allerdings erst mit dem Beschleuniger KQEMU. Dadurch wird der Prozessor nicht emuliert, stattdessen werden die Befehle des Gasts direkt auf dem Prozessor des Hosts ausgeführt (wie bei VMware). Der Gast läuft dadurch schneller.

Die kqemu-Pakete installieren

sudo apt-get install kqemu-common kqemu-source

Berechtigungen setzen

sudo mknod /dev/kqemu c 250 0
sudo chmod 666 /dev/kqemu

KVM

Unterstützt der Prozessor des Hosts Hardwarevirtualisierung, kann das Kernelmodul kvm genutzt werden. Eine Installation von kqemu ist dann nicht notwendig. Die virtuelle Maschine läuft dann fast mit der Geschwindigkeit des Hosts. Um herauszufinden, ob der Prozessor Hardwarevirtualisierung unterstützt, muss man in der Datei /proc/cpuinfo schauen, ob dort unter flags entweder der Eintrag vmx oder svm vorhanden ist. Schneller geht dies mit folgendem Befehl

grep -E '^flags.*(vmx|svm)' /proc/cpuinfo

Wenn der Prozessor Hardwarevirtualisierung unterstützt, werden die beiden benötigten Kernel-Module normalerweise automatisch geladen. Dies kann man mit folgendem Befehl prüfen

lsmod | grep kvm

Die Ausgabe sollte dann so aussehen

# Für Intel-Prozessoren
kvm
kvm_intel

# Für AMD-Prozessoren
kvm
kvm_amd

Sollten die Module nicht geladen sein, so muss man dies von Hand nachholen.

Wichtig: Manchmal muss man die Hardwarevirtualisierung im BIOS erst aktivieren. Außerdem muss der aktuelle Benutzer Mitglied der Gruppe "kvm" sein.

Festplatten-Images

Im Home-Verzeichnis einen Ordner für die Festplatten-Images anlegen

cd ~
mkdir qemu-images
cd qemu-images

Ein dynamisch wachsendes Image erstellen

qemu-img create -f qcow2 Ubuntu-Server.img 10G

Wichtig: Wenn KVM verwendet wird muss statt qemu [options] [disk_image] einfach nur kvm [options] [disk_image] benutzt werden.

Den Gast das erste Mal starten und dabei das Festplatten-Image Ubuntu-Server.img und das CD-Image ubuntu-8.10-server-i386.iso einbinden, von CD starten und den Bildschirm per VNC bereitstellen

qemu -hda Ubuntu-Server.img -cdrom ubuntu-8.10-server-i386.iso -boot d -vnc :1

Die virtuelle Maschine ist danach über einen VNC-Client via Port 5901 (5900 + Displaynummer) erreichbar.

Da die IP-Adresse des Rechners, auf dem der Gast läuft bei mir 192.168.178.150 ist, lautet der Befehl wiefolgt

vncviewer 192.168.178.150:5901

JeOS (Ubuntu-Server)-Installation

JeOS Installation (01): Language
JeOS Installation (01): Language

JeOS ist eine Ubuntu-Variante, die für den Einsatz in virtuellen Maschinen optimiert ist. Im Boot-Menü F4 drücken und die Option "Eine minimale virtuelle Maschine installieren" auswählen.

JeOS Installation (02): Optionen
JeOS Installation (02): Optionen

Danach wie gewohnt installieren und beim Punkt "Software auswählen und installieren", Automatische Updates aktivieren

JeOS Installation (03): Automatische Updates
JeOS Installation (03): Automatische Updates

Bei "Softwareauswahl" habe ich "Basic Ubuntu server", "LAMP server" und "OpenSSH server" installiert

JeOS Installation (04): Software Auswahl
JeOS Installation (04): Software Auswahl

Das MySQL-Passwort setzen

JeOS Installation (05): MySQL-Passwort
JeOS Installation (05): MySQL-Passwort

Nachdem die Installation abgeschlossen ist, muss die Maschine neugestartet werden, was allerdings zunächst nicht klappt. Deswegen muss man an der Konsole, an der man den Gast gestartet hat, den Prozess mit Strg+C schließen.

Danach startet man die virtuelle Maschine neu, allerdings diesmal ohne CD-Image

qemu /home/benutzername/qemu-images/Ubuntu-Server.img -vnc :1

Man sollte sich nachdem der Gast hochgefahren ist anmelden und erstmal die aktuellen Updates installieren

sudo apt-get update
sudo apt-get upgrade

Bridging

Bridging ist eine Technik, mit der man zwei Netzwerken zusammenschließen kann. Diese Technik wird hier genutzt, um dem Gast einen uneingeschränkten Netzwerkzugang zur Verfügung zu stellen. Auf die virtuellen Maschinen kann so auch von ausserhalb des Hosts zugeriffen werden.

Dazu wird als erstes auf dem Host das Paket bridge-utils mit dem Virtuelle Bridges erzeugt werden können.

apt-get install bridge-utils

Mit dem Programm brctl prüfen, ob schon Bridges existieren

brctl show
bridge name     bridge id               STP enabled     interfaces

Sollte eine Bridge vorhanden sein, kann diese mit folgendem Befehl gelöscht werden.

brctl delbr pan0

Als Nächstes legen wir eine neue Bridge an

brctl addbr bri0

Prüfen, ob die Bridge angelegt wurde

brctl show
bridge name     bridge id               STP enabled     interfaces
bri0            8000.000000000000       no

Im diesem Beispiel sollen die TUN/TAP-Network-Interfaces zweier virtueller Maschinen an die angelegte Bridge angeschlossen werden. Damit können die virtuellen Maschinen an das Netzwerk Host-Rechners verbunden werden. Die Adresse dieses Netzwerkes ist hier 192.168.1.0.

Zuerst wird der noch laufende Gast per VNC heruntergefahren

sudo shutdown -h now

Als nächstes wird er mit TUN/TAP-Network-Interface auf dem Host neugestartet qemu /home/benutzername/qemu-images/Ubuntu-Server.img -net nic -net tap -vnc :1

Dabei wird im Host-System die virtuelle Netzwerk-Schnittstelle tap0 angelegt. Dies kann mit dem Befehl ifconfig auf dem Host überprüft werden.

ifconfig
eth0 ...
eth1 ...
tap0 ...

Die IP-Adresse der virtuellen Netzwerk-Schnittstelle muss auf dem Host gelöscht werden

ifconfig tap0 0.0.0.0 up

Als Nächstes wir die virtuelle Netzwerk-Schnittstelle der Bridge bri0 zugeordnet

brctl addif bri0 tap0

Die Zuordnung überprüfen

brctl show
bridge name     bridge id               STP enabled     interfaces
bri0            8000.76674ec80764       no              tap0

Die Bridge erhält nun eine freie IP-Adresse im Netzwerk des Hosts

ifconfig bri0 192.168.178.160 up

Nun kann im Gast per VNC eine freie IP-Adressen des Host-Netzwerkes zugeordnet werden

sudo vi /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
    address 192.168.178.151
    netmask 255.255.255.0
    gateway 192.168.178.1

Anschließend wird der Netzwerkdienst des Gasts neugestartet

sudo /etc/init.d/networking restart

Damit auch die Netzwerkkarte des Host-Systems an die Bridge angeschlossen ist, wird die alte IP-Adresse gelöscht und anschließend das Netzwerk-Interface des Hosts der Bridge zugeordnet

ifconfig eth0 0.0.0.0 up && brctl addif bri0 eth1

Damit die Bridge auch nach einem Neustart zur Verfügung steht, wird die Netzwerk-Konfiguration des Hosts angepasst

auto lo
iface lo inet loopback

iface eth0 inet manual

iface eth1 inet manual

auto bri0
iface bri0 inet static
       address 192.168.178.150
       network 192.168.178.0
       netmask 255.255.255.0
       broadcast 192.168.178.255
       gateway 192.168.178.1
       bridge_ports eth1
       bridge_fd 9
       bridge_hello 2
       bridge_maxage 12
       bridge_stp off

Falls keine statische IP-Adresse sondern eine des DHCP-Servers zugewiesen werden soll, muss diese Konfiguration verwendet werden:

auto lo
iface lo inet loopback

iface eth0 inet manual

iface eth1 inet manual

auto bri0
iface bri0 inet dhcp
       bridge_ports eth1
       bridge_fd 9
       bridge_hello 2
       bridge_maxage 12
       bridge_stp off

Anschließend wird der Netzwerkdienst neugestartet

sudo /etc/init.d/networking restart

SSH-Zugang konfigurieren

Man sollte sich nun mit der dem Gast zugewiesenen IP-Adresse 192.168.178.151 dort anmelden können

ssh 192.168.178.151

Zunächst fahren wir den Gast aber per SSH herunter

sudo shutdown -h now

Der Server kann nun ohne grafische Ausgabe gestartet werden, da er per SSH erreichbar ist, zusätzlich wir der Arbeitsspeicher des Gastes auf 192 MB erhöht (Voreinstellung: 128 MB)

qemu /home/benutzername/qemu-images/Ubuntu-Server.img -net nic -net tap -m 192 -localtime -k de -nographic

Nach dem Startvorgang erneut am Gast anmelden

ssh 192.168.178.151

Es empfiehlt sich den OpenSSH-Server noch weiter abzusichern (mit Authentifizierung über öffentliche Schlüssel), wie hier beschrieben.

QEMU in den Systemstart einbinden

Um die virtuellen Maschinen nicht jedes mal von Hand starten zu müssen, empfiehlt es sich ein Start-Skript zu verwenden. Normalerweise reicht es aus folgende Zeilen der Datei /etc/rc.local vor dem Eintrag exit 0 hinzuzufügen.

qemu /home/benutzername/qemu-images/Ubuntu-Online.img -net nic -net tap -m 192 -localtime -k de -nographic &
sleep 2
qemu /home/benutzername/qemu-images/Ubuntu-LAN.img -net nic -net tap -m 192 -localtime -k de -nographic &

Dies startet 2 virtuelle Maschinen mit einem Abstand von 2 Sekunden. Das & bewirkt, dass der Prozess im Hintergrund abläuft und nicht die Konsole blockiert.

1 Kommentar

Schreibe einen Kommentar