Change-Id: Icb9af4c9c77ee14e6455b3a86af2c84675e5762c Closes-Bug: #1384099
7.7 KiB
Tool support for image creation
There are several tools that are designed to automate image creation.
Diskimage-builder
Diskimage-builder is an automated disk image creation tool that supports a variety of distributions and architectures. Diskimage-builder (DIB) can build images for Fedora, Red Hat Enterprise Linux, Ubuntu, Debian, CentOS, and openSUSE. DIB is organized in a series of elements that build on top of each other to create specific images.
To build an image, call the following script:
# disk-image-create ubuntu vm
This example creates a generic, bootable Ubuntu image of the latest release.
Further customization could be accomplished by setting environment variables or adding elements to the command-line:
# disk-image-create -a armhf ubuntu vm
This example creates the image as before, but for arm architecture. More elements are available in the git source directory and documented in the diskimage-builder elements documentation.
Oz
Oz is a command-line tool that automates the process of creating a virtual machine image file. Oz is a Python app that interacts with KVM to step through the process of installing a virtual machine. It uses a predefined set of kickstart (Red Hat-based systems) and preseed files (Debian-based systems) for operating systems that it supports, and it can also be used to create Microsoft Windows images. On Fedora, install Oz with yum:
# yum install oz
Note
As of this writing, there are no Oz packages for Ubuntu, so you will need to either install from the source or build your own .deb file.
A full treatment of Oz is beyond the scope of this document, but we will provide an example. You can find additional examples of Oz template files on GitHub at rackerjoe/oz-image-build/templates. Here's how you would create a CentOS 6.4 image with Oz.
Create a template file (we'll call it centos64.tdl
) with
the following contents. The only entry you will need to change is the
<rootpw>
contents.
template>
<name>centos64</name>
<os>
<name>CentOS-6</name>
<version>4</version>
<arch>x86_64</arch>
<install type='iso'>
<iso>http://mirror.rackspace.com/CentOS/6/isos/x86_64/CentOS-6.4-x86_64-bin-DVD1.iso</iso>
<install>
</rootpw>CHANGE THIS TO YOUR ROOT PASSWORD</rootpw>
<os>
</description>CentOS 6.4 x86_64</description>
<repositories>
<repository name='epel-6'>
<url>http://download.fedoraproject.org/pub/epel/6/$basearch</url>
<signed>no</signed>
<repository>
</repositories>
</packages>
<package name='epel-release'/>
<package name='cloud-utils'/>
<package name='cloud-init'/>
<packages>
</commands>
<command name='update'>
<
yum -y update
yum clean all
sed -i '/^HWADDR/d' /etc/sysconfig/network-scripts/ifcfg-eth0
echo -n > /etc/udev/rules.d/70-persistent-net.rules
echo -n > /lib/udev/rules.d/75-persistent-net-generator.rulescommand>
</commands>
</template> </
This Oz template specifies where to download the Centos 6.4 install
ISO. Oz will use the version information to identify which kickstart
file to use. In this case, it will be RHEL6.auto.
It adds EPEL as a repository and install the epel-release
,
cloud-utils
, and cloud-init
packages, as
specified in the packages
section of the file.
After Oz completes the initial OS install using the kickstart file,
it customizes the image with an update. It also removes any reference to
the eth0 device that libvirt creates while Oz does the customizing, as
specified in the command
section of the XML file.
To run this:
# oz-install -d3 -u centos64.tdl -x centos64-libvirt.xml
- The
-d3
flag tells Oz to show status information as it runs. - The
-u
tells Oz to do the customization (install extra packages, run the commands) once it does the initial install. - The
-x
flag tells Oz what filename to use to write out a libvirt XML file (otherwise it will default to something likecentos64Apr_03_2013-12:39:42
).
If you leave out the -u
flag, or you want to edit the
file to do additional customizations, you can use the oz-customize
command,
using the libvirt XML file that oz-install
creates. For example:
# oz-customize -d3 centos64.tdl centos64-libvirt.xml
Oz will invoke libvirt to boot the image inside of KVM, then Oz will ssh into the instance and perform the customizations.
VMBuilder
VMBuilder (Virtual Machine Builder) is a command-line tool that creates virtual machine images for different hypervisors. The version of VMBuilder that ships with Ubuntu can only create Ubuntu virtual machine guests. The version of VMBuilder that ships with Debian can create Ubuntu and Debian virtual machine guests.
The Ubuntu Server Guide has documentation on how to use VMBuilder to create an Ubuntu image.
VeeWee
VeeWee is often used to build Vagrant boxes, but it can also be used to build the KVM images.
Packer
Packer is a tool for creating machine images for multiple platforms from a single source configuration.
imagefactory
imagefactory is a newer tool designed to automate the building, converting, and uploading images to different cloud providers. It uses Oz as its back-end and includes support for OpenStack-based clouds.
KIWI
The KIWI OS image builder provides an operating system image builder for various Linux supported hardware platforms as well as for virtualization and cloud systems. It allows building of images based on openSUSE, SUSE Linux Enterprise, and Red Hat Enterprise Linux. The openSUSE Documentation explains how to use KIWI.
SUSE Studio
SUSE Studio is a web application for building and testing software applications in a web browser. It supports the creation of physical, virtual or cloud-based applications and includes support for building images for OpenStack based clouds using SUSE Linux Enterprise and openSUSE as distributions.
virt-builder
Virt-builder is a tool for quickly building new virtual machines. You can build a variety of VMs for local or cloud use, usually within a few minutes or less. Virt-builder also has many ways to customize these VMs. Everything is run from the command line and nothing requires root privileges, so automation and scripting is simple.
To build an image, call the following script:
# virt-builder fedora-23 -o image.qcow2 --format qcow2 \
--update --selinux-relabel --size 20G
To list the operating systems available to install:
$ virt-builder --list
To import it into libvirt with virsh
:
# virt-install --name fedora --ram 2048 \
--disk path=image.qcow2,format=qcow2 --import