Taula de continguts

Creació d'una Vagrant Box

Una Vagrant box és la imatge base a partir de la qual crearem les nostres VMs. Anem a veure com crear-ne una de pròpia.

Una Vagrant box sol ser un arxiu comprimit amb tar i gzip que consta de:

  1. box.img : la imatge del disc dur a guardar. Sol estar en formats com qcow2 per a libvirt
  2. metadata.json : dades de la VM a crear. Sol tenir una estructura tipus:
    metadata.json
    {
      "provider": "libvirt",
      "format": "qcow2",
      "virtual_size": 10 // mida del disc en GB
    }
  3. Vagrantfile : un Vagrantfile de mostra per a l'usuari.

Referències:

  1. Recomanacions oficials per a crear una imatge base per a Vagrant


Creació local del box

Crear la VM amb el virtualitzador desitjat (libvirt, VirtualBox, etc.)

Localitzar la imatge de disc desitjada. A libvirt sol estar a /var/lib/libvirt/images/.

Copiar la imatge en una carpeta de treball amb el nom box.img.

Consultar les dades de la imatge de disc (en particular ens interessa la mida del disc virtual size):

$ qemu-img info box.img
image: box.img
file format: qcow2
virtual size: 40 GiB (42949672960 bytes)
disk size: 1.52 GiB
cluster_size: 65536
Format specific information:
    compat: 1.1
    compression type: zlib
    lazy refcounts: true
    refcount bits: 16
    corrupt: false
    extended l2: false
Child node '/file':
    filename: box.img
    protocol type: file
    file length: 40 GiB (42956488704 bytes)
    disk size: 1.52 GiB

Crear arxiu metatada.json i aplicar la virtual size (la mida total del disc, no la ocupada):

metadata.json
{
  "provider": "libvirt",
  "format": "qcow2",
  "virtual_size": 40
}

Afegir el Vagrantfile, per ex:

Vagrantfile
Vagrant.configure("2") do |config|
  # appliance pfsense
  config.vm.define :pfsense , primary:true do |pfsense|
    pfsense.vm.provider "libvirt" do |vm|
      vm.memory = "2048"
    end
    # credencials
    pfsense.ssh.insert_key = false
    pfsense.ssh.username = "admin"
    pfsense.ssh.password = "vagrant"
    # deshabilitem carpeta compartida per defecte, no ens cal i no funciona
    pfsense.vm.synced_folder ".", "/vagrant", disabled: true
  end
end

Ara ja hauriem de tenir els 3 arxius:

  1. metadata.json
  2. Vagrantfile
  3. box.img

Comprimim els 3 arxius en el package box (trigarà una mica):

$ tar cvfz pfsense-2.9.0.box ./metadata.json ./Vagrantfile ./box.img

Amb l'arxiu box disponible, ja podem importar la imatge al sistema local:

$ vagrant box add pfsense-2.9.0.box --name pfsense-2.9.0


Càrrega a Vagrant Cloud

Creeu un compte a Vagrant Cloud. La manera més senzilla sol ser logant-se amb Github.

Anar a Vagrant Registry

Anar a Crear box registry i crear-ne un amb el teu nom d'usuari registrat.

Entrar dins el teu registry.

Anar a «+ Create box»

  1. Afegir nom i descripció (p.ex. pfsense)
  2. Afegir versió (p.ex. 2.9.0)
  3. Afegir provider (p.ex. libvirt)
  4. Afegir arquitectura (p.ex. amd64)
  5. Carregar l'arxiu .box
  6. Clicar «RELEASE NOW»


Eliminar una versió de Vagrant Cloud

Si es vol actualitzar una versió es pot treure un nou release (nou nom de versió).

Si es vol canviar una versió concreta primer caldrà eliminar-la i tornar-la a pujar.

En aquest darrer cas caldrà eliminar la box local.


Eliminar una box local

Caldrà eliminar-la de Vagrant i del provider.

Per llistar les imatges:

$ vagrant box list

I eliminar-la:

$ vagrant box remove emieza/pfsense

Però això no eliminarà la imatge a libvirt. Per fer-ho caldrà veure les pools i després eliminar-la.

$ virsh pool-list --all
$ virsh vol-list default
$ virsh vol-delete --pool default emieza-VAGRANTSLASH-pfsense_vagrant_box_image_2.9.0_box.img