Wie erstelle ich eine benutzerdefinierte vagrant-Box aus einer libvirt / kvm-Instanz?


16

Es gibt viele Ressourcen im Internet, um eine benutzerdefinierte Vagrant-Box aus einer VirtualBox-Instanz zu erstellen. Aber ich möchte eine direkte Methode kennen, um eine benutzerdefinierte Vagrant-Box direkt aus einer kvm / libvirt-Instanz zu erstellen. Bitte schlagen Sie nicht vagrant-mutate oder andere vor, die VirtualBox zu einem anderen Anbieter konvertieren.

Antworten:


21

Nachdem ich Zeit mit Vagrant verbracht hatte, bekam ich die Lösung für die Custom Box. Installieren Sie zunächst ein Linux-Betriebssystem in libvirt / qvm, melden Sie sich zur Anpassung an und erstellen Sie einen vagrantBenutzer mit Kennwortvagrant

adduser vagrant

vagrant Der Benutzer sollte in der Lage sein, sudo-Befehle ohne Aufforderung zur Kennworteingabe auszuführen

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

und einfügen

vagrant ALL=(ALL) NOPASSWD:ALL

Tun Sie alles, was Sie möchten, um Ihre Vagrant-Box anzupassen, und installieren Sie sie, openssh-serverfalls sie noch nicht installiert wurde

sudo apt-get install -y openssh-server

lege den SSH-Schlüssel von einem vagabunden Benutzer ab

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

Öffne sudo vi /etc/ssh/sshd_configund ändere es

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

Starten Sie den SSH-Dienst mit

 sudo service ssh restart

Installieren Sie zusätzliche Entwicklungspakete, damit die Tools ordnungsgemäß kompiliert und installiert werden können

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

Nehmen Sie die gewünschten Änderungen vor und fahren Sie die VM herunter. Kommen Sie nun zum Host-Computer, auf dem die Gast-VM ausgeführt wird, und /var/lib/libvirt/images/wählen Sie das Raw-Image aus, in dem Sie die Änderung vorgenommen und beispielsweise irgendwo kopiert haben/test

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

Erstellen zwei Datei metadata.jsonund Vagrantfilein /test do Eintrag inmetadata.json

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

und in 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

konvertiere test.img in das qcow2 Format mit

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

benenne ubuntu.qcow2 in box.img um

mv ubuntu.qcow2 box.img 

Hinweis: Derzeit unterstützt libvirt-vagrant nur das qcow2-Format. Ändern Sie das Format also nicht, sondern benennen Sie es in box.img um. weil es standardmäßig Eingaben mit dem Namen box.img akzeptiert.
Box erstellen

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

Box zum Vagabunden hinzufügen

vagrant box add --name custom custom_box.box

Wechseln Sie in ein beliebiges Verzeichnis, in dem Sie vagrant initialisieren möchten, und führen Sie den folgenden Befehl aus, um die Vagrant-Datei zu erstellen

vagrant init custom

Starten Sie die Konfiguration der virtuellen Maschine

vagrant up --provider=libvirt 

genießen !!!


2
Ich wollte darauf hinweisen, dass Vagrant nach all der Zeit, die er damit verbracht hat, seine Gigs zu tarieren, genauso viel Zeit damit verbringt, diesen Teer wieder zu dekomprimieren. : fubar:
ThorSummoner

2
Um den Hin- und Rückflug zu überspringen, können Sie möglicherweise Ihr Vagrantfile, meta.json und box.img direkt in~/.vagrant.d/boxes/<name>/0/libvirt/
ThorSummoner,

UPvote für eine so klare Erklärung für ein relativ kompliziertes Verfahren. Vielen Dank
Avi Mehenwal
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.