VM-Images schnell mit virt-builder erzeugen

Jede Woche erscheint in unserem Newsletter ein neuer ADMIN-Tipp. Eine Sammlung aller Tipps finden Sie im Archiv der ADMIN-Tipps.

Um VM-Images ohne vollständige Installation eines Betriebssystem anzufertigen, bietet sich das Tool "virt-builder" an.

Unter Linux lassen sich mit "virt-install" in einer Zeile virtuelle Maschinen installieren, wie unser ADMIN-Tipp "Einzeiler zur VM-Installation" zeigt. Allerdings ist dabei etwas Geduld gefragt, denn dabei läuft eine komplette automatisierte Installation einer Linux-DIstribution ab. Schneller geht es mit dem Tool "virt-builder", das ein Image aus vorgefertigten Templates zusammenbaut. Es befindet sich in dem Paket, das erstaunlicherweise auf Debian/Ubuntu wie auch Red Hat/Fedora/CentOS "libguestfs-tools" heißt. Eine Übersicht der verfügbaren Images liefert ein Aufruf von "virt-builder --list":

$ virt-builder --list
...
fedora-28                x86_64     Fedora® 28 Server
freebsd-11.1             x86_64     FreeBSD 11.1
scientificlinux-6        x86_64     Scientific Linux 6.5
ubuntu-10.04             x86_64     Ubuntu 10.04 (Lucid)
ubuntu-12.04             x86_64     Ubuntu 12.04 (Precise)
ubuntu-14.04             x86_64     Ubuntu 14.04 (Trusty)
ubuntu-16.04             x86_64     Ubuntu 16.04 (Xenial)
ubuntu-18.04             x86_64     Ubuntu 18.04 (bionic)

Neben openSUSE, CentOS, Debian, CirrOS, Ubuntu und Fedora ist hier sogar FreeBSD vertreten.

Nun könnten Sie im Prinzip mit dem Erstellen eines Image anfangen – wenn Sie nicht etwa Ubuntu 16.04 verwenden. Diese Distribution besitzt einen Bug im Libguestfs-Code, den sich natürlich keiner bequemt zu fixen; dies ist neueren Distributionen vorbehalten, die Libguestfs 1.34 oder neuer mitbringen, in der dieser Fehler behoben ist. Ein Workaround ist, das entsprechende Skript anzupassen. Sollte jemals das Libguestfs-Paket von den Distributoren aktualisiert werden, wäre diese Änderung wohl zunichte.Es handelt sich um das Skript "init", das in der Datei "/usr/lib/x86_64-linux-gnu/guestfs/supermin.d/init.tar.gz" enthalten ist. Entpacken Sie zuerst die Datei, ändern Sie das Skript und packen Sie sie danach wieder ein:

tar xf /usr/lib/x86_64-linux-gnu/guestfs/supermin.d/init.tar.gz
vi init
sudo tar cfz /usr/lib/x86_64-linux-gnu/guestfs/supermin.d/init.tar.gz init

Die Änderung sieht so aus, dass Sie nach der Zeile 111 den Aufruf "touch /etc/fstab" einbauen, etwa so (nur ohne das Pluszeichen, das ein Ergebnis des diff-Kommandos ist):

 if test "$guestfs_network" = 1; then
     iface=$(ls -I all -I default -I lo /proc/sys/net/ipv4/conf)
+    touch /etc/fstab
     if dhclient --version >/dev/null 2>&1; then
         dhclient $iface
     else

Damit sollte der virt-builder auch auf Ubuntu 16.04 funktionieren. Der folgende Aufruf installiert eine VM mit Fedora 28:

virt-builder fedora-28 --root-password password:T0pZecr3T

Das damit erstellte Disk-Image importieren Sie folgendermaßen in die Libvirt-Umgebung:

virt-install --name f28-2 --ram 2048 --disk path=fedora-28.img,format=raw --os-variant fedora22 --import --graphics none

Die "OS-Variante" ist hier mit "fedora22" gewählt, weil es das neueste ist, was Ubuntu 16.04 anbietet, wie ein Aufruf von "osinfo-query os | grep fedora" verrät (das Tool steckt in dem Paket "libosinfo-bin"). Haben Sie eine neuere Variante, verwenden Sie diese, aber groß dürfte der Unterschied im Endeffekt nicht sein.

Ein Update des Images können Sie beim Zusammenbauen mit dem Schalter "--update" erreichen. Mit "--ssh-inject" schreiben Sie dem Image gleich SSH-Credentials ein. Mehr dazu verrät die Manpage zu virt-builder.

20.09.2018

Ähnliche Artikel

comments powered by Disqus

Artikel der Woche

Registry für Docker-Images

Wer selber Docker-Images herstellt, braucht auch eine eigene Registry. Diese gibt es ebenfalls als Docker-Image, aber nur mit eingeschränkter Funktionalität. Mit einem Auth-Server wird daraus ein brauchbares Repository für Images. (mehr)
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

Google+

Ausgabe /2018