web-dev-qa-db-fra.com

Comment créer une boîte Vagrant personnalisée à partir d'une instance Libvirt / KVM?

Il existe de nombreuses ressources sur Internet pour créer une boîte Vagrant personnalisée à partir d'une instance VirtualBox. Mais je veux connaître une méthode directe pour créer une boîte Vagrant personnalisée directement à partir d'une instance KVM/LIBVIRT. S'il vous plaît ne suggérez pas la mutation de Vagrant ou de tout convertir VirtualBox en un autre fournisseur.

16
pl_rock

après avoir passé du temps avec Vagrant, j'ai eu la solution pour une boîte personnalisée. Tout d'abord, installez tout système d'exploitation Linux dans LIBVIRT/QVM et connectez-vous à la personnalisation et à la création vagrant utilisateur avec mot de passe vagrant

adduser vagrant

vagrant _ L'utilisateur doit pouvoir exécuter des commandes sudo sans une invite de mot de passe

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

et coller

vagrant ALL=(ALL) NOPASSWD:ALL

faites ce que vous voulez personnaliser votre boîte vagabonde et installez openssh-server Si non installé précédemment

Sudo apt-get install -y openssh-server

mettre la clé SSH de Vagrant User

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

open sudo vi /etc/ssh/sshd_config et changer

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

redémarrez le service SSH en utilisant

 Sudo service ssh restart

installez des packages de développement supplémentaires pour les outils pour compiler et installer correctement

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

faites n'importe quel changement que vous voulez et fermez le VM. Maintenant, venez à la machine hôte sur laquelle votre invité VM est en cours d'exécution et goto le /var/lib/libvirt/images/ et choisissez une image brute dans laquelle vous avez fait le changement et la copie quelque part par exemple /test

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

créer deux fichier metadata.json et Vagrantfile dans /test Entrée dans metadata.json

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

et dans 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 au format Qcow2 en utilisant

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

renommer ubuntu.qcow2 à la boîte.Img

mv ubuntu.qcow2 box.img 

Remarque : Actuellement, Libvirt-Vagrant supporte uniquement le format Qcow2. Donc, ne changez pas le format que vous venez de renommer à la case.Img. Parce qu'il faut en entrée avec NAME BOX.IMG par défaut.
Créer une boîte

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

ajouter une boîte à Vagrant

vagrant box add --name custom custom_box.box

accédez à n'importe quel répertoire dans lequel vous souhaitez initialiser le Vagrant et exécuter la commande ci-dessous qui créera un fichier Vagrant

vagrant init custom

commencez à configurer VM Vagrant

vagrant up --provider=libvirt 

prendre plaisir !!!

22
pl_rock