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 .