分类: LINUX
2012-02-16 00:40:20
一. 制作环境的准备
1. 安装制作发行版的工具:
[shell]# yum -y install anaconda repodata createrepo mkisofs
[shell]# yum -y install anaconda-runtime createrepo yum-utils anacondaanaconda-help busybox-anaconda mkisofs
2. 安装Centos6.0系统
由于方便制作,我们可以在VMware、vbox、xen等虚拟环境中进行安装,这里我们选用了VMware作为制作环境。
(1) 在官方网站上下载CentOS-6.0-x86_64-bin-DVD.iso镜像文件
Wget
Wget
(2) 创建VM虚拟机
CPU:2 core / MEM:4G / HD:20G
由于在制作过程中需要拷贝大量数据,所以硬盘尽量保持20G以上。
(3) 生成packages.list软件清单
(由于install.log文件在root目录,所以该操作在root目录进行)
[英文版centos执行此命令]
[shell]# cat install.log | grep Installing | sed 's/Installing //g' > /root/packages.list
[中文版centos执行此命令]
[shell]# cat install.log | grep 安装 | sed 's/安装 //g' > /root/packages.list
生成后,需要仔细看该文件,一般会在某些文件开始部分如“1:”这样的字符,需要删除这些字符,否在后面执行copy动作会报错。
二. 创建定制系统(My4399OS)目录
1. 光盘结构及文件简介
*isolinux 目录存放光盘启动时的安装界面信息
*images 目录包括了必要的启动映像文件
*Packages 目录存放安装软件包及信息
*.discinfo 文件是安装价质的识别信息
*lnmp 目录存放定制系统配置文件及LNMP安装脚本
2. 创建设/disk目录,挂载光盘
[shell]# mkdir /disk
[shell]# mkdir /mnt/cdrom
[shell]# mount –o loop /dev/cdrom /mnt/cdrom
3. 拷贝光盘目录
[shell]# cd /mnt/cdrom
[shell]# ls -a .|grep –v “Packages”|xargs -i cp -rp {} /disk
//将所有文件和文件夹拷贝到/disk,除了Packages目录
[shell]# mkdir /disk/Packages
4. 拷贝packages.list软件清单
编写复习脚本copyrpms.sh,脚本的功能是为了从packages.list获取软件清单,然后将其逐一地拷贝到/disk/Packages目录下。
[shell]# ./copyrpms.sh -c /mnt/cdrom/Packages /disk/Packages /root/packages.list
//从光盘中拷贝packages.list里的软件清单到/disk/Packages目录里
这
里已经拷贝了定制centos系统最基本的rpm包,但实际上我们的应用环境还需用到更多的rpm包。这种情况我们应该做的是先找出我们还需要的软件包,
如:gcc、gd、vnstat等,然后一个一个手动将它们拷贝到/disk/Packages目录里。但这里要注意的是,这些包中很可能存在依赖关系,
如果你没有把它们相依赖的rpm包同时拷贝到/disk/Packages目录里,那在安装过程中将会提示找不到所需依赖包。
我们可以使用yum install命令找出它们的依赖包,然后将其依赖包记录到一个文本文件中,如add_soft.txt,再使刚才的脚本;
[shell]# ./copyrpms.sh -f /mnt/cdrom/Packages --test /root/soft.txt --all
//这条命令是在光盘中找出soft.txt中对应的软件清单,只显示不拷贝,--all为匹配规则,fr,br分别表示为“*str”、“str*”,all为“*str*”。
[shell]# ./copyrpms.sh -f /mnt/cdrom/Packages /disk/Packages /root/soft.txt –all
//在光盘中找出soft.txt中对应的软件清单,直接拷贝到/disk/Packages
经过一系列的复制就完成了你要定制的RPM包(在/Disk/Packages/目录下)。
5. 定制安装控制文件ks.cfg
ks文件主要分为三个部分:
a) 系统安装及配置
b) 自定义安装准备(%post --nochroot)
c) 用户自定义安装(%post)
系
统安装及配置一般写在ks.cfg文件最前面,系统安装设置以%post
--nochroot为结束标志,接着是用户自定义安装准备部分,以“%post
--nochroot”作为开始,以“%post”作为结束,自定义安装部分以“%post”作为开始。一般方便可以直接由root下面的
anaconda-ks.cfg修改。
[shell]# cp /root/anaconda-ks.cfg /disk/isolinux
ks.cfg基本的书写样式:
除了cdrom安装方式外,还可以使用网络或硬盘安装方式;其示例如下:
url --url
nfs --server=192.168.2.62 --dir=/centos6
harddrive --partition=sda1 --dir=/centos6 //sda1是像文件所在的硬盘标识
以上ks.cfg示例属于系统安装及配置部份,另外的%post和%post –nochroot作用是当系统初始化安装完毕后需要执行的工作。例如:
%post --nochroot
# Mount CDROM
mkdir -p /mnt/cdrom
mount -r -t iso9660 /tmp/cdrom /mnt/cdrom
cp /mnt/cdrom/lnmp.tar.gz /mnt/sysimage/tmp/lnmp.tar.gz> /dev/null
cd /mnt/sysimage/tmp/
tar -zxvf lnmp.tar.gz > /dev/null
cp -R /mnt/sysimage/tmp/boot/* /mnt/sysimage/boot/ >/dev/null 2>/dev/null
cp -R /mnt/sysimage/tmp/etc/* /mnt/sysimage/etc/ >/dev/null 2>/dev/null
# Unmount CDROM
umount /mnt/cdrom
%post --nochroot 表示允许你指定你想在chroot环境之外运行的命令,由Linux系统安装进程在系统安装完成后,会卸载光盘,因此,象复制安装介质中的文件或RPM之类的任务将不能被执行。此时就需要用“%post --nochroot”选项。
[备注:经过测试在centos6.x系统无法在%post --nochroot环境下挂载光盘,所以这里只适合在centos5.x系列。其centos6.x的挂载方式在下面的%post中说明。]
%post 表示系统安装完成后,要运行的脚本,相当于在root环境下进行的操作,与在真实linux系统下进行操作完全一致。此时光盘已经被系统安装程序自动卸载。一般这里做一些系统的优化调整。
%post
chkconfig sendmail off
chkconfig --level 3 iptables on
chkconfig --level 2345 nfslock off
chkconfig --level 2345 portmap off
chkconfig --level 2345 crond on
[备注:由于centos6.x系统无法在--nochroot环境下挂载,只能在%post下挂载,挂载方式跟在真实linux环境下一致,命令和挂载路径也一致。]
Tips:手册后面附件为:本My4399_6.0系统的配置文件ks.cfg,重命为my4399.cfg。
6. 修改isolinux.cfg文件
将/Disk/isolinu/目录下的isolinux.cfg修改如下:
default auto
label auto
kernel vmlinuz
append ks=cdrom:/isolinux/ks.cfg initrd=initrd.img
append指定ks文件的读取路径,如果ks.cfg更名为其他名称,即在此修改。
append ks=cdrom:/isolinux/my4399.cfg
7. 修改安装界面文本标题
这
里我们可以去掉安装过程中的CentOS字样,在安装光盘里面有两个.buildstamp文件,一个位于stage2.img中,一个位于
initrd.img中,安装光盘运行时读取的是initrd.img中的那个.buildstamp文件,所以只要把initrd.img文件改了就可
以了。
(1) 解压initr.dimg文件
2.6内核中的initrd.img采用cpio压缩,不再是2.4内核使用的ext2格式,无法使用mount-o loop 挂载。需要使用gunzip解压缩,然后再利用cpio给img解包。
# cd /disk/isolinux/
# cp initrd.img /tmp/initrd.img.gz
# cd /tmp
# gunzip initrd.img.gz
# mkdir initrd
# mv initrd.img initrd
# cd initrd
# cpio -ivmd < initrd.img
然后修改.buildstamp文件,将CentOS改为LTOS即可.
(2) 制作initrd.img文件
假设当前目录位于准备好的initrd文件系统的根目录下;
# find . | cpio -c -o >../initrd.img
# cp initrd.img /disk/isolinux/
Tips1:安装界面文本修改后如《图例一》所示,“Welcome to My4399 os for x86_64”。
8. 生成comps.xml
comps.xml
文件中包含了安装时用户所见到的与rpm相关的所有内容,它会检查Packages下的RPM包的依赖关系,安装时如果缺少依赖包,它会提示您哪个RPM
包需要哪些依赖库。同时它的角色就是相当于图形安装时选择软件包那个环节。主要由三部分组成,首先是组列表,它描述了在安装过程中需要的不同的组(或组
件),包括组名、组的描述和包含的RPM包;其次是组的层次结构,它将组分成不同的类,并定义了组的一个顺序,从而可以决定哪些组需要先安装;最后为一系
列RPM包以及它们之间的依赖关系。
下面先进入/disk/repodata 目录,将“*-x86_64-comps.xml”文件改为“comps.xml”,并且将其他文件删除。由于centos6.0下的comps.xml文件名很长,这里“*”为省略符,实际操作时输入完整文件名。
[shell]# cd /disk/ repodata
[shell]# mv *-comps.xml comps.xml
[shell]# ls .|grep -v “comps.xml”|xargs -i rm -f {}
然后返回到/disk根目录,就可以重新开始生成comps.xml文件了。
[shell]# cd /disk/
[shell]# createrepo -g repodata/comps.xml ./
[shell]# declare -x discinfo=`head -1 .discinfo`
[shell]# createrepo -u "media://$discinfo" -g repodata/comps.xml /disk/
到这里,comps.xml文件和其他相关联的文件已被重新生成到repodata目录下。
Tips2:如果你新增或删除了Packages目录的RPM包,请重新生成comps.xml文件。