Eucalyptus: Erstellen eines Image aus einem ISO (Xen)

Dieser Artikel beschreibt, wie mittels Xen und dem ISO Image eines Gast Betriebssystems das installiert werden soll, ein Root Dateiystem für Eucalyptus erstellt wird.

Voraussetzung

  • Hardware Virtualisierung Unterstützung auf dem System (Hardware-assisted virtualization)
  • Funktionsfähige Xen Umgebung (domU muss gestartet werden können)

Zunächst muss ein ISO Image einer Distribution (Gastbetriebssystem), das installiert werden soll, vorhanden sein. Anschließend wird eine virtuelle Festplatte (virtual disk) z.B. mit der Größe von 4GB erstellt.

dd if=/dev/zero of=new.img bs=1M count=4096

Nun muss eine Xen Konfigurationsdatei (xen.cfg) erzeugt werden, um das ISO Image zu booten. Diese könnte ähnlich der Folgenden aussehen.

name = "bootFromISO"
kernel = "/usr/lib/xen/boot/hvmloader"
memory = 1024
builder = "hvm"
device_model = "/usr/lib64/xen/bin/qemu-dm"
boot = "d"
disk = ['file:PATH_TO_ISO,hdc:cdrom,r',
'file:PATH_TO/new.img,sda,w']
vif = ['mac=00:01:01:00:00:03, bridge=xenbr0']
dhcp="on"
vnc = 1
vncdisplay = 7
pae = 1

Achtung!!! Es muss auf jedenfall das device_model und der kernel so angepasst werden, damit der Pfad in der jeweiligen Distribution passt.

Als nächstes wird Xen, also der domU gestartet.

xen create xen.cfg

Anschließend kann man sich mit dem VNC Viewer verbinden.

xvncviewer localhost:7

Nun kann die Distribution wie gewöhnlich installiert werden. Dabei sollte darauf geachtet werden, das kein lvm oder md benutzt wird und die Installation innerhalb einer einzigen Partition erfolgt. Zudem sollte man sich merken, in welcher Partition die Distribution installiert wurde.

Achtung!!! Einige Distributionen merken sich die Netzwerkschnittstelle anhand der MAC Adresse. Somit ist die Schnittstelle immer dieselbe. Innerhalb von Eucalyptus muss die Distribution dazu bewegt werden, dass sie die Netzwerkschnittstelle "vergisst", damit jede Instanz die Schnittstelle als die primäre Schnittstelle erkennt.

Im Falle von Debian / Ubuntu kann das unter /etc/udev/rules.d/*net* erfolgen. Im Falle von CentOS unter /etc/network-scripts/ifcfg-eth0. Sollten die Anpassungen nicht erfolgen, wird die Instanz keinen Netzwerkzugriff erhalten.

Jetzt wird Xen (domU) wieder beendet.

Nun müssen wir den Startblock und die Blockgröße des Root-Dateisystems identifizieren. Das kann mittels parted erfolgen.

parted new.img

Parted muss nun so konfiguriert werden, dass es die Blockgröße als Einheit verwendet. Erst "U" dann "b" drücken. (Damit wird die Einheit auf Blocks umgestellt.)

(parted) U
Unit? [compact]? b

Mit "p" kann die aktuelle Partitionstabelle ausgegeben werden.

Wir notieren uns den Startpunkt und die Größe der entsprechenden Partition. Für unser Beispiel nehmen wir an, dass sich der Startpunkt bei 32256 befindet und es sich bei der Größe um 10000000 handelt.

Nun extrahieren wir das Dateisystem.

dd if=new.img of=rootfs.img bs=1 skip=32256 count=10000000

Damit haben wir das Image 'rootfs.img' erhalten, welches das Root Dateisystem beinhaltet. Es sollte nun noch sichergestellt sein, dass dieses kompatibel zu dem verwendeten Kernel und der initrd innerhalb der Cloud Umgebung ist.

Quelle