Mit E-Mail-Diensten muss sich jeder Administrator früher oder später einmal beschäftigen. Das zur CeBIT erscheinende ADMIN 02/2012 gibt dazu Praxis-Tipps und ... (mehr)

Klonen

Glücklicherweise geht das Klonen einer existierenden virtuellen Maschine einfacher vonstatten. Dazu gibt es unter den Tools der Libvirt das Programm »virt-clone« , das eine virtuelle Maschine komplett kopiert. Leider muss man beim derzeitigen Stand der Technik dazu das Ursprungssystem pausieren. Als Parameter sind hinter »-o« die Original-VM, mit »-n« der Name der neuen VM und mit »-f« der Name des neu entstehenden Disk-Images anzugeben. Alternativ bietet »virt-clone« mit »-a« auch einen Modus, in dem es selbst die passenden Namen wählt.

Versagen die Tools der Libvirt auf mysteriöse Weise ihren Dienst, liegt das möglicherweise daran, dass sie den KVM-Hypervisor nicht finden, der auch auf einer anderen Maschine laufen kann. Um ihn zu finden, bieten alle Programme den Parameter »-c« oder »--connect« , hinter dem die URI des Hypervisors folgt. Beim lokalen System sieht das etwa so aus:

virsh -c qemu:///system list

Dauerhaft für die Shell-Sitzung setzt man diesen Wert am besten mit der entsprechenden Umgebungsvariablen:

export LIBVIRT_DEFAULT_URI=qemu:///system

Drei Aufrufe auf der Kommandozeile pausieren dann die laufende VM, fertigen ein Klon-System an und setzen den Betrieb der Original-VM wieder fort:

virsh suspend oldvm
virt-clone -o oldvm -n newvm -f /var/lib/libvirt/images/newvm.qcow
virsh resume oldvm

Per Default vergibt »virt-clone« für die Netzwerkkarte der neuen virtuellen Maschine eine zufällig erzeugte MAC-Adresse. Zwar lässt sich auch per »-m« von Hand eine solche Adresse übergeben, das ändert jedoch nichts an dem nun auftretenden Problem, dass in manchen Netzwerk-Skripts der geklonten Maschine die MAC-Adresse der Original-VM steht, etwa bei Red Hat Enterprise Linux und Fedora die Dateien »/etc/sysconfig/network-scripts/ifcfg-eth0« und »/etc/udev/rules.d/70-persistent-net.rules« .

Suchen und Ersetzen in virtuellen Images

Man könnte nun die geklonte VM booten und zum Beispiel per SSH die Dateien editieren, eleganter geht es aber mit dem Guestfish-Tool, das das Editieren von Dateien eines Gastsystems erlaubt. Dazu bietet es nach dem Mounten des Dateisystems den eingebauten Befehl »edit« . Automatisieren lässt sich dies mittels des mitgelieferten Skripts »virt-edit« , das mit dem Schalter »-e« auch die Ersetzung von Strings beherrscht. Die MAC-Adressen der alten und der neuen VM lassen sich beispielsweise ihren jeweiligen XML-Konfigurationsdateien entnehmen und mit einem Befehl ersetzen:

virt-edit newvm /etc/sysconfig/network-scripts/ifcfg-eth0 -e "s/Alte-MAC-Adr/Neue-MAC-Adr/"

Ebenso verfährt man mit den oben erwähnten Udev-Regeln. Auch der Hostname lässt sich auf diesem Weg so ersetzen, dass er dem beim Klonen vergebenen entspricht. Auf den Red-Hat-Systemen ist dazu die Datei »/etc/sysconfig/network« zu ändern.

Zum mehr oder weniger automatisierten Klonen von virtuellen Maschinen kann man beispielsweise in einer kleinen Textdatei Buch über die vergebenen Ziffern führen oder sich mit »virsh list --all« alle VMs anzeigen lassen und dann hochzählen. Ein Beispiel für ein solches Skript, das virtuelle Maschinen so verwaltet, gibt Listing 1 . Den Ablauf des Skripts zeigt Abbildung 1 .

Listing 1

clone-vm

 

Abbildung 1: Mit einem kurzen Skript lassen sich virtuelle Maschinen automatisch klonen und konfigurieren.

Um passwortloses Login per SSH zu ermöglichen, gibt es wiederum mehrere Wege. Ist das virtuelle System schon übers Netz erreichbar, kann man zum Beispiel mit »ssh-copy-id« den Schlüssel in den entsprechenden Account in der VM kopieren. Alternativ bietet es sich auch an, die Datei ».ssh/authorized_keys« mit dem nötigen Public Key auszustatten und das Verzeichnis ».ssh« mit »virt-copy-in« in die noch nicht gebootete VM zu kopieren.

Ähnliche Artikel

comments powered by Disqus
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Ausgabe /2023