9baec75cdb
* Grammar mistakes corrected. * Not all corrections in the bug were made as it changed the meaning and/or were grammatically incorrect themselves. * Fix incorrect links Change-Id: I3ded1c9c65df64e71b64545d45b3cbdb678444fe Closes-bug: #1387850
190 lines
9.8 KiB
XML
190 lines
9.8 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<chapter xmlns="http://docbook.org/ns/docbook"
|
|
xmlns:xi="http://www.w3.org/2001/XInclude"
|
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
|
version="5.0"
|
|
xml:id="ch_creating_images_automatically">
|
|
<title>Tool support for image creation</title>
|
|
<?dbhtml stop-chunking?>
|
|
<para>There are several tools that are designed to automate image
|
|
creation.</para>
|
|
<section xml:id="Diskimage-builder">
|
|
<title>Diskimage-builder</title>
|
|
<para><link xlink:href="http://docs.openstack.org/developer/diskimage-builder/"
|
|
>diskimage-builder</link> is an automated disk image creation
|
|
tool that supports a variety of distributions and architectures.
|
|
Diskimage-builder (DIB) can build images for Fedora, Redhat,
|
|
Ubuntu, Debian, CentOS, and openSUSE. DIB is organized in a series
|
|
of elements that build on top of each other to create specific
|
|
images.</para>
|
|
<para>To build an image, call the following script:</para>
|
|
<screen><prompt>#</prompt> <userinput>disk-image-create ubuntu vm</userinput></screen>
|
|
<para>This example creates a generic, bootable Ubuntu image of the latest
|
|
release.</para>
|
|
<para>Further customization could be accomplished by setting
|
|
environment variables or adding elements to the command-line:</para>
|
|
<screen><prompt>#</prompt> <userinput>disk-image-create -a armhf ubuntu vm</userinput></screen>
|
|
<para>This example creates the image as before, but for arm architecture.
|
|
More elements are available on <link xlink:href="https://github.com/openstack/diskimage-builder/tree/master/elements">github</link>.
|
|
</para></section>
|
|
|
|
<section xml:id="oz">
|
|
<title>Oz</title>
|
|
<para><link xlink:href="https://github.com/clalancette/oz/wiki"
|
|
>Oz</link> 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:</para>
|
|
<screen><prompt>#</prompt> <userinput>yum install oz</userinput></screen>
|
|
|
|
<note><para>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.</para>
|
|
</note>
|
|
<para>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 <link
|
|
xlink:href="https://github.com/rackerjoe/oz-image-build/tree/master/templates"
|
|
>rackerjoe/oz-image-build/templates</link>. Here's how you would
|
|
create a CentOS 6.4 image with Oz.</para>
|
|
<para>Create a template file (we'll call it
|
|
<filename>centos64.tdl</filename>) with the following contents.
|
|
The only entry you will need to change is the
|
|
<literal><rootpw></literal>
|
|
contents.</para>
|
|
<programlisting language="xml"><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></programlisting>
|
|
|
|
<para>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 <link
|
|
xlink:href="https://github.com/clalancette/oz/blob/master/oz/auto/RHEL6.auto"
|
|
>RHEL6.auto</link>. It adds EPEL as a repository and install the
|
|
<literal>epel-release</literal>, <literal>cloud-utils</literal>,
|
|
and <literal>cloud-init</literal> packages, as specified in the
|
|
<literal>packages</literal> section of the file.</para>
|
|
<para>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 <literal>command</literal> section of the XML
|
|
file.</para>
|
|
<para>To run this:</para>
|
|
<screen><prompt>#</prompt> <userinput>oz-install -d3 -u centos64.tdl -x centos64-libvirt.xml</userinput></screen>
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>The <literal>-d3</literal> flag tells Oz to show
|
|
status information as it runs.</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>The <literal>-u</literal> tells Oz to do the
|
|
customization (install extra packages, run the commands)
|
|
once it does the initial install.</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>The <literal>-x <filename></literal> flag tells Oz
|
|
what filename to use to write out a libvirt XML file
|
|
(otherwise it will default to something like
|
|
<filename>centos64Apr_03_2013-12:39:42</filename>).</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
<para>If you leave out the <literal>-u</literal> flag, or
|
|
you want to edit the file to do additional customizations, you can
|
|
use the <command>oz-customize</command> command, using the libvirt
|
|
XML file that <command>oz-install</command> creates. For example:</para>
|
|
<screen><prompt>#</prompt> <userinput>oz-customize -d3 centos64.tdl centos64-libvirt.xml</userinput></screen>
|
|
<para>Oz will invoke libvirt to boot the image inside of KVM, then Oz will
|
|
ssh into the instance and perform the customizations.</para>
|
|
</section>
|
|
<section xml:id="vmbuilder">
|
|
<title>VMBuilder</title>
|
|
<para><link xlink:href="https://launchpad.net/vmbuilder"
|
|
>VMBuilder</link> (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.</para>
|
|
<para>The <link
|
|
xlink:href="https://help.ubuntu.com/12.04/serverguide/jeos-and-vmbuilder.html"
|
|
><citetitle>Ubuntu Server Guide</citetitle></link>
|
|
has documentation on how to use VMBuilder to create an
|
|
Ubuntu image.</para>
|
|
</section>
|
|
<section xml:id="boxgrinder">
|
|
<title>BoxGrinder</title>
|
|
<para>
|
|
<link xlink:href="http://boxgrinder.org/"
|
|
>BoxGrinder</link> 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.</para>
|
|
</section>
|
|
<section xml:id="veewee">
|
|
<title>VeeWee</title>
|
|
<para><link xlink:href="https://github.com/jedi4ever/veewee">
|
|
VeeWee</link> is often used to build <link
|
|
xlink:href="http://vagrantup.com">Vagrant</link>
|
|
boxes, but it can also be used to build KVM images.</para>
|
|
</section>
|
|
<section xml:id="packer">
|
|
<title>Packer</title>
|
|
<para><link xlink:href="https://packer.io">
|
|
Packer</link> is a tool for creating machine images for multiple platforms
|
|
from a single source configuration.
|
|
</para>
|
|
</section>
|
|
<section xml:id="imagefactory">
|
|
<title>imagefactory</title>
|
|
<para><link xlink:href="http://imgfac.org/"
|
|
>imagefactory</link> 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.</para>
|
|
</section>
|
|
<section xml:id="susestudio">
|
|
<title>SUSE Studio</title>
|
|
<para><link xlink:href="http://susestudio.com">SUSE
|
|
Studio</link> 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.</para>
|
|
</section>
|
|
</chapter>
|