comment créer une boîte vagabonde personnalisée à partir d'une instance de libvirt / kvm?

16

Il existe de nombreuses ressources sur Internet pour créer une boîte vagabonde personnalisée à partir d'une instance VirtualBox. Mais je veux connaître une méthode directe pour créer une boîte vagabonde personnalisée directement à partir d'une instance kvm / libvirt. Veuillez ne pas suggérer de vagrant-mutate ou tout autre qui convertit VirtualBox en un autre fournisseur.

pl_rock
la source

Réponses:

21

après avoir passé du temps avec vagabond, j'ai obtenu la solution pour une boîte personnalisée. tout d'abord, installez tout système d'exploitation Linux dans libvirt / qvm et connectez-vous à celui-ci pour la personnalisation et créez un vagrantutilisateur avec un mot de passevagrant

adduser vagrant

vagrant l'utilisateur doit pouvoir exécuter les commandes sudo sans invite de mot de passe

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

et coller

vagrant ALL=(ALL) NOPASSWD:ALL

faites ce que vous voulez pour personnaliser votre boîte vagabonde et installez-la openssh-serversi elle n'est pas déjà installée

sudo apt-get install -y openssh-server

mettre la clé ssh de l'utilisateur vagabond

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

ouvrir sudo vi /etc/ssh/sshd_configet changer

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

redémarrer le service ssh en utilisant

 sudo service ssh restart

installer des packages de développement supplémentaires pour que les outils soient correctement compilés et installés

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

effectuez les modifications souhaitées et arrêtez la machine virtuelle. maintenant, venez sur la machine hôte sur laquelle la machine virtuelle invitée est en cours d'exécution et passez à la /var/lib/libvirt/images/et choisissez l'image brute dans laquelle vous avez effectué la modification et copiez quelque part par exemple/test

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

créer deux fichiers metadata.jsonet Vagrantfiledans l' /test entrée do dansmetadata.json

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

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

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

renommer ubuntu.qcow2 en box.img

mv ubuntu.qcow2 box.img 

Remarque: actuellement, libvirt-vagrant ne prend en charge que le format qcow2. donc, ne changez pas le format, renommez simplement box.img. car il prend l'entrée avec le nom box.img par défaut.
créer une boîte

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

ajouter une boîte au vagabond

vagrant box add --name custom custom_box.box

allez dans n'importe quel répertoire où vous souhaitez initialiser vagrant et exécutez la commande ci-dessous qui créera le fichier Vagrant

vagrant init custom

commencer à configurer vagrant VM

vagrant up --provider=libvirt 

prendre plaisir !!!

pl_rock
la source
2
Je voulais souligner qu'après avoir passé tout ce temps à tarer ces concerts, vagabond passe un temps équivalent à décompresser à nouveau ce goudron. : fubar:
ThorSummoner
2
pour sauter le tar aller-retour tar / untar, vous pourrez peut-être déposer votre Vagrantfile, meta.json et box.img directement dans~/.vagrant.d/boxes/<name>/0/libvirt/
ThorSummoner
Votez pour une explication si claire d'une procédure relativement compliquée. Merci
Avi Mehenwal