Vagrant Boxes für kvm/libvirt konvertieren

Da bei Vagrant standardmäßig VirtualBox zum Einsatz kommt, existieren viele Boxes für diesen Provider. Boxes für eine Provider lassen sich jedoch relativ einfach umwandeln, so dass sie auch mit anderen Provider verwendet werden können.

Im Artikel "Vagrant mit KVM unter Arch Linux" wird beschrieben wie Vagrant auch mit KVM/libvirt verwendet werden kann. Da momentan für diesen Provider nur sehr wenige Boxes existieren, müssen existierende Boxes konvertiert werden. Im Folgenden kommt das mutate Plugin zum Einsatz und es wird davon ausgegangen, dass Vagrant bereits so eingerichtet wurde, dass es ohne Probleme läuft.

Zunächst muss das entsprechende Plugin installiert werden.

$ vagrant plugin install vagrant-mutate
Installing the 'vagrant-mutate' plugin. This can take a few minutes...
Installed the plugin 'vagrant-mutate (1.0.2)'!

Anschließend kann die gewünschte Box heruntergeladen werden. Da zum jetzigen Zeitpunkt in der offiziellen Dokumentation meist die "hashicorp/precise32" Box verwendet wird, soll es auch hier als Beispiel dienen. Der Vorgang wurde auch mit anderen Boxes getestet und es traten bist jetzt keine Probleme auf.

$ vagrant box add hashicorp/precise32
==> box: Loading metadata for box 'hashicorp/precise32'
    box: URL: https://atlas.hashicorp.com/hashicorp/precise32
==> box: Adding box 'hashicorp/precise32' (v1.0.0) for provider: virtualbox
    box: Downloading: https://atlas.hashicorp.com/hashicorp/boxes/precise32/versions/1.0.0/providers/virtualbox.box
==> box: Successfully added box 'hashicorp/precise32' (v1.0.0) for 'virtualbox'!

Nach dem Download sollte die Box in der Liste enthalten sein.

$ vagrant box list
hashicorp/precise32 (virtualbox, 1.0.0)

War bis jetzt alles erfolgreich, kann die Box konvertiert werden. Dazu wird das mutate Plugin verwendet, welches nach der Installation über einen zusätzlichen Unterbefehl zur Verfügung steht. Die Konvertierung kann wie im Beispiel erfolgen.

$ vagrant mutate hashicorp/precise32 libvirt
Converting hashicorp/precise32 from virtualbox to libvirt.
    (100.00/100%)
The box hashicorp/precise32 (libvirt) is now ready to use.

Nach der erfolgreichen Konvertierung sollte nun eine weitere Box mit dem Typ libvirt zur Verfügung stehen.

$ vagrant box list
hashicorp/precise32 (libvirt, 1.0.0)
hashicorp/precise32 (virtualbox, 1.0.0)

Anschließend kann wie gewohnt die Konfiguration für eine neue VM initialisiert werden.

$ vagrant init hashicorp/precise32
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.

Die VM sollte sich dann wie gewohnt starten lassen.

$ vagrant up
Bringing machine 'default' up with 'libvirt' provider...
==> default: Creating image (snapshot of base box volume).
==> default: Creating domain with the following settings...
==> default:  -- Name:              test_default
==> default:  -- Domain type:       kvm
==> default:  -- Cpus:              1
==> default:  -- Memory:            512M
==> default:  -- Base box:          hashicorp/precise32
==> default:  -- Storage pool:      default
==> default:  -- Image:             /var/lib/libvirt/images/test_default.img
==> default:  -- Volume Cache:      default
==> default:  -- Kernel:
==> default:  -- Initrd:
==> default:  -- Graphics Type:     vnc
==> default:  -- Graphics Port:     5900
==> default:  -- Graphics IP:       127.0.0.1
==> default:  -- Graphics Password: Not defined
==> default:  -- Video Type:        cirrus
==> default:  -- Video VRAM:        9216
==> default:  -- Keymap:            en-us
==> default:  -- Command line :
==> default: Pruning invalid NFS exports. Administrator privileges will be required...
==> default: Creating shared folders metadata...
==> default: Starting domain.
==> default: Waiting for domain to get an IP address...
==> default: Waiting for SSH to become available...
    default:
    default: Vagrant insecure key detected. Vagrant will automatically replace
    default: this with a newly generated keypair for better security.
    default:
    default: Inserting generated public key within guest...
    default: Removing insecure key from the guest if it's present...
    default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Configuring and enabling network interfaces...
==> default: Exporting NFS shared folders...
==> default: Preparing to edit /etc/exports. Administrator privileges will be required...
● nfs-server.service - NFS server and services
   Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; disabled; vendor preset: disabled)
   Active: active (exited) since Fr 2015-09-25 22:04:24 CEST; 31min ago
  Process: 27517 ExecStart=/usr/sbin/rpc.nfsd $RPCNFSDARGS (code=exited, status=0/SUCCESS)
  Process: 27515 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS)
 Main PID: 27517 (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/nfs-server.service
==> default: Mounting NFS shared folders...

Ein Test zeigt nach dem Login, dass die gewünschte Umgebung lauffähig ist.

$ vagrant ssh
Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-23-generic-pae i686)

 * Documentation:  https://help.ubuntu.com/
New release '14.04.3 LTS' available.
Run 'do-release-upgrade' to upgrade to it.

Welcome to your Vagrant-built virtual machine.
Last login: Fri Sep 25 20:38:00 2015 from 192.168.121.1
vagrant@precise32:~$

Nach der Konvertierung kann natürlich die nicht mehr benötigte Box gelöscht werden.

Es sollte der Provider mit angegeben werden, damit auch die richtige Box gelöscht wird.

$ vagrant box remove hashicorp/precise32 --provider=virtualbox
Removing box 'hashicorp/precise32' (v1.0.0) with provider 'virtualbox'...
Vagrant-libvirt plugin removed box only from you LOCAL ~/.vagrant/boxes directory
From libvirt storage pool you have to delete image manualy(virsh, virt-manager or by any other tool)

Verwandte Artikel