首先我们来看看环境准备:

1、一台刚安装好的、符合业务要求的系统

2、新装系统的/root 目录下 install.log 和 anaconda-ks.cfg 文件,之后会用到

3、需要添加的安装包

4、CentOS 6.7镜像文件或者光盘

1 [root@localhost ~]# yum -y install anaconda createrepo mkisofs rsync

一、插入光盘,挂载DVD镜像,创建相关目录

1 [root@localhost ~]# mount /dev/cdrom /mnt            #挂载光盘镜像
2 [root@localhost ~]# mkdir -p /root/iso/Packages      #存放当前系统里已安装的包
3 [root@localhost ~]# mkdir -p /root/iso/MyPackages    #存放自定义安装包

二、centos系统在安装包时,包名都记录在root目录install.log文件里,我们可以从中提取出来

1 awk '/Installing/{print $2}' /root/install.log | sed 's/^[0-9]*://g' >/root/package.txt

三、从挂载的光盘镜像中提取出需要的安装包,放到/root/iso/Packages目录里

1 [root@localhost ~]# cat test.sh 
2 #!/bin/bash3 Packages='/mnt/Packages' #挂载的光盘镜像中存放安装包的路径4 i='/root/iso/Packages/'  #新镜像存放安装包的路径5 while read line6 do7 cp ${Packages}/${line}*.rpm  /${i} || echo "$line don't cp......."8 done < /root/package.txt9 10 [root@localhost ~]# sh test.sh

四、把镜像需要的其他文件也拷贝到iso目录下

[root@localhost ~]# rsync -a --exclude=Packages --exclude=repodata /mnt/  /root/iso
[root@localhost ~]# ll iso/
total 112
-rw-------. 1 root root  1539 May 30 01:18 anaconda-ks.cfg
-r--r--r--. 1 root root    14 Nov 29  2013 CentOS_BuildTag
dr-xr-xr-x. 3 root root  4096 Nov 29  2013 EFI
-r--r--r--. 1 root root   212 Nov 28  2013 EULA
-r--r--r--. 1 root root 18009 Nov 28  2013 GPL
dr-xr-xr-x. 3 root root  4096 Nov 29  2013 p_w_picpaths
dr-xr-xr-x. 2 root root  4096 May 29 23:16 isolinux
drwxr-xr-x. 2 root root  4096 May 30 01:17 MyPackages
drwxr-xr-x. 2 root root 36864 May 30 19:55 Packages
-r--r--r--. 1 root root  1354 Nov 28  2013 RELEASE-NOTES-en-US.html
-r--r--r--. 1 root root  1706 Nov 28  2013 RPM-GPG-KEY-CentOS-6
-r--r--r--. 1 root root  1730 Nov 28  2013 RPM-GPG-KEY-CentOS-Debug-6
-r--r--r--. 1 root root  1730 Nov 28  2013 RPM-GPG-KEY-CentOS-Security-6
-r--r--r--. 1 root root  1734 Nov 28  2013 RPM-GPG-KEY-CentOS-Testing-6
-r--r--r--. 1 root root  4060 May 30 01:18 TRANS.TBL

五、执行createrepo程序生成repodata下的comps.xml文件(重要),comps.xml 文件中包含了安装时用户所见到的与rpm相关的所有内容,它会检查Packages下的RPM包的依赖关系,安装时如果缺少依赖包,它会提示哪个RPM 包需要哪些依赖库

1 [root@localhost ~]# mkdir -p /root/iso/repodata
 2 
 3 [root@localhost ~]# cat xml.sh 
 4 #!/bin/bash 
 5 
 6 ISO_DIR=/root/iso
 7 cd  ${ISO_DIR} 
 8 declare -x discinfo=$(head -1 .discinfo) 
 9 cp  /mnt/repodata/*-comps.xml ${ISO_DIR}/repodata/
10 createrepo  -g  ${ISO_DIR}/repodata/*-comps.xml  ${ISO_DIR} 
11 createrepo -u "media://$discinfo" -g ${ISO_DIR}/repodata/*-comps.xml ${ISO_DIR}
1 [root@localhost ~]# sh xml.sh 2 Spawning worker 0 with 502 pkgs3 Workers Finished4 Gathering worker results5 6 Saving Primary metadata7 Saving file lists metadata8 Saving other metadata9 Generating sqlite DBs10 Sqlite DBs complete11 Spawning worker 0 with 502 pkgs12 Workers Finished13 Gathering worker results14 15 Saving Primary metadata16 Saving file lists metadata17 Saving other metadata18 Generating sqlite DBs19 Sqlite DBs complete

六、制作ks.cfg自动应答脚本

anaconda-ks.cfg记录了在安装系统时填写的参数和选项,即你在安装系统时选择分区、时区、设置用户密码等一系列操作,存放在/root目录,我们直接对由系统安装所创建的anaconda-ks.cfg进行修改,当然也可以用system-config-kickstart工具制作而成。

附上一个这次使用的ks.cfg

1 # kickstart template for Fedora 8 and later.2 # (includes %end blocks)3 # Kickstart file automatically generated by anaconda.4 5 #version=DEVEL6 install7 cdrom8 lang en_US.UTF-89 keyboard us10 network --onboot no --device eth0 --bootproto dhcp --noipv611 rootpw  --iscrypted $6$zOtv5lnBZdQzG2ku$3CddYMrBl8mSv3O9TDQ9ox55PErc4PeX5SoaiiSXJ9ui9mLA2aq7hz9UTw52V0VCLmsH3EIcd7qQgsuFag7xK/12 firewall --service=ssh13 authconfig --enableshadow --passalgo=sha51214 selinux --disabled                   #禁止selinux15 reboot                               #安装完成后自动重启16 timezone --utc Asia/Shanghai         #设置时区17 bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"18 zerombr                              #清除mbr19 clearpart --all --initlabel          #删除所有分区,初始化卷标20 # Allow anaconda to partition the system as needed               #以下是系统分区21 part /boot --fstype=ext4 --asprimary --ondisk=sda --size=50022 part pv.008002 --fstype=lvmpv --ondisk=sda --size=200 --grow23 volgroup vmvg --pesize=4096 pv.00800224 logvol swap  --fstype=swap --name=swap --vgname=vmvg --recommended25 logvol /  --fstype=ext4 --name=root --vgname=vmvg --size=200 --grow26 27 %post                                #系统安装完后执行的脚本命令28 echo '*/20 * * * * /usr/sbin/ntpdate 10.20.122.199 &> /dev/null' > /tmp/sync_date.txt29 /usr/bin/crontab /tmp/sync_date.txt30 rm -f /tmp/sync_date.txt31 %end32 33 %packages                            #选择需要安装的包34 @base35 @console-internet36 @core37 @debugging38 @development39 @directory-client40 @hardware-monitoring41 @java-platform42 @large-systems43 @network-file-system-client44 @performance45 @perl-runtime46 @server-platform47 @server-policy48 @system-management49 @system-admin-tools50 @workstation-policy51 pax52 python-dmidecode53 oddjob54 sgpio55 device-mapper-persistent-data56 systemtap-client57 jpackage-utils58 samba-winbind59 certmonger60 pam_krb561 krb5-workstation62 perl-DBD-SQLite63 %end

七、修改 isolinux.cfg 配置文件,指定ks.cfg路径

1 [root@localhost mnt]# cat /root/iso/isolinux/isolinux.cfg2 default vesamenu.c323 #prompt 14 timeout 6005 6 display boot.msg7 8 menu background splash.jpg9 menu title Welcome to CentOS 6.7!10 menu color border 0 #ffffffff #0000000011 menu color sel 7 #ffffffff #ff00000012 menu color title 0 #ffffffff #0000000013 menu color tabmsg 0 #ffffffff #0000000014 menu color unsel 0 #ffffffff #0000000015 menu color hotsel 0 #ff000000 #ffffffff16 menu color hotkey 7 #ffffffff #ff00000017 menu color scrollbar 0 #ffffffff #0000000018 19 label autolinux20   menu label ^Auto Install CentOS 6.721   kernel vmlinuz22   append initrd=initrd.img ks=cdrom /isolinux/ks.cfg23 label linux24   menu label ^Install or upgrade an existing system25   kernel vmlinuz26   append initrd=initrd.img27 label vesa28   menu label Install system with ^basic video driver29   kernel vmlinuz30   append initrd=initrd.img nomodeset31 label rescue32   menu label ^Rescue installed system33   kernel vmlinuz34   append initrd=initrd.img rescue35 label local36   menu label Boot from ^local drive37   localboot 0xffff38 label memtest8639   menu label ^Memory test40   kernel memtest41   append -42

八、制作iso镜像,并生成 MD5校验码

1 cd /root/iso2 /usr/bin/genisop_w_picpath -v -R -J -T -o /root/CentOS-6.7-x86_64-auto.iso\
 -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot\
 -boot-load-size 4 -boot-info-table -eltorito-alt-boot -b p_w_picpaths/efiboot.img -no-emul-boot .3 implantisomd5 /root/CentOS-6.7-x86_64-auto.iso