利用oz制作RHEL系统镜像

以前研究openstack,比较烦的就是制作镜像和网络这块。

网络: Havana版本之前的网络这块功能比较差,配置也相对复杂些,再加上自身基础不好,所以理解起来相当困难。不过好在Havana版本中网络这块有了很大的改善,配置和界面都很友善。据说UOS的界面很华丽,期待……

制作镜像:之前制作镜像都是采用”先装一次系统,做成模板,然后通过glance上传“这个土方法,而且还要制作Rhel5/6、Centos5/6、Ubuntu、Windows Server 2003/2008等各种系统的模板,相对麻烦。

 

最近在研究H版的openstack过程中,发现以前制作镜像的方法不好使,老是获取不到分配的IP。无奈之下只好尝试通过别的方法制作镜像,于是就发现了oz这个工具,突然发现制作镜像是如此easy。

下面以制作RHEL 6.3镜像为例:

  • 首先,安装oz工具:

    yum install -y oz libguestfs-tools

  • 其次,创建一个TDL文件 6.3.tdl:

    <template>

    <name>rhel63_x86_64</name>

    <description>RedHat 6.3 x86_64 template</description>

    <os>

    <name>RHEL-6</name>

    <version>3</version>

    <arch>x86_64</arch>

    <rootpw>rootpasswd</rootpw>

    <install type=’iso’>

    <iso>file:///u01/rhel-server-6.3-x86_64-dvd.iso</iso>

    </install>

    </os>

    <commands>

    <command name=’console’>

    sed -i ‘s/ rhgb//g’ /boot/grub/grub.conf

    sed -i ‘s/ quiet//g’ /boot/grub/grub.conf

    </command>

    <command name=’update’>

    sed -i ‘/^HWADDR/d’ /etc/sysconfig/network-scripts/ifcfg-eth0

    sed -i ‘/^UUID/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

    sed -i ‘/^SELINUX=/s/enforcing/disabled/‘ /etc/selinux/config

    </command>

    </commands>

    </template>

  • 通过oz-install生成镜像(镜像会生成在/var/lib/libvirt/images/目录下)

    oz-install -u -d3 6.3.tdl

  • 最后,通过glance上传镜像

    glance add name=RHEL-6.3 is_public=true container_format=bare disk_format=raw < /var/lib/libvirt/images/rhel63_x86_64.dsk
     

其它系统TDL模板文件:

RHEL5.8:

<template>

<name>rhel58_x86_64</name>

<description>RedHat 5.8 x86_64 template</description>

<os>

<name>RHEL-5</name>

<version>U8</version>

<arch>x86_64</arch>

<rootpw>rootpasswd</rootpw>

<install type=’iso’>

<iso>file:///u01/rhel-server-5.8-x86_64-dvd.iso</iso>

</install>

</os>

<commands>

<command name=’update’>

sed -i ‘/^HWADDR/d’ /etc/sysconfig/network-scripts/ifcfg-eth0

sed -i ‘/^SELINUX=/s/enforcing/disabled/‘ /etc/selinux/config

</command>

</commands>

</template>
RHEL6.4:
<template>

<name>rhel64_x86_64</name>

<description>RedHat 6.4 x86_64 template</description>

<os>

<name>RHEL-6</name>

<version>4</version>

<arch>x86_64</arch>

<rootpw>rootpasswd</rootpw>

<install type=’url’>

<url>http://rhn.uoregon.edu/pub/isos/full/RHEL-6.4/x86_64/</url&gt;

</install>

</os>

<commands>

<command name=’console’>

sed -i ‘s/ rhgb//g’ /boot/grub/grub.conf

sed -i ‘s/ quiet//g’ /boot/grub/grub.conf

sed -i ‘s/ console=tty0 / serial=tty0 console=ttyS0,115200n8 /g’ /boot/grub/grub.conf

</command>

<command name=’update’>

sed -i ‘/^HWADDR/d’ /etc/sysconfig/network-scripts/ifcfg-eth0

sed -i ‘/^UUID/d’ /etc/sysconfig/network-scripts/ifcfg-eth0

echo -n > /lib/udev/rules.d/75-persistent-net-generator.rules

sed -i ‘/^SELINUX=/s/enforcing/disabled/‘ /etc/selinux/config

</command>

</commands>

</template>
参考文章:
https://access.redhat.com/site/documentation/en-US/Red_Hat_OpenStack/3/html/Installation_and_Configuration_Guide/Building_a_Custom_Disk_Image.html
https://github.com/rackerjoe/oz-image-build