http://www.chenshake.com/oz-making-centos-mirror/
http://www.iyunv.com/thread-71346-1-1.html
https://fedoraproject.org/wiki/Getting_started_with_OpenStack_Nova#See_Also
对于Openstack的镜像来说,需要在image里安装cloud init,这样才能注入密钥,网络的设置,也是需要cloud init。
做镜像的步骤,比较繁琐,其实就是一个kvm的image,Oz这个工具,可以很方便让你定制各种操作系统的image,功能还是很强大的,Oz开发和更新还是非常频繁,非常值得关注的一个软件
目前EPEL源已经有Oz的安装包,更新还是非常及时,和开发同步,并且Redhat也是推荐使用这个工具来创建镜像。由于Oz需要使用网络来自动化创建镜像,所以建议别在Openstack的环境下进行使用,建议采用一台干净的机器来做。
准备centos7ISO创建一个虚机,干净的虚机
操作记录:
1、安装epel源
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# ls
CentOS-Base.repo CentOS-CR.repo CentOS-Debuginfo.repo CentOS-fasttrack.repo CentOS-Media.repo CentOS-Sources.repo CentOS-Vault.repo
[root@localhost yum.repos.d]#
[root@localhost yum.repos.d]# yum install epel-release
[root@localhost yum.repos.d]# ls
CentOS-Base.repo CentOS-CR.repo CentOS-Debuginfo.repo CentOS-fasttrack.repo CentOS-Media.repo CentOS-Sources.repo CentOS-Vault.repo epel.repo epel-testing.repo
2、安装oz工具
[root@localhost yum.repos.d]# yum install -y libguestfs-tools
[root@localhost yum.repos.d]# yum install oz
oz安装没有成功,所以用下载的RPM包进项安装
[root@localhost yum.repos.d]# yum install python-libguestfs
[root@localhost yum.repos.d]# yum install python-lxml
[root@localhost yum.repos.d]# yum install libvirt-python
[root@localhost yum.repos.d]# yum install libvirt
root@localhost yum.repos.d]# yum install m2crypto
首先得安装以上依赖包
[root@localhost yum.repos.d]# rpm -ivh /root/oz-0.15.0-1.el7.noarch.rpm
3、查看安装结果
[root@localhost yum.repos.d]# ls /etc/oz/
id_rsa-icicle-gen id_rsa-icicle-gen.pub oz.cfg
[root@localhost yum.repos.d]# find / -name oz
/etc/oz
/var/lib/oz
/usr/lib/python2.7/site-packages/oz
重启机器后会看见两个网卡信息virbr0 和 virbr0-nic ,说明oz工具安装成功了!
4、/etc/oz/oz.cfg 初始内容
[paths]
output_dir = /var/lib/libvirt/images
data_dir = /var/lib/oz
screenshot_dir = /var/lib/oz/screenshots
# sshprivkey = /etc/oz/id_rsa-icicle-gen
[libvirt]
uri = qemu:///system
image_type = raw
# type = kvm
# bridge_name = virbr0
# cpus = 1
# memory = 1024
[cache]
original_media = yes
modified_media = no
jeos = no
[icicle]
safe_generation = no
5、配置文件说明
利用oz自动创建镜像需要两个配置文件 *.tdl *.ks
------------------*.tdl------xml文件---------确定ISO文件来源--------
创建tdl文件更多参考例子:https://github.com/rcbops/oz-image-build/tree/master/templates
从tdl文件安装支持两种格式:一种是iso,另一种是url,它们之间的差异是:采用iso类型时oz需要能够获取源镜像文件;URL类型则是从远程服务器(如cobbler服务器上)获取iso解压后的文件
6、运用命令
[root@localhost oz_cfg]# oz-install -p -u -d3 -a rhel6.5.ks rhel6.5.tdl
示例:
配置Oz,默认Oz是使用raw格式,我们使用qcow2格式
vim /etc/oz/oz.cfg
[paths]
output_dir = /var/lib/libvirt/images
data_dir = /var/lib/oz
screenshot_dir = /var/lib/oz/screenshots
[libvirt]
uri = qemu:///system
#image_type = raw
image_type = qcow2
# type = kvm
bridge_name = virbr0
# cpus = 1
# memory = 1024
[cache]
original_media = yes
modified_media = no
jeos = no
[icicle]
safe_generation = no
Oz内置了各个操作系统的自动化安装模板,路径在 /usr/lib/python2.6/site-packages/oz/auto
建立TDL模板文件,及修改RHEL6.auto文件
RHEL6.tdl:
<template>
<name>RHEL6.4</name>
<os>
<name>RHEL-6</name>
<version>4</version>
<arch>x86_64</arch>
<install type='iso'>
<iso>file:///home/rhel-server-6.4-x86_64-dvd.iso</iso>
</install>
<rootpw>root</rootpw>
</os>
<description>RHEL 6.4 x86_64</description>
<repositories>
<repository name='repo1'>
<url>http://http://mirrors.yun-idc.com/epel/6/x86_64</url>
<signed>no</signed>
</repository>
<repository name='repo2'>
<url>http://ftp.sjtu.edu.cn/centos/6/os/x86_64</url>
<signed>no</signed>
</repository>
<repository name='repo3'>
<url>http://mirrors.kernel.org/centos/6/os/x86_64</url>
<signed>no</signed>
</repository>
<repository name='repo4'>
<url>http://mirrors.kernel.org/centos/6/updates/x86_64</url>
<signed>no</signed>
</repository>
<repository name='repo5'>
<url>http://mirrors.kernel.org/fedora-epel/6/x86_64</url>
<signed>no</signed>
</repository>
<repository name='repo6'>
<url>http://repos.fedorapeople.org/repos/openstack/cloud-init/epel-6</url>
<signed>no</signed>
</repository>
</repositories>
<packages>
<package name='epel-release'/>
<package name='cloud-utils'/>
<package name='cloud-init'/>
<package name='vnc'/>
<package name='vnc-server'/>
</packages>
<commands>
<command name='post'>
sed -i '/^HWADDR/d' /etc/sysconfig/network-scripts/ifcfg-eth0
echo "NOZEROCONF=yes" >> /etc/sysconfig/network
echo "dns-nameservers 192.168.244.1" >> /etc/sysconfig/network
echo "nameserver 8.8.8.8" >> /etc/resolv.conf
echo -n > /etc/udev/rules.d/70-persistent-net.rules
echo -n > /lib/udev/rules.d/75-persistent-net-generator.rules
sed -i 's/disable_root: 1/disable_root: 0/g' /etc/cloud/cloud.cfg
sed -i 's/ssh_pwauth: 0/ssh_pwauth: 1/g' /etc/cloud/cloud.cfg
sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config
service sshd restart
iptables -A INPUT -p tcp --dport 5000:6000 -j ACCEPT
</command>
</commands>
</template>
RHEL6.auto:
install
text
key --skip
keyboard us
lang en_US.UTF-8
skipx
network --device eth0 --bootproto dhcp
rootpw %ROOTPW%
firewall --disabled
authconfig --enableshadow --enablemd5
selinux --permissive
timezone --utc America/New_York
bootloader --location=mbr --append="console=tty0 console=ttyS0,115200"
zerombr yes
clearpart --all
part /boot --fstype ext4 --size=200
part pv.2 --size=1 --grow
volgroup VolGroup00 --pesize=32768 pv.2
logvol swap --fstype swap --name=LogVol01 --vgname=VolGroup00 --size=768 --grow --maxsize=1536
logvol / --fstype ext4 --name=LogVol00 --vgname=VolGroup00 --size=1024 --grow
reboot
%packages
@base
%post
默认只安装base包,可以自定配置如下:
. . . reboot %packages --ignoremissing @base @basic-desktop @chinese-support @desktop-platform @desktop-platform-devel @development @general-desktop @graphical-admin-tools @input-methods @internet-browser @java-platform @gnome-desktop @network-tools @remote-desktop-clients @server-platform @server-platform-devel @x11 %post
通过oz-install生成镜像
oz-install -d3 -u RHEL6.tdl
镜像创建完后,会保存在 /var/lib/libvirt/images ,对image进行压缩
qemu-img convert -c /var/lib/libvirt/images/RHEL6.4.qcow2 -O qcow2 /root/RHEL6.4.qcow2
然后就可以使用建好的镜像了。