It cost's me some nerves and time to figure out how to create a vagrant image from
a libvirt kvm vm and how to modify an existing one. Thanks to pl_rock from stackexchange
for the awesome start.
Now we have to eventually change the disk format as well as to create additional files
Goto the image folder:
Create the "metadata.json" file:
Create the .box archive with all the created files:
source
- First of all you have to install a new vm as usual. I've installed a new vm with Ubuntu 16.04 LTS. I'm not sure if it's really neccessary but set the root password to "vagrant", just to be sure.
- Connect to your VM via ssh or terminal and do the following steps.
adduser vagrantVagrant user should be able to run sudo commands without a password prompt:
sudo visudo -f /etc/sudoers.d/vagrant vagrant ALL=(ALL) NOPASSWD:ALLInstall ssh-server if that's not already done:
sudo apt-get install -y openssh-serverCreate a home directory for your vagrant user and also get the master key:
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/.sshOpen the ssh config "/etc/ssh/sshd_config" and change:
PubKeyAuthentication yes AuthorizedKeysFile %h/.ssh/authorized_keys PermitEmptyPasswords no PasswordAuthentication noInstall additional development packages for the tools to properly compile and install:
sudo apt-get install -y gcc build-essential linux-headers-serverRemove the following file to make sure the network will be configured properly on next boot:
rm -f /etc/udev/rules.d/70-persistent.netAfter you've made all your changes, shutdown your VM.
Now we have to eventually change the disk format as well as to create additional files
Goto the image folder:
cd /var/lib/libvirt/images/Create two files that are neccessary for the vagrant box
Create the "metadata.json" file:
{
"provider" : "libvirt",
"format" : "qcow2",
"virtual_size" : 40
}
Create the "Vagrantfile" file: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
Now you have to convert your image file to qcow2:sudo qemu-img convert -f raw -O qcow2 test.img ubuntu.qcow2Rename the image to ".img" ending:
mv ubuntu.qcow2 box.imgNote: currently,libvirt-vagrant support only qcow2 format. So, don't change the format just rename to box.img, ecause it takes input with name box.img by default.
Create the .box archive with all the created files:
tar cvzf custom_box.box ./metadata.json ./Vagrantfile ./box.imgAdd the box to vagrant:
vagrant box add --name custom custom_box.boxGo to any directory where you want to initialize vagrant and run command bellow that will create the Vagrant file:
vagrant init customStart the vagrant VM:
vagrant up --provider=libvirtNote:: If you want to change some settings of an already running vm, just make your changes and do a "shutdown" or "vagrant halt". After that you can commit the changes back to the "backing" file. Just do "qemu-img commit /var/lib/libvirt/images/YOUR-VAGRANT-DEPLOYED-SNAP-FILE". After that you can do a "vagrant up" with your modified image.
source
Комментарии
Отправить комментарий