本文以一个Centos6.5的ISO镜像为基础,添加一些自己的RPM包或者Kickstart文件,重新打包成一个新的ISO镜像。
1. 建立文件目录结构
~/Centos6.5
+ -- isolinux
| + -- Packages
| + -- ks
+ -- utils
+ -- CoreBase
+ -- PackISO
+ -- AddRPM
2. 拷贝系统文件到新建目录
mount -o loop 挂载Centos6.5.iso到一个目录,然后把所有文件拷贝到isolinux下,注意拷贝到.discinfo文件。再把../isolinux/isolinux/* 拷贝出来
# mv isolinux/Packages/* PackISO
要使用kickstart的话,把ks文件放到ks文件夹中即可
3.决定打包哪些RPM
Centos6.5核心基本包的选择:
使用一个perl脚本来解析comps.xml文件
(1)安装perl:
# cd PackISO
rpm -Uvh perl-Compress-Raw-Zlib-2.021-136.el6.x86_64.rpm\
perl-Compress-Zlib-2.021-136.el6.x86_64.rpm\
perl-HTML-Parser-3.64-2.el6.x86_64.rpm\
perl-HTML-Tagset-3.20-4.el6.noarch.rpm\
perl-IO-Compress-Zlib-2.021-136.el6.x86_64.rpm\
perl-IO-Compress-Base-2.021-136.el6.x86_64.rpm\
perl-libwww-perl-5.833-2.el6.noarch.rpm\
perl-URI-1.40-2.el6.noarch.rpm\
perl-XML-Parser-2.36-7.el6.x86_64.rpm\
perl-XML-Simple-2.18-6.el6.noarch.rpm
(2)perl工具
follow_deps.pl
http://smorgasbork.com/content/follow_deps.txt
parse_comps.pl
http://smorgasbork.com/content/parse_comps.txt
两个工具放在utils目录下
(3)comps.xml
# cp isolinux/repodata/b4e0b9342ef85d3059ff095fa7f140f654c2cb492837de689a58c581207d9632-comps.xml ./comps.xml
(4)选择核心基本包
# cd CoreBase
#~/Centos6.5/utils/parse_comps.pl ~/Cnetos6.5/comps.xml ~/Centos6.5/PackISO x86_64
(5)添加自己的rpm包
比如openstack相关的安装包,全部放到AddRPM文件夹下
(6)检测rpm包的依赖问题
把全部要打包的文件全部拷贝到~/Centos6.5/isolinux/Packages
# cp ~/Centos6.5/CoreBase/*.rpm ~/Centos6.5/isolinux/Packages
# cp ~/Centos6.5/AddRPM/*.rpm ~/Centos6.5/isolinux/Packages
使用follow_deps.pl从PackISO中得到相关依赖的rpm包:
# cd ~/Centos6.5/isolinux/Packages
# ~/Centso6.5/utils/follow_deps.pl ~/Centos6.5/PackISO x86_64
检测依赖:
# mkdir /tmp/testdb
# rpm --initdb --dbpath /tmp/testdb
# rpm --test --dbpath /tmp/testdb -Uvh *.rpm
把还需要到的依赖包加到Packages里面,直到没有依赖问题。
(7)打包ISO
# cd isolinux
# declare -x discinfo=`head -1 .discinfo`
# createrepo -u "media://$discinfo" -g ~/Centos6.5/comps.xml .
# cd ~/Centos6.5
# mkisofs -o custom.iso -b isolinux.bin -c boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -R -v -T isolinux/