快速部署是虚拟化时代的重要特性,虚拟机镜像模板(简称vm template)是快速部署的基石,所以管理员如何安装和定制化vm template也是一门学问。

目前有好多种vm template制作工具,比较流行的有:图形界面的virt-manager,来自libguestfs家族的virt-builder,还有openstack官方自己的diskimage-builder等。它们的工作原理大同小异,都是先通过libvirt调用kvm安装guest OS,然后进行定制化:包括安装额外的软件包,更改主机名,去除网卡mac地址和添加ssh密钥等。经过精心挑选和测试,我最终选择了link:[Oz]。

各个linux发行版一般都会提供VM template,本文仅针对不满足于官方vm template的系统管理员

Oz的安装

我的host是一台centos6,官方repo自带了oz的软件包:

$ sudo yum install oz

不过如果需要安装最新的版本,需要自行编译安装:

$ sudo yum install git rpm-build
$ cd /tmp
$ git clone https://github.com/clalancette/oz.git
$ cd oz
$ sudo make rpm
$ cd ~/rpmbuild/RPMS/noarch
$ sudo rpm -ivh oz-*

至此就完成了oz的安装,比较简单。接下来需要修改oz的配置文件:

/etc/oz/oz.cfg
[paths]
output_dir = /var/lib/libvirt/images (1)
data_dir = /var/lib/oz
screenshot_dir = /var/lib/oz/screenshots (2)
# sshprivkey = /etc/oz/id_rsa-icicle-gen

[libvirt]
uri = qemu:///system
#image_type = qcow2 (3)
image_type = raw
type = kvm
bridge_name = br0 (4)
cpus = 1 (5)
memory = 1024 (6)

[cache]
original_media = yes
modified_media = no
jeos = no

[icicle]
safe_generation = no
1 生成vm template镜像的存储位置
2 安装过程的截图目录
3 镜像的存储格式
4 guest OS跟外界桥接的网口,若该设置出错,则guest OS无法访问互联网
5 guest OS的cpu
6 guest OS的内存

如何使用oz-install创建一个VM image?

oz-install是xx推出的一个自动安装VM的工具,目前支持centos、debian、ubuntu等主流的操作系统,甚至包括windows 7、windows 2003、2008等,非常强大。

oz-install -p -a ./Debian7.auto -x  debian7.tdl -d3 d7-32-tmplt.xml -a 指定auto文件 -x 输出的xml文件 -d 3 loglevel,最详细为4 -p 清除之前所创建的vm,包括image 1. debian.auto详见"debian preseed" 2. centos.auto 详见“centos6 kickstart”

配置文件 /etc/oz/oz.cfg 安装template后的镜像文件存放位置 /var/lib/libvirt/images 在安装template的过程中,oz-install会将镜像文件拷贝至 /var/lib/oz/isos 一段时间后要定时清理,否则会有大量的垃圾。

oz-install的不足之处:oz-install每次vm template,都需要将iso解压,将安装文件拷贝至一个目录,然后方能安装,即便是同一个iso,也会重复这个动作,浪费时间。

如何实时查看oz-install安装guest的过程

oz-install中的guest.py这个文件定义了kvm xml,我们知道可以通过 来创建vnc,也就是说,如果oz-install利用kvm来安装guest的时候,如果打开了vnc,就可以通过vncviewer来实时查看guest的安装过程。

定制模版:

假如需要对这个模版进行定制,譬如说手工安装one-context-4.4.0.rpm,可以:

guestmount -a debian7-32.img -i --rw /mnt/mountpoint
cp one-context-4.4.0.rpm /mnt/mountpoint/var/tmp

然后启动vm,

virsh create d7-32-kvm-raw.xml --console
rpm -Uvh /var/tmp/one-context-4.4.0.rpm

参考:

安装第一个vm template

定制化vm template

Oz可以做三件事:

  1. 安装操作系统;

  2. 定制化操作系统;

  3. 生成操作系统的元数据信息;

安装操作系统

Oz可以安装多种操作系统,它利用操作系统内置的自动安装功能实现vm template最小化安装,譬如redhat系的kickstart,debian系的preseed

定制化操作系统

生成操作系统的元数据