jak utworzyć niestandardowe pudełko Vagrant z instancji libvirt / kvm?

16

Istnieje wiele zasobów w Internecie, aby utworzyć niestandardowe pudełko Vagrant z instancji VirtualBox. Ale chcę poznać bezpośrednią metodę tworzenia niestandardowego pudełka Vagrant bezpośrednio z instancji kvm / libvirt. Proszę nie sugerować vagrant-mutate ani żadnych innych, które konwertują VirtualBox na innego dostawcę.

pl_rock
źródło

Odpowiedzi:

21

po spędzeniu czasu z włóczęgą dostałem rozwiązanie dla niestandardowego pudełka. przede wszystkim zainstaluj dowolny system operacyjny Linux w libvirt / qvm i zaloguj się do niego w celu dostosowania i utwórz vagrantużytkownika za pomocą hasłavagrant

adduser vagrant

vagrant użytkownik powinien mieć możliwość uruchamiania poleceń sudo bez pytania o hasło

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

i wklej

vagrant ALL=(ALL) NOPASSWD:ALL

rób wszystko, co chcesz, aby dostosować swoje pudełko Vagrant i zainstaluj, openssh-serverjeśli nie zostało wcześniej zainstalowane

sudo apt-get install -y openssh-server

włóż klucz ssh od błędnego użytkownika

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

otwórz sudo vi /etc/ssh/sshd_configi zmień

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

uruchom ponownie usługę ssh za pomocą

 sudo service ssh restart

zainstaluj dodatkowe pakiety programistyczne dla narzędzi do prawidłowej kompilacji i instalacji

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

wprowadź dowolne zmiany i zamknij maszynę wirtualną. teraz /var/lib/libvirt/images/przejdź do komputera hosta, na którym działa VM maszyny-gościa, i wybierz surowy obraz, w którym dokonałeś zmiany, i skopiuj gdzieś na przykład/test

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

utworzenie dwóch plików metadata.jsoni Vagrantfilew /test wejściu turystycznemetadata.json

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

i w 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

przekonwertować test.img do formatu qcow2 przy użyciu

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

zmień nazwę ubuntu.qcow2 na box.img

mv ubuntu.qcow2 box.img 

Uwaga: obecnie libvirt-vagrant obsługuje tylko format qcow2. więc nie zmieniaj formatu, po prostu zmień nazwę na box.img. ponieważ domyślnie wymaga danych wejściowych o nazwie box.img.
utwórz pudełko

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

dodaj pole do włóczęgi

vagrant box add --name custom custom_box.box

przejdź do dowolnego katalogu, w którym chcesz zainicjować włóczęgę i uruchom poniższe polecenie, aby utworzyć plik włóczęgi

vagrant init custom

rozpocznij konfigurację wirtualnej maszyny wirtualnej

vagrant up --provider=libvirt 

cieszyć się !!!

pl_rock
źródło
2
Chciałem zauważyć, że po spędzeniu całego czasu na tar'owaniu ich koncertów włóczęga spędza tyle samo czasu na ponownej kompresji tej smoły. : fubar:
ThorSummoner
2
aby pominąć tar / tripar w obie strony, możesz upuścić swój plik Vagrantfile, meta.json i box.img bezpośrednio w~/.vagrant.d/boxes/<name>/0/libvirt/
ThorSummoner
UPGłosuj na tak jasne wyjaśnienie stosunkowo skomplikowanej procedury. Dzięki
Avi Mehenwal