como criar caixa vagrant personalizada a partir da instância libvirt / kvm?

16

Existem muitos recursos na Internet para criar uma caixa vagrant personalizada a partir de uma instância do VirtualBox. Mas quero conhecer um método direto para criar uma caixa vagrant personalizada diretamente de uma instância kvm / libvirt. Por favor, não sugira vagrant-mutate ou qualquer outro que converta o VirtualBox em outro provedor.

pl_rock
fonte

Respostas:

21

depois de passar um tempo com o vagrant, consegui a solução para caixa personalizada. primeiro instale qualquer sistema operacional Linux no libvirt / qvm e efetue login nele para customização e crie vagrantusuário com senhavagrant

adduser vagrant

vagrant o usuário deve poder executar comandos sudo sem um prompt de senha

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

e cole

vagrant ALL=(ALL) NOPASSWD:ALL

faça o que quiser para personalizar sua caixa de vagabundos e instale openssh-serverse não estiver instalado anteriormente

sudo apt-get install -y openssh-server

colocar chave ssh do usuário 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_confige mudar

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

reinicie o serviço ssh usando

 sudo service ssh restart

instalar pacotes de desenvolvimento adicionais para as ferramentas compilarem e instalarem corretamente

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

faça as alterações desejadas e desligue a VM. agora, venha para a máquina host na qual a VM convidada está sendo executada, vá para a /var/lib/libvirt/images/imagem bruta e escolha a imagem em que você fez a alteração e copie em algum lugar, por exemplo/test

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

criar dois arquivos metadata.jsone Vagrantfileem /test fazer entrada emmetadata.json

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

e em 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

converta test.img para o formato qcow2 usando

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

renomeie ubuntu.qcow2 para box.img

mv ubuntu.qcow2 box.img 

Nota: atualmente, o libvirt-vagrant suporta apenas o formato qcow2. portanto, não mude o formato, apenas renomeie para box.img. porque recebe entrada com o nome box.img por padrão.
criar caixa

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

adicionar caixa ao vagrant

vagrant box add --name custom custom_box.box

vá para qualquer diretório em que deseja inicializar o vagrant e execute o comando abaixo que criará o arquivo Vagrant

vagrant init custom

começar a configurar a VM vagante

vagrant up --provider=libvirt 

apreciar !!!

pl_rock
fonte
2
Eu queria ressaltar que, depois de gastar todo esse tempo planejando os shows, o vagabundo passa uma quantidade equivalente de tempo descompactando esse alcatrão novamente. : fubar:
ThorSummoner
2
para ignorar o tar / untar de ida e volta, você pode ser capaz de soltar o seu Vagrantfile, meta.json e box.img diretamente~/.vagrant.d/boxes/<name>/0/libvirt/
ThorSummoner
UPvote para uma explicação tão clara de um procedimento relativamente complicado. Graças
Avi Mehenwal