1. 程式人生 > >OpenStack Oz自動化制作centos6.5鏡像

OpenStack Oz自動化制作centos6.5鏡像

openstack 鏡像 kvm Oz

openstack鏡像制作以往都是用傳統的KVM, virt-install加載本地iso文件啟動系統,繼而在系統裏配置一些必備的軟件和配置,手動繁瑣,耗時長。
openstack官網推薦幾款鏡像制作工具,下面簡要說明下:
https://docs.openstack.org/image-guide/create-images-automatically.html

1、Diskimage-builder
https://docs.openstack.org/diskimage-builder/latest/
diskimage-builder支持定制element,即鏡像中包含的元素。(比如創建用戶,安裝軟件包,進行某種配置)

用戶可以根據需要進行定義,然後再使用disk-image-create時指定。具體參考diskimage-builder指導。

diskimage-builder的原理也比較簡單,是在主機上創建虛擬機鏡像,然後通過掛載/chroot方式,通過kickstart自動完成鏡像內容的安裝。
elements比較像程序中的接口/插件機制,將element中規定目錄下的定制腳本執行,完成對鏡像的定制。
整個過程並不需要啟動虛擬機。

上邊工具主要是Linux鏡像的制作,並不支持windows鏡像的自動制作。

DIB把一些操作封裝成腳本,比如創建用戶(devuser)、安裝cloud-init(cloud-init)、配置yum源(yum)、部署tgtadm(deploy-tgtadm)等,這些腳本稱為elements,位於目錄diskimage-builder/diskimage_builder/elements,你可以根據自己的需求自己定制elements,elements之間會有依賴,依賴通過element-deps文件指定,比如elements centos7的element-deps為:

cache-url
redhat-common
rpm-distro
source-repositories
yum
DIB會首先下載一個base鏡像,然後通過用戶指定的elements,一個一個chroot進去執行,從而完成了鏡像的制作,整個過程不需要啟動虛擬機。這有點類似Dockerfile的構建過程,Dockerfile的每個指令都會生成一個臨時的容器,然後在容器裏面執行命令。DIB則每個elements都會chroot到鏡像中,執行elements中的腳本

感興趣的可以去官網深入了解更多語法


2、virt-builder
http://libguestfs.org/virt-builder.1.html

官網寫的也很詳細,語法也很簡單
virt-builder os-version
[-o|--output DISKIMAGE] [--size SIZE] [--format raw|qcow2]
[--arch ARCHITECTURE] [--attach ISOFILE]
[--append-line FILE:LINE] [--chmod PERMISSIONS:FILE]
[--commands-from-file FILENAME] [--copy SOURCE:DEST]
[--copy-in LOCALPATH:REMOTEDIR] [--delete PATH] [--edit FILE:EXPR]
[--firstboot SCRIPT] [--firstboot-command ‘CMD+ARGS‘]
[--firstboot-install PKG,PKG..] [--hostname HOSTNAME]
[--install PKG,PKG..] [--link TARGET:LINK[:LINK..]] [--mkdir DIR]
[--move SOURCE:DEST] [--password USER:SELECTOR]
[--root-password SELECTOR] [--run SCRIPT]
[--run-command ‘CMD+ARGS‘] [--scrub FILE] [--sm-attach SELECTOR]
[--sm-register] [--sm-remove] [--sm-unregister]
[--ssh-inject USER[:SELECTOR]] [--truncate FILE]
[--truncate-recursive PATH] [--timezone TIMEZONE] [--touch FILE]
[--uninstall PKG,PKG..] [--update] [--upload FILE:DEST]
[--write FILE:CONTENT] [--no-logfile]
[--password-crypto md5|sha256|sha512] [--selinux-relabel]
[--sm-credentials SELECTOR]
更重要的是可以自定義安裝,那麽對於openstack雲鏡像有了更多的靈活的選配。


2、Oz
強大的鏡像制作工具,支持諸多發行版linux
https://github.com/clalancette/oz/wiki
安裝
yum -y install oz

裝完後,你最好就重啟機器,你用ifconfig,可以看到virbr0這個網絡,不然你就安裝失敗。

配置Oz,默認Oz是使用raw格式,我的習慣是使用qcow2格式.
cat /etc/oz/oz.cfg
[paths]
output_dir = /data/nvme0n1/oz
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

[timeouts]
install = 3600
inactivity = 300
boot = 300
shutdown = 90

這個就是Oz的配置文件,我把默認文件格式改成qcow2.


創建配置文件,我們需要兩個配置文件,centos65.tdl 和centos65.ks
centos65.ks
install
text
key --skip
keyboard us
lang en_US.UTF-8
skipx
rootpw Ct@2017Yun!@$%.CN
firewall --disabled
authconfig --enableshadow --enablemd5
selinux --disabled
logging --level=info
reboot
services --disabled="avahi-daemon,iscsi,iscsid,firstboot,kdump" --enabled="network,sshd,rsyslog,tuned"
timezone --utc Asia/Shanghai
network --bootproto=dhcp --device=eth0 --onboot=on
bootloader --location=mbr --append="console=tty0 console=ttyS0,115200" --location=mbr --driveorder="sda" --timeout=1
zerombr yes
clearpart --all

part / --fstype ext4 --size=2048 --grow

%post

cat > /etc/sysconfig/network-scripts/ifcfg-eth0 << EOF
DEVICE="eth0"
BOOTPROTO="dhcp"
ONBOOT="yes"
TYPE="Ethernet"
USERCTL="yes"
PEERDNS="yes"
IPV6INIT="no"
PERSISTENT_DHCLIENT="1"
EOF

echo "ttyS0" >> /etc/securetty
cat <<EOF > /etc/init/ttyS0.conf
start on stopped rc RUNLEVEL=[2345]
stop on starting runlevel [016]
respawn
instance /dev/ttyS0
exec /sbin/agetty /dev/ttyS0 115200 vt100-nav
EOF

#sed_profile
sed -i ‘s/#PermitRootLogin yes/PermitRootLogin yes/g‘ /etc/ssh/sshd_config
sed -i ‘s/#UseDNS yes/UseDNS no/g‘ /etc/ssh/sshd_config
sed -i ‘s/GSSAPIAuthentication yes/GSSAPIAuthentication no/g‘ /etc/ssh/sshd_config

#yum clean all
rm -rf /root/
rm -rf /var/log/anaconda

rm -rf /var/log/message

/var/log/boot.log
/var/log/messages
/var/log/cloud-init-output.log
/var/log/yum.log
%end
%packages --nobase --excludedocs


tdl文件是xml格式的。不知道博客為什麽不支持此格式
centos65.tdl
<template>
<name>centos65</name> #版本最好寫對
<os>
<name>CentOS-6</name>
<version>5</version>
<arch>x86_64</arch>#cpu架構64位
<install type=‘iso‘>#install源,這裏選擇本地iso,當然也可以url指定網上的iso
<iso>file:///data/iso/CentOS-6.5-x86_64-minimal.iso</iso>
</install>
<rootpw>123456</rootpw>#root密碼
</os>
<disk>
<size>20</size>#磁盤大小
</disk>
<description>CentOS 6.5 x86_64</description>
<packages>#需要安裝的軟件包,名字得寫全
<package name=‘acpid‘/>
<package name=‘cloud-utils‘/>
<package name=‘cloud-init‘/>
<package name=‘parted‘/>
<package name=‘NetworkManager-*‘/>
</packages>
<repositories>#設置yum源,這裏寫阿裏源
<repository name=‘aliyun-Base‘>
<url>http://mirrors.aliyun.com/centos/$releasever/os/$basearch/</url>
<signed>no</signed>
</repository>
<repository name=‘epel‘>
<url>http://mirrors.aliyun.com/epel/6/$basearch</url>
<signed>no</signed>
</repository>
</repositories>
<commands>

<command name=‘install_linux_root_resize‘>#cloud-init的resize的包,centos6系列如果不裝此包無法擴展根分區大小

cd /root
unzip linux-rootfs-resize-master.zip
cd linux-rootfs-resize-master
bash ./install
</command>

<command name=‘profile‘>#自定義命令
echo "NOZEROCONF=yes" >> /etc/sysconfig/network
ln -s /boot/grub/grub.conf /etc/grub.conf
rm -rf /etc/udev/rules.d/70-persistent-net.rules
touch /etc/udev/rules.d/75-persistent-net-generator.rules
chmod +x /var/lib/cloud/scripts/per-boot/resetroot
</command>

<command name=‘services‘>#關於服務開機自啟
service sshd restart
service iptables stop
service ip6tables stop
service acpid start
service NetworkManager start
chkconfig iptables off
chkconfig ip6tables off
chkconfig acpid on
chkconfig NetworkManager on
chkconfig cloud-init on
chkconfig cloud-final on
chkconfig cloud-config on
chkconfig cloud-init-local on
</command>

<command name=‘clear-logs‘>#清空log文件
rm -rf /root/
rm -rf /var/log/anaconda

rm -rf /var/log/message
rm -rf /var/log/messages
rm -rf /etc/yum.repos.d/aliyun-Base.repo
rm -rf /etc/yum.repos.d/epel.repo
yum clean all
yum makecache

/var/log/boot.log
/var/log/messages
/var/log/cloud-init-output.log
/var/log/yum.log
</command>

</commands>
<files>#這裏可以指定服務器本地文件,對應上傳到鏡像中的位置,比如傳個包或者配置文件替換默認配置文件
<file name="/root/linux-rootfs-resize-master.zip" type="url">
file:///data/nvme0n1/oz/linux-rootfs-resize-master.zip
</file>
<file name="/var/lib/cloud/scripts/per-boot/resetroot" type="url">
file:///data/nvme0n1/oz/resetroot
</file>
<file name="/etc/cloud/cloud.cfg" type="url">
file:///data/nvme0n1/oz/cloud.cfg_centos6
</file>
</files>
</template>


編輯好執行命令,配置文件路徑一定要寫對
oz-install -p -u -d3 -a centos65.ks centos65.tdl -x centos65-libvirt.xml
以下為輸出截圖
技術分享圖片

OpenStack Oz自動化制作centos6.5鏡像