¿Cómo crear un cuadro vagabundo personalizado desde la instancia de libvirt / kvm?

16

Hay muchos recursos en Internet para crear un cuadro vagabundo personalizado desde una instancia de VirtualBox. Pero quiero conocer un método directo para crear un cuadro vagabundo personalizado directamente desde una instancia de kvm / libvirt. No sugiera vagrant-mutate ni ninguno que convierta VirtualBox a otro proveedor.

pl_rock
fuente

Respuestas:

21

Después de pasar tiempo con vagabundo, obtuve la solución para la caja personalizada. En primer lugar, instale cualquier sistema operativo Linux en libvirt / qvm e inicie sesión para personalizarlo y cree un vagrantusuario con contraseñavagrant

adduser vagrant

vagrant el usuario debería poder ejecutar comandos sudo sin una solicitud de contraseña

sudo visudo -f /etc/sudoers.d/vagrant

y pegar

vagrant ALL=(ALL) NOPASSWD:ALL

haga lo que quiera para personalizar su caja de vagabundo e instálela openssh-serversi no se instaló previamente

sudo apt-get install -y openssh-server

poner clave ssh del usuario vagabundo

mkdir -p /home/vagrant/.ssh
chmod 0700 /home/vagrant/.ssh
wget --no-check-certificate \
https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub \
-O /home/vagrant/.ssh/authorized_keys
chmod 0600 /home/vagrant/.ssh/authorized_keys
chown -R vagrant /home/vagrant/.ssh

abrir sudo vi /etc/ssh/sshd_configy cambiar

PubKeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys
PermitEmptyPasswords no
PasswordAuthentication no

reiniciar el servicio ssh usando

 sudo service ssh restart

Instalar paquetes de desarrollo adicionales para las herramientas para compilar e instalar correctamente

sudo apt-get install -y gcc build-essential linux-headers-server

realice cualquier cambio que desee y apague la VM. ahora, venga a la máquina host en la que se está ejecutando la máquina virtual invitada y vaya a /var/lib/libvirt/images/y elija la imagen sin formato en la que realizó el cambio y copie en algún lugar, por ejemplo/test

cp /var/lib/libvirt/images/test.img  /test 

crear dos archivos metadata.jsony Vagrantfileen /test la entrada en Dometadata.json

{
  "provider"     : "libvirt",
  "format"       : "qcow2",
  "virtual_size" : 40
}

y en Vagrantfile

Vagrant.configure("2") do |config|
         config.vm.provider :libvirt do |libvirt|
         libvirt.driver = "kvm"
         libvirt.host = 'localhost'
         libvirt.uri = 'qemu:///system'
         end
config.vm.define "new" do |custombox|
         custombox.vm.box = "custombox"       
         custombox.vm.provider :libvirt do |test|
         test.memory = 1024
         test.cpus = 1
         end
         end
end

convertir test.img al formato qcow2 usando

sudo qemu-img convert -f raw -O qcow2  test.img  ubuntu.qcow2

cambie el nombre de ubuntu.qcow2 a box.img

mv ubuntu.qcow2 box.img 

Nota: actualmente, libvirt-vagrant solo admite el formato qcow2. por lo tanto, no cambie el formato, simplemente cambie el nombre a box.img. porque toma entrada con el nombre box.img por defecto.
crear caja

tar cvzf custom_box.box ./metadata.json ./Vagrantfile ./box.img 

agregar caja a vagabundo

vagrant box add --name custom custom_box.box

vaya a cualquier directorio donde desee inicializar vagrant y ejecute el siguiente comando que creará el archivo Vagrant

vagrant init custom

comenzar a configurar VM vagabundo

vagrant up --provider=libvirt 

disfruta !!!

pl_rock
fuente
2
Quería señalar que, después de pasar todo ese tiempo manipulando sus conciertos, vagabundo pasa una cantidad equivalente de tiempo descomprimiendo ese alquitrán nuevamente. : fubar:
ThorSummoner
2
para omitir el tar / untar de ida y vuelta, es posible que pueda soltar su Vagrantfile, meta.json y box.img directamente en~/.vagrant.d/boxes/<name>/0/libvirt/
ThorSummoner
Vota por una explicación tan clara de un procedimiento relativamente complicado Gracias
Avi Mehenwal