User Mode Linux
ist ein virtuelles Linux, das als zweites System in einem Linux läuft. Das eröffnet viele Möglichkeiten:
mal mit einem anderen Linux herumspielen, Sandbox oder Jail - Prozesse die unter UML laufen haben keinen Zugriff auf das Hostsystem, ein Netzwerk mit nur einem Computer simulieren...
In meinem Fall benötigte ich einen zusätzlichen Rechner, der zum booten von Diskless-Clienten mit älteren PXE-Netzwerkkarten den Dienst tftpd mit eingeschänkten Netzwerkdiensten zur Verfügung stellt. Für diese kleine Aufgabe einen eigenen Rechner bereitzustellen, das wäre reine Hardware-Verschwendung und unnötiger Stromverbrauch. So kam mir die Idee, einen Rechner im Rechner aufzusetzen.
Erste Erfahrungen mit User Mode Linux (UML) bekam ich durch das c't-Debian-Server Projekt. In diesem Projekt wird eine Firewall (IPCOP) die sonst nur auf einen eigenen Rechner läuft, auf einem Server in einer virtuellen Maschine bereitgestellt.
Dieses HOWTO beschreibt Schritt für Schritt, wie man unter Debian ein User Mode Linux (UML) installiert.
Veraussetzung ist ein lauffähiges Debian-System mit ca 600 MB freien Festpattenspeicher. Um schnell zum Erfolg (Zeitaufwand ca 1 Stunde) zu kommen, benutze ich die offiziellen Paketquellen von Debian und die vom Heise-Verlag bereitgestellten Paketquellen für den c't-Debian-Server. Heise hat einem so viel Arbeit erspart, man muß keinen Kernel kompilieren und keine Skripte schreiben.
Vorbereitung des Wirtsystem
Damit alle nötigen Pakete nachinstalliert werden können, wird unter /etc/apt die sources.list geändert.
Zitatdeb http://www.heise.de/ct/ftp/projekte/vdr4 experimental/
deb http://www.heise.de/ct/ftp/projekte/srv binary/
deb ftp://ftp.heise.de/pub/ct/projekte/srv binary/
deb http://ftp.de.debian.org/debian/ stable main
ausführen,damit die Paketquellen wirksam sind.
Wer die ct-spezial Netzwerke CD besitzt kann diese alternativ für den online-download benutzen und sollte sie in die sources.list eintragen.
Damit es später keine Probleme mit dem UML gibt, benötigt das Wirtsystem einen Kernel mit skas-Patch (separiert die Adressräume von UML-Prozessen und bringt Performance-Verbesserungen). Diese Kernel´s gibt es fertig kompiliert und sind auch VDR tauglich.
Jetzt sollte man das System mit dem neuen Kernel starten.
Einrichten einer UML-Umgebung
Als nächstes werden alle Pakete die für eine UML Umgebung notwendig sind installiert
Als Erstes erstellt man die virtuellen Festplatten in Form einer Datei mit dem passenden ext3-Image. Es wird ein minimales, lauffähiges Debian zusammen gestellt. Dieser Vorgang kann je nach Rechnergeschwindigkeit einen Moment dauern.
Es wird eine 256 MB große Image-Datei im Verzeichnis /var/lib/uml/.images erstellt.
Danach wird der Befehl
eingegeben.
Jetzt wird die eigentliche UML Infrastruktur erzeugt. Das Skript legt einen User namens virtuellserver (frei wählbar) an und erstellt sein Home-Verzeichnis /var/lib/uml/virtuellserver. Dies enthält alles, was für eine UML Umgebung benötigt wird. Die UML-Instanz erhält die eigene IP Adresse 192.168.1.14 (frei wählbar, nicht die des Wirtsystem) und wird an die bridge br0 gebunden. So ist der virtuelle Rechner mit eigene IP Adresse über die gleiche pysikalische Netzwerkkarte des Wirtsystem erreichbar.
Um weitere Änderungen vorzunehmen, kann man das Image mit
ins Dateisystem einhängen.
Mit
wechselt man in die UML-Umbebung.
Die UML-Umbebung kann man mit
wieder verlassen.
Danach sollte man auch das Image mit
wieder freigeben.
Jetzt muß noch das Netzwerk des Wirtsystem für die UML-Umbebung angepasst werden. Die Datei /etc/network/interfaces wird nun so umgeschrieben. (Eine Sicherung der alten Datei sollte man vornehmen, um gegebenenfalls den alten Zustand des Netzwerks wieder herstellen zu können.)
# The loopback network interface
auto lo
iface lo inet loopback
#These interfaces are brought up automatically
auto tap0 eth0 br0
iface eth0 inet manual
up ifconfig eth0 0.0.0.0 promisc up
iface tap0 inet manual
## Hier kommt der Namen der UML Umgebung hinein, in diesem Beispiel: virtuellserver
pre-up tunctl -u virtuellserver -t tap0
up ifconfig tap0 up
down ifconfig tap0 down
iface br0 inet static
## Hier kommen die ursprünglichen Netzwerk-Daten des Wirtsystem hin
## Anfang
address 192.168.1.9
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.1
dns-nameservers 192.168.1.1
dns-search lan.mak
## ENDE
bridge-ports eth0 tap0
bridge_fd 1
bridge_hello 1
bridge ifconfig br0 down
Alles anzeigen
Zusätzlich noch die Datei /etc/network/run/ifstate ändern:
Nun ist alles eingerichtet und nach einem Neustart der Rechners können wir den virtuellen Rechner starten.
Mit
wird er gestartet und mit
wird der virtuelle Rechner heruntergefahren.
Um Boot-Meldungen auf der aktuellen Konsole zu sehen kann man die UML mit
starten.
Um zu überprüfen ob alle Netzwerkeinstellungen richtig sind, sollte man versuchen den gestarteten virtuellen Rechner übers Netzwerk mit Putty oder ssh zu ereichen. (In diesem Beispiel wird dazu die IP 192.168.1.14 verwendet.)
Um einen UML Login von der Konsole des Wirtsystem zu erhalten, muß man noch ein paar Vorbereitungen machen.
Wenn die UML nicht gestartet ist, in das Verzeichnis /var/lib/uml/virtuellserver wechseln
Dann /mnt/etc/inittab mit einem Editor öffnen und den Eintrag
Zitat1:2345:respawn:/sbin/getty 38400 tty1
auskommentieren.
Nach dem Start der UML zeigt ein
den Device-Eintrag, der dem UML-User virtuellserver gehört.
Mit einem Befehl wie
erhält man einen Login-Prompt.
Bei der Erstellung dieses HOWTO´s waren die in der c't veröffendlichten Artikel zum c't-Debian-Server sehr hilfreich.
c't-Debian-Server - Artikelübersicht
Weitere ausfühliche Infos auf der Homepage des User Mode Linux (UML) Projekts
Gruß MAK