Fedora Koji buildsystem and CentOS Community build system i.e. cbs uses imagefactory at the back-end of Koji to build Vagrant images. I have used it as through cbs/koji but wanted to give it a try as I am looking for easier methods to build adb-atomic-developer-bundle . Specially for developers who don’t have access to Fedora or CentOS build system.
Imagefactory needs a kvm/libvirt hypervisor to build images and it converts them for other providers e.g. Virtualbox or VMware Fusion
I have used my laptop (which runs Fedora 23) for this. As I have plan to hack imagefactory and I did not want to damage my laptop’s kvm setup. So I have used nested virtualization for this. Which means I have a CentOS 7 VM which can run virtual machines.
All below steps are done on a CentOS 7 VM which has a kvm setup in place.
Imagefactory is available in Fedora and EPEL repo. But I wanted to try/test the latest code, so I generated RPMs from latest code and then installed the RPMs.
$yum install rpmdevtools epel-release $git clone https://github.com/redhat-imaging/imagefactory.git $cd imagefactory $make rpm $cd imagefactory_plugins $make rpm $cd ~/rpmbuild/RPMS/noarch/ $sudo yum localinstall ./*
Building Vagrant Images:
For building Vagrant box I have used Ian’s example git repo. He is the maintainer and one of the primary developer for imagefactory.
Below commands are copied from imagefactory-examples git repo.
$ git clone https://github.com/imcleod/imagefactory-examples.git $ cd imagefactory-examples/vagrant/
Once you are in the “imagefactory-examples/vagrant/” directory, you can see the required files are already there for running commands to generate image for Fedora 22. So we can start running required commands.
For getting a working Vagrant box we need to run three commands (as mentioned below) to create appropriate OVA image. Each command will give a UUID for the intermediate image file name and we need to use the UUID in the next command.
$ sudo imagefactory --debug base_image \ --file-parameter install_script ./f22-vagrant.ks \ --parameter offline_icicle true \ ./f22-minimal-40g.tdl Output: xxxxxxxxxxxxxxxxxxxxxxxxxxx ============ Final Image Details ============ UUID: 109cb45f-bbd2-4a27-ba5f-42e2d368be32 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Image build completed SUCCESSFULLY!
$ sudo imagefactory --debug target_image --id 109cb45f-bbd2-4a27-ba5f-42e2d368be32 rhevm Output: ============ Final Image Details ============ UUID: ce0dce5f-a1d1-4c1a-8e9b-fc56e022a1bc xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Image build completed SUCCESSFULLY!
$ sudo imagefactory --debug target_image --parameter rhevm_ova_format vagrant-libvirt --id ce0dce5f-a1d1-4c1a-8e9b-fc56e022a1bc ova Output: ============ Final Image Details ============ UUID: 36fcb589-06b8-447b-85bf-ed4715bd2a93 Type: target_image Image filename: /var/lib/imagefactory/storage/36fcb589-06b8-447b-85bf-ed4715bd2a93.body Image build completed SUCCESSFULLY!
The last step will generate the F22 image for libvirt provider. You can rename it as f22.libvirt.box (usually Vagrant images have .box extension) and start using it.
$ cp /var/lib/imagefactory/storage/36fcb589-06b8-447b-85bf-ed4715bd2a93.body ./f22.libvirt.box