There are several tools that are desgined to automate image creation.
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 (RedHat-based systems) and preseed files (Debian-based systems) for operating systems that it supports, and it call also be using 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 source or build your own .deb file. |
A full treatment of Oz is beyond the scope of this doucment, 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.rules </command> </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 rhel-6-jeos.ks. 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 does the initial OS install using the kickstart file, it will customize the
image by doing an update and removing any reference to the eth0 device that libvirt
creates while Oz was doing the customizing, as specified in the
command
section of the XML file.
To run this, do, as root:
# oz-install -d3 -u centos64.tdl -w 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
-w <filename>
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 (Virtual Machine Builder) is another command-line tool that can be used to create 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 12.04 server guide has documentation on how to use vmbuilder to create an Ubuntu image.
BoxGrinder is another tool for creating virtual machine images, which it calls appliances. BoxGrinder can create Fedora, Red Hat Enterprise Linux, or CentOS images. BoxGrinder is currently only supported on Fedora.
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.