打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
CentOS6.5定制系统iso制作

一、安装软件

(1)系统需要安装的软件

#yum install anaconda repodata createrepo mkisofs system-config-kickstart

(2)系统centos6.5.iso和需要安装的rpm包,修改的图片。

二、创建定制系统

1、仅修改RPM包定制系统

光盘文件:
(1)isolinux 目录存放光盘启动时的安装界面信息
(2)images 目录包括了必要的启动映像文件
(3)Packages 目录存放安装软件包及信息
(4).discinfo 文件是安装价质的识别信息
(5)Repodata 目录存放rpm包依赖信息

若想仅修改RPM包数来制作光盘可以按照以下步骤(需修改更多内容则可跳过该节)。

一、复制rpm包并生成repodata文件夹

#mount -o loop centos6.5.iso /mnt

#cp /mnt/Packages/*.rpm  /home/taiyang/work/anaconda/createCD/Packages

#createrepo -v -g /mnt/repodata/*-comps.xml /home/taiyang/work/anaconda/createCD

二、创建启动映像

#yum install anaconda-runtime(或直接#yum install anaconda)(因anaconda版本不同,buildinstall参数应根据脚本调整,旧的版本没有--buildarch参数,具体查看usage函数)

#/usr/lib/anaconda-runtime/buildinstall --version 1.0 --buildarch x86_64 --brand "Red Hat" --product "Red Hat" --release "Red Hat" --final --output /home/taiyang/work/anaconda/createCD/ /home/taiyang/work/anaconda/createCD

注:buildinstall制作过程,会产生很多错误和警告,暂时不清楚怎么解决,但会生成了完整的目录结构。

(buildinstall为shell脚本,可自己分析。因anaconda调整参数,该命令生成了部分没用的内容,可手动删除,同时自己也会调整参数防止生成多余的文件。)
可删除多余文件:#rm -f awk grub-0.97-93.el6.x86_64.rpm
三、生成iso文件

#mkisofs -o centos6.5Release.iso -V centos6.5Release -b isolinux/isolinux.bin -c isolinux/boot.cat  -no-emul-boot -boot-load-size 4 -boot-info-table -R -J -v -T /home/taiyang/work/anaconda/createCD/

(#mkisofs -R -J -T -r -l -d -allow-multidot -allow-leading-dots -no-bak -o ./CentOS6.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot .其中参数的意思慢慢理解。)

四、植入md5验证码

#implantisomd5 centos6.5Release.iso

2、用户自定义修改定制系统(批量快速安装)

(1)建立放置制作系统的目录

#mkdir /home/source/

(2)复制除Packages(rpm包的文件夹)外的所有文件(一般会通过buildinstall建立目录树)

#mount -t iso9660 -o loop centos6.5.iso /mnt(光盘使用mount /dev/sr0 /mnt)

#cd /mnt

#ls -A . | grep -v Packages | xargs -i cp -rp {} /home/source(也可以手动复制除Packages外的所有文件,但注意隐藏文件)

(或使用rsync -a --exclude=Packages /mnt/ /home/source ,rsync拷贝了隐藏文件)

#cp /root/anaconda-ks.cfg /root/install.log /home/source

使用anaconda-ks.cfg不用配置ks文件,使用install.log可以查看本机已经安装的包列表可减少复制多余的包)

#mkdir /home/source/Packages

#awk '/安装/{print $2}' /home/source/install.log | xargs -i cp /mnt/Packages/{}.rpm /home/source/Packages/

(英文系统下:安装换为Installing)

(3)定制安装控制文件anaconda-ks.cfg

ks文件由系统安装所得anaconda-ks.cfg进行修改,也可以用system-config-kickstart工具制作而得。

注意此部分内容(无zerombr会弹出Storage Device Warning对话框):

  1. # Kickstart file automatically generated by anaconda.  
  2. #version=DEVEL  
  3. install  
  4. cdrom  
  5. lang zh_CN.UTF-8  
  6. keyboard us  
  7. network --onboot no --device eth0 --bootproto dhcp --noipv6  
  8. rootpw  --iscrypted $6$PwksHHjSHb7YBQGw$nxkaZNVEl8vgBcleuvgVyFzqhBIn3.3w7w8/4321mLGqV4yPUge3ExClHzOU/mRqZKVcCjWkY1zQf8tJ.22l9/  
  9. firewall --service=ssh  
  10. authconfig --enableshadow --passalgo=sha512  
  11. graphical  
  12. firstboot --disable  
  13. selinux --enforcing  
  14. timezone --utc Asia/Shanghai  
  15. bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"  
  16.   
  17. zerombr  
  18. clearpart --all --initlabel  
  19. part /boot --fstype=ext4 --size=200  
  20. part swap --size=1000  
  21. part / --fstype=ext4 --grow --size=200  
  22.    
  23. #repo --name="CentOS6.5" --baseurl=cdrom:sr0 --cost=100   
创建PV-VG-LV(可选,使用上述的分区方式即可):
  1. clearpart --all --drives=sda  
  2. part /boot --fstype=ext4 --size=500  
  3. part pv.008002 --grow --size=1  
  4. volgroup VolGroup --pesize=4096 pv.008002  
  5. logvol / --fstype=ext4 --name=lv_root --vgname=VolGroup --grow --size=1024 --maxsize=51200  
  6. logvol swap --name=lv_swap --vgname=VolGroup --grow --size=512 --maxsize=1024  
增加安装完成后的启动脚本(在%packages前即可):
  1. #增加安装后运行脚本  
  2. %post  
  3. #boot echo 定制系统启动信息  
  4. echo "CentOSRelease 6.5" > /etc/centos-release  
  5. sed -i 's/CentOS Linux release 6.0 (Final)/CentOSRelease 6.5/g' /etc/issue  
  6. sed -i 's/CentOS Linux release 6.0 (Final)/CentOSRelease 6.5/g' /etc/issue.net  
  7. sed -i 's/localhost.localdomain/CentOSRelease/g' /etc/sysconfig/network  
  8. sed -i 's/CentOS/CentOSRelease/g' /etc/rc.d/rc.sysinit  
  9. sed -i 's/rhgb/ /g' /boot/grub/grub.conf  
  10. #close cdrom 安装完成弹出光碟  
  11. eject  
  12. #reboot 一切执行完毕后重启  
  13. reboot -f  
  14. %end  
一个完整的参考例子:
  1. #platform=x86, AMD64, 或 Intel EM64T  
  2. #version=DEVEL  
  3. # Firewall configuration 关闭防火墙  
  4. firewall --disabled  
  5. # Install OS instead of upgrade 覆盖安装  
  6. install  
  7. # Use CDROM installation media 从光驱安装  
  8. cdrom  
  9. repo --name="CentOS" --baseurl=file:///mnt/source --cost=100  
  10. # Root password  
  11. rootpw --iscrypted $1$Ro9DjGl8$6bU7DsgPlc9YSAjs1Jj4s1  
  12. # System authorization information  
  13. auth  --useshadow  --passalgo=sha512 --enablefingerprint  
  14. # Use graphical mode install //图形化安装  
  15. graphical  
  16. firstboot --disable  
  17. # System keyboard //美式键盘  
  18. keyboard us  
  19. # System language //美式英语  
  20. lang en_US  
  21. # SELinux configuration //关闭SELinux  
  22. selinux --disabled  
  23. # Installation logging level  
  24. logging --level=info  
  25. # Reboot after installation //安装完成后重启  
  26. reboot  
  27. # System timezone //时区  
  28. timezone  America/New_York  
  29. # Network information 设置静态ip  
  30. network  --bootproto=static --device=eth0 --gateway=192.168.1.1 --ip=192.168.1.2 --netmask=255.255.255.0 --onboot=on  
  31. # System bootloader configuration  
  32. bootloader --location=mbr --append="crashkernel=auto rhgb quiet"  
  33. # Clear the Master Boot Record 清除mbr  
  34. zerombr  
  35. # Partition clearing information //删除所有分区 初始化卷标  
  36. clearpart --all --initlabel  
  37. # Disk partitioning information 系统分区  
  38. part /boot --asprimary --fstype="ext4" --ondisk=sda --size=100  
  39. part swap --asprimary --fstype="swap" --ondisk=sda --size=2048  
  40. part / --asprimary --fstype="ext4" --grow --ondisk=sda --size=1  
  41. part /var --fstype="ext4" --ondisk=sda --size=20480  
  42. #安装后运行脚本  
  43. %post  
  44. #RecData 格式化硬盘并挂载到/RecData目录下  
  45. disk_num=`parted -l | grep "Disk /dev/" | wc -l`  
  46. disk1=`parted -l | awk '/Disk \/dev/{print $2}'|sed 's/://g'|sed -n '1p'`  
  47. disk2=`parted -l | awk '/Disk \/dev/{print $2}'|sed 's/://g'|sed -n '2p'`  
  48. sda_num=`parted $disk1 -s print | awk '/^ /{print $1}'| wc -l`  
  49. sdb_num=`parted $disk2 -s print | awk '/^ /{print $1}'| wc -l`  
  50. if [ "$disk_num" -gt 1 ]; then  
  51.         if [ "$sda_num" -eq 0 ]; then  
  52.                 parted $disk1 -s mklabel gpt  
  53.                 parted $disk1 -s -- mkpart primary 0 -1  
  54.                 mkfs.ext4 ${disk1}1  
  55.        sda_num=1  
  56.         fi  
  57.         if [ "$sdb_num" -eq 0 ]; then  
  58.                 parted $disk2 -s mklabel gpt  
  59.                 parted $disk2 -s -- mkpart primary 0 -1  
  60.                 mkfs.ext4 ${disk2}1  
  61.        sdb_num=1  
  62.         fi  
  63.   
  64.         if [ "$sda_num" -eq 1 ]; then  
  65.                 uuid=`blkid ${disk1}1 | awk '/dev/{print $2}'|sed 's/"//g'`  
  66.        if [ -z "$uuid" ]; then  
  67.            uuid=${disk1}1  
  68.            fsck.ext4 -y ${disk1}1 &  
  69.            sleep 60  
  70.            killall -9 fsck.ext4  
  71.        fi  
  72.                 mkdir -p /RecData  
  73.        mount ${disk1}1 /RecData  
  74.         mkdir -p /RecData/{Rec,RecN}  
  75.        echo "$uuid /RecData ext4 defaults  0 0" >> /etc/fstab  
  76.     fi  
  77.         if [ "$sdb_num" -eq 1 ]; then  
  78.                 uuid=`blkid ${disk2}1 | awk '/dev/{print $2}'|sed 's/"//g'`  
  79.        if [ -z "$uuid" ]; then  
  80.            uuid=${disk2}1  
  81.            fsck.ext4 -y ${disk2}1 &  
  82.            sleep 60  
  83.            killall -9 fsck.ext4  
  84.        fi  
  85.                 mkdir -p /RecData  
  86.        mount ${disk2}1 /RecData  
  87.        mkdir -p /RecData/{Rec,RecN}  
  88.        echo "$uuid /RecData ext4 defaults  0 0" >> /etc/fstab  
  89.     fi  
  90. fi  
  91. #mount cdrom 挂载光驱  
  92. mkdir -p /media/cdrom  
  93. mount -o loop /dev/cdrom /media/cdrom  
  94. #install media center 从光碟拷贝媒体中心安装包并进行安装  
  95. cp -rf /media/cdrom/MediaCentOS/MediaCenterInstall*.tar.gz /opt/.  
  96. cd /opt  
  97. chmod 755 -R *  
  98. tar xfv MediaCenterInstall*.tar.gz  
  99. cd /opt/MediaCenterInstall*/MediaCenter  
  100. sh install.sh  
  101. cd /opt/MediaCenterInstall*/LiveNode  
  102. sh install.sh  
  103. rm -rf /opt/MediaCenterInstall*  
  104. #boot echo 定制系统启动信息(将CentOS字样替换成MediaCentOS)  
  105. echo "MediaCentOS Linux release 6.0 (Based on CentOS 6.0)" > /etc/centos-release  
  106. sed -i 's/CentOS Linux release 6.0 (Final)/MediaCentOS Linux release 6.0 (Based on CentOS 6.0)/g' /etc/issue  
  107. sed -i 's/CentOS Linux release 6.0 (Final)/MediaCentOS Linux release 6.0 (Based on CentOS 6.0)/g' /etc/issue.net  
  108. sed -i 's/localhost.localdomain/MediaCentOS/g' /etc/sysconfig/network  
  109. sed -i 's/CentOS/MediaCentOS/g' /etc/rc.d/rc.sysinit  
  110. sed -i 's/rhgb/ /g' /boot/grub/grub.conf  
  111. #close cdrom 安装完成弹出光碟  
  112. eject  
  113. #reboot 一切执行完毕后重启  
  114. reboot -f  
  115. %end  
  116. #安装包信息  
  117. %packages  
  118. @base  
  119. @console-internet  
  120. @core  
  121. @debugging  
  122. @directory-client  
  123. @hardware-monitoring  
  124. @java-platform  
  125. @large-systems  
  126. @network-file-system-client  
  127. @performance  
  128. @perl-runtime  
  129. @server-platform  
  130. @server-policy  
  131. certmonger  
  132. krb5-workstation  
  133. nscd  
  134. nss-pam-ldapd  
  135. oddjob  
  136. pam_krb5  
  137. pam_ldap  
  138. pax  
  139. perl-DBD-SQLite  
  140. sgpio  
  141.   
  142. %end  
(4)修改安装界面文本标题

        可以去掉安装过程中的CentOS字样,在安装光盘里面有两个.buildstamp文件,一个位于stage2.img中,一个位于 initrd.img中,安装光盘运行时读取的是initrd.img中的.buildstamp文件,因此解压缩initrd.img文件。

解压修改:

#cd /home/source/isolinux

#mkdir tmp(也可以在其他目录创建临时文件)

#cd tmp/

#xz -dc /home/source/isolinux/initrd.img | cpio -id

#vim .buildstamp

  1. 201112091719.x86_64  
  2. centos6.5Release  
  3. 1.0  
  4. http://wiki.centos.org/  
压缩

#find . | cpio -c -o | xz -9 --format=lzma > initrd.img

有时出现如下错误:xz: Adjusted LZMA1 dictionary size from 64 MiB to 35 MiB to not exceed the memory usage limit of 398 MiB
将xz -9 改成xz -5,减小压缩强度等级。也可以忽略不管,对结果没有影响。

#cp initrd.img/home/source/isolinux/initrd.img

#rm -rf /home/source/isolinux/tmp

-----------------------------------------------------------------

注:centos6.4前的不能按上述方法解压

#file initrd.img查看时gzip压缩

解压:

#cd /home/source/isolinux

#mkdir tmp

#cp initrd.img tmp/initrd.img.gz

#cd tmp

#gunzip initrd.img.gz

#cpio -ivmd < initrd.img

#vim .buildstamp

压缩:

#cd /home/source/isolinux/tmp

#rm initrd.img

#find . | cpio -c -o > initrd.img

#gzip initrd.img

#mv initrd.img.gz /home/source/isolinux/initrd.img

#rm -rf /home/source/isolinux/tmp

-----------------------------------------------------------------

(5)修改安装光盘背景图片

1、修改引导显示画面

grub背景图片在/home/source/isolinux/splash.jpg,替换文件即可。

修改界面上显示文件的配置文件:

#vim /home/source/isolinux/isolinux.cfg

  1. default vesamenu.c32  
  2. #prompt 1  
  3. timeout 600  
  4.   
  5. display boot.msg  
  6.   
  7. menu background splash.jpg  
  8. menu title Welcome to CentOS 6.<span style="font-family:Arial;">5</span>!  
  9. menu color border 0 #ffffffff #00000000  
  10. menu color sel 7 #ffffffff #ff000000  
  11. menu color title 0 #ffffffff #00000000  
  12. menu color tabmsg 0 #ffffffff #00000000  
  13. menu color unsel 0 #ffffffff #00000000  
  14. menu color hotsel 0 #ff000000 #ffffffff  
  15. menu color hotkey 7 #ffffffff #ff000000  
  16. menu color scrollbar 0 #ffffffff #00000000  
  17.   
  18. label linux  
  19.   menu label ^Install<span style="font-family:Arial;"> </span>system  
  20.   menu default  
  21.   kernel vmlinuz  
  22.   append initrd=initrd.img ks=cdrom:/anaconda-ks.cfg  
只保留默认安装,ks=cdrom:/anaconda-ks.cfg是增加上去的,实现自动化安装(不加上需要手动下一步式安装)。

2、修改安装rpm包时的背景图片

其图片在/home/source/images/install.img镜像文件中(不能mount后直接修改,是只读的)

#mount -t squashfs -o loop /home/source/images/install.img /mnt/

复制文件,等价与cp

#mdkir /tmp/install

#rsync -av /mnt /tmp/install/

修改/tmp/install/usr/share/anaconda/pixmaps/progress_first.png背景图,也可修改其他的所有相关图片

#cd /tmp

#mksquashfs install/  install.img -all-root -noF

#cpinstall.img /home/source/images/install.img

(6)生成新的配置文件夹repodata

       repodata文件中comps.xml 文件中包含了安装时用户所见到的与rpm相关的所有内容,它会检查Packages下的RPM包的依赖关系,安装时如果缺少依赖包,它会提示您哪个RPM 包需要哪些依赖库。同时它的角色就是相当于图形安装时选择软件包那个环节。


        comps.xml主要由三部分组成,首先是组列表,它描述了在安装过程中需要的不同的组(或组件),包括组名、组的描述和包含的RPM包;其次是组的层次结构,它将组分成不同的类,并定义了组的一个顺序,从而可以决定哪些组需要先安装;最后为一系列RPM包以及它们之间的依赖关系。

         进入/home/source/repodata目录,将0dae8d32824acd9dbdf7ed72f628152dd00b85e4bd802e6b46e4d7b78c1042a3-comps.xml改为comps.xml,*comps.xml文件名很长。

#cd /home/source/
#cp repodata/*comps.xml ./comps.xml
#rm -rf repodata
#createrepo -g comps.xml .

也有会使用命令,暂不明白什么用途,可能记录生成文件的时间以便比对:
#declare -x discinfo=`head -1 .discinfo`
#createrepo -u "media://$discinfo" -g comps.xml .

       至此,comps.xml文件和其他相关联的文件已被重新生成到repodata目录下。注意如果
新增或删除了Packages目录的RPM包,请重新生成comps.xml文件。

(7)向安装程序添加自定义软件包(无需求可省略)

         repodata/xxx-comps.xml文件的写法:
  1. <?xml version='1.0' encoding='UTF-8'?>  
  2. <!DOCTYPE comps PUBLIC "-//CentOS//DTD Comps info//EN" "comps.dtd">  
  3. <comps>  
  4.    
  5.   <group>  
  6.    <id>组1的ID,非数字</id>  
  7.    <name>组1的名字</name>  
  8.    <description>组1的描述</description>  
  9.    <default>是否预安装,true或者false</default>  
  10.    <uservisible>是否可见,true或者false</uservisible>  
  11.    <langonly>zh</langonly>  #仅在某个语系的安装界面中显示,可选项  
  12.    <packagelist>  
  13.       <packagereq requires="依赖包" type="conditional">软件包1</packagereq>  
  14.       <packagereq type="default">软件包2</packagereq>  
  15.       <packagereq type="default">软件包3</packagereq>  
  16.    </packagelist>  
  17.   </group>  
  18.   <group>  
  19.    <id>组2的ID,非数字</id>  
  20.    <name>组2的名字</name>  
  21.    <description>组2的描述</description>  
  22.    <default>是否预安装,true或者false</default>  
  23.    <uservisible>是否可见,true或者false</uservisible>  
  24.    <packagelist>  
  25.       <packagereq requires="依赖包" type="conditional">软件包1</packagereq>  
  26.       <packagereq type="default">软件包2</packagereq>  
  27.       <packagereq type="default">软件包3</packagereq>  
  28.    </packagelist>  
  29.   </group>  
  30. ……  
  31.    
  32.   <category>  
  33.    <id>分类1的名字,非数字</id>  
  34.    <name>将显示在左侧列表里</name>  
  35.    <description>将显示在下面的描述栏里</description>  
  36.    <grouplist>  
  37.     <groupid>组1的ID</groupid>  
  38.     <groupid>组2的ID</groupid>  
  39.     <groupid>组3的ID</groupid>  
  40.    </grouplist>  
  41.   </category>  
  42.   <category>  
  43.    <id>分类2的名字,非数字</id>  
  44.    <name>将显示在左侧列表里</name>  
  45.    <description>将显示在下面的描述栏里</description>  
  46.    <grouplist>  
  47.     <groupid>组4的ID</groupid>  
  48.     <groupid>组5的ID</groupid>  
  49.     <groupid>组6的ID</groupid>  
  50.    </grouplist>  
  51.   </category>  
  52.    
  53. </comps>  
       其中一个package指一个软件包,一个group里包含了若干个package,一个category里则包含了若干个group。在使用Linux安装光盘安装系统的时候,有一个自定义软件包的步骤。在此步骤中,左侧显示的是category,右则显示的是group。
       向CentOS 6.4的安装光盘中添加一个category及group:
  1.  <group>  
  2.    <id>inspur-security-group</id>  
  3.    <name>Inspur Security Group</name>  
  4.    <description>Some security packages provided by Inspur company.</description>  
  5.    <default>true</default>  
  6.    <uservisible>true</uservisible>  
  7.    <packagelist>  
  8.       <packagereq type="default">httpd</packagereq>  
  9.       <packagereq type="default">mysql</packagereq>  
  10.    </packagelist>  
  11.   </group>  
  12.    
  13.   <group>  
  14.    <id>inspur-optimization-tools</id>  
  15.    <name>Inspur Optimization Tools</name>  
  16.    <description>Some optimization packages provided by Inspur company.</description>  
  17.    <default>true</default>  
  18.    <uservisible>true</uservisible>  
  19.    <packagelist>  
  20.       <packagereq type="default">php</packagereq>  
  21.       <packagereq type="default">php-mysql</packagereq>  
  22.    </packagelist>  
  23.   </group>  
  24.    
  25. 在最后一行的</comps>之前,添加以下内容  
  26.   <category>  
  27.    <id>inspur-extra</id>  
  28.    <name>Inspur Extra</name>  
  29.    <description>Inspur extra Packages</description>  
  30.    <grouplist>  
  31.     <groupid>inspur-security-group</groupid>  
  32.     <groupid>inspur-optimization-tools</groupid>  
  33.    </grouplist>  
  34.   </category>  
添加完成后需要重新生成repodata文件夹:
  1. [root@centos]# declare -x discinfo=`head -1 .discinfo`  
  2. [root@centos]# createrepo -u "media://$discinfo" -g comps.xml ./  
  3. [root@centos]# rm comps.xml  
        定制Linux发行版的一个重要步骤,是向安装程序添加自定义的软件包


1、选择Customize now自定义包时的界面

        首先需要明白一下概念,通常来讲,一个package指一个软件包,一个group里包含了若干个package,一个category里则包含了若干个group。在使用Linux安装光盘安装系统的时候,有一个自定义软件包的步骤。在此步骤中,左侧显示的是category,右则显示的是group。它们之间对应关系记录于repodata/xxx-comps.xml文件中。

repodata/xxx-comps.xml文件的写法:

  1. <?xml version='1.0' encoding='UTF-8'?>  
  2. <!DOCTYPE comps PUBLIC "-//CentOS//DTD Comps info//EN" "comps.dtd">  
  3. <comps>  
  4.   <group>  
  5.    <id>base</id>  
  6.    <name>Base</name>  
  7.    <name xml:lang='en_GB'>Base</name>  
  8.    <name xml:lang='zh_CN'>基本</name>  
  9.    <description>The basic installation of CentOS Linux.</description>  
  10.    <description xml:lang='zh_CN'>红帽企业版 Linux 基本安装。</description>  
  11.    <description xml:lang='zh_TW'>CentOS Linux 的基本安裝。</description>  
  12.    <default>true</default>  
  13.    <uservisible>true</uservisible>  
  14.    <packagelist>  
  15.       <packagereq type="default">zip</packagereq>  
  16.       <packagereq type="mandatory">traceroute</packagereq>  
  17.       <packagereq type="optional">zsh</packagereq>  
  18.    </packagelist>  
  19.   </group>  
  20.   <group>...</group>  
  21.   ...  
  22.   <category>  
  23.    <id>development</id>  
  24.    <name>Development</name>  
  25.    <name xml:lang='en_GB'>Development</name>  
  26.    <name xml:lang='zh_CN'>开发</name>  
  27.    <name xml:lang='zh_TW'>程式開發</name>  
  28.    <description>Development tools and libraries.</description>  
  29.    <description xml:lang='zh_CN'>开发工具和程序库。</description>  
  30.    <description xml:lang='zh_TW'>開發工具與函式庫。</description>  
  31.    <grouplist>  
  32.     <groupid>additional-devel</groupid>  
  33.     <groupid>desktop-platform-devel</groupid>  
  34.     <groupid>development</groupid>  
  35.     <groupid>eclipse</groupid>  
  36.     <groupid>server-platform-devel</groupid>  
  37.    </grouplist>  
  38.   </category>  
  39.   <category>...</category>  
  40.   ...  
  41. </comps>  

向CentOS 6.4的安装光盘中添加一个自定义的category及group:

#cd /home/source/
#cp repodata/*comps.xml ./comps.xml

#vim comps.xml

增加inspur-security-group和inspur-optimization-tools组group,其下有默认安装的软件包。

  1. <group>  
  2.    <id>inspur-security-group</id>  
  3.    <name>Inspur Security Group</name>  
  4.    <name xml:lang='en_GB'>Inspur Security Group</name>  
  5.    <name xml:lang='zh_CN'>自定义</name>  
  6.    <description> Some security packages provided by Inspur company</description>  
  7.    <description xml:lang='zh_CN'>自定义安装1</description>  
  8.    <default>true</default>  
  9.    <uservisible>true</uservisible>  
  10.    <packagelist>  
  11.       <packagereq type="default">httpd</packagereq>  
  12.       <packagereq type="default">mysql</packagereq>  
  13.    </packagelist>  
  14. </group>  
  15. <group>  
  16.    <id>inspur-optimization-tools</id>  
  17.    <name>Inspur Optimization Tools</name>  
  18.    <name xml:lang='en_GB'>Inspur Security Group</name>  
  19.    <name xml:lang='zh_CN'>自定义</name>  
  20.    <description>Some optimization packages provided by Inspur company.</description>  
  21.    <description xml:lang='zh_CN'>自定义安装2</description>  
  22.    <default>true</default>  
  23.    <uservisible>true</uservisible>  
  24.    <packagelist>  
  25.       <packagereq type="default">php</packagereq>  
  26.       <packagereq type="default">php-mysql</packagereq>  
  27.    </packagelist>  
  28. </group>  
增加inspur-extra类别category,显示在安装左侧
  1. <category>  
  2.    <id>inspur-extra</id>  
  3.    <name>Inspur extra Packages</name>  
  4.    <name xml:lang='zh_CN'>自定义开发</name>  
  5.    <description xml:lang='zh_CN'>自定义开发工具和程序库</description>  
  6.    <grouplist>  
  7.     <groupid>inspur-security-group</groupid>  
  8.     <groupid>inspur-optimization-tools</groupid>  
  9.    </grouplist>  
  10. </category>  

然后重新生成comps.xml 文件:

#declare -x discinfo=`head -1 .discinfo`

#cd /home/aoyang/source

#createrepo -u "media://$discinfo" -g comps.xml ./

(编辑了comps.xml,要重新生成新的,因为comps.xml的sha值会改变,这样就会导致跟repomd.xml中所记录的不同,安装的时候会报错An error occurred umounting the CD. Please make sure you’are not accessing  /mnt/source from the shell on tty2 an the click OK retry)

2、修改系统默认选项及其相应选项的默认包


系统安装的两个阶段:
       第一阶段:加载isolinux目录下的内核映像vmlinuz和初始RAM磁盘initrd.img,建立安装环境。initrd.img中的/sbin/init程序调用/sbin/loader程序,loader加载kickstart文件,最后运行install.img中的/usr/bin/anaconda主Python程序,进入第二阶段。
        第二阶段:anaconda程序加载各python和bash模块,执行各个安装步骤。
文件的调用顺序为isolinux/vmlinuz—>isolinux/initrd.img—>/init—>/sbin/loader—>imagaes/install.img—>/usr/bin/anaconda。

        Anaconda是RedHat、CentOS、Fedora等Linux的安装管理程序,使用Python编写。可以提供文本、图形等安装管理方式,并支持Kickstart等脚本提供自动安装的功能。

         Anaconda程序存在于光盘的images/install.img镜像中,因此修改上面的安装图形化界面需要解压install.img文件,


usr/bin/anaconda 安装程序的主执行文件
usr/lib/anaconda/iw/ 图形安装模式的模块
usr/lib/anaconda/textw/ 文本安装模式的模块。
usr/share/anaconda/pixmaps/ 图形安装过程的图片
usr/share/anaconda/ui/ 安装过程中显示的文字
usr/lib/anaconda/dispatch.py 来控制整个安装的流程,当一个Next或Back按钮被单击时的跳转
usr/lib/anaconda/vnc.py 用于控制对VNC进行设置(当在安装过程中请求了VNC时)

进入解压的install.img目录修改:#vim usr/lib/anaconda/dispatch.py

  1. ……  
  2. installSteps = [  
  3.     ("welcome", ),  
  4.     ("betanag", betaNagScreen, ),  
  5.     ("language", ),  
  6.     ("keyboard", ),  
  7.     ("regkey", regKeyScreen, ),  
  8.     ("findrootparts", findRootParts, ),  
  9.     ("findinstall", ),  
  10.     ("partitionobjinit", partitionObjectsInitialize, ),  
  11.     ("parttype", ),     
  12.     ("autopartitionexecute", doAutoPartition, ),  
  13.     ("partition", ),  
  14.     ("upgrademount", upgradeMountFilesystems, ),  
  15.     ("upgradecontinue", queryUpgradeContinue, ),  
  16.     ("upgradeswapsuggestion", upgradeSwapSuggestion, ),  
  17.     ("addswap", ),  
  18.     ("partitiondone", partitioningComplete, ),  
  19.     ("upgrademigfind", upgradeMigrateFind, ),  
  20.     ("upgrademigratefs", ),  
  21.     ("upgbootloader", ),  
  22.     ("bootloadersetup", bootloaderSetupChoices, ),  
  23.     ("bootloader", ),  
  24.     ("bootloaderadvanced", ),  
  25.     ("reipl", doReIPL, ),  
  26.     ("networkdevicecheck", networkDeviceCheck, ),  
  27.     ("network", ),  
  28.     ("timezone", ),  
  29.     ("accounts", ),  
  30.     ("reposetup", doRepoSetup, ),  
  31.     ("basepkgsel", doBasePackageSelect, ),  
  32.     ("tasksel", ),  
  33.     ("group-selection", ),  
  34.     ("postselection", doPostSelection, ),  
  35.     ("confirminstall", ),  
  36.     ("confirmupgrade", ),  
  37.     ("install", ),  
  38.     ("enablefilesystems", turnOnFilesystems, ),  
  39.     ("migratefilesystems", doMigrateFilesystems, ),  
  40.     ("setuptime", setupTimezone, ),  
  41.     ("preinstallconfig", doPreInstall, ),  
  42.     ("installpackages", doInstall, ),  
  43.     ("postinstallconfig", doPostInstall, ),  
  44.     ("writeconfig", writeConfiguration, ),  
  45.     ("firstboot", firstbootConfiguration, ),  
  46.     ("instbootloader", writeBootloader, ),  
  47.     ("writexconfig", writeXConfiguration, ),  
  48.     ("writeksconfig", writeKSConfiguration, ),  
  49.     ("writeregkey", writeRegKey, ),  
  50.     ("setfilecon", setFileCons, ),  
  51.     ("copylogs", copyAnacondaLogs, ),  
  52.     ("methodcomplete", doMethodComplete, ),  
  53.     ("dopostaction", doPostAction, ),  
  54.     ("complete", ),  
  55.     ]  
  56. ……  

(8)制作ISO

(可以先删除所有TRANS.TBL文件,也可以不删除#ls -ld `find .` | grep "TRANS.TBL" | awk '{print $9}' |xargs -i rm -f {}

或#find . -name TRANS.TBL -exec rm -f {} ";")

#mkisofs -o centos6.5Release.iso -V centos6.5Release -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -R -J -v -T /home/source

#/usr/bin/implantisomd5 centos6.5Release.iso

(将md5值嵌入ISO中,防止复制过程中数据损坏;效验checkisomd5 centos6.5Release.iso。)

卷表为:centos6.5Release,开机映像文件:isolinux/isolinux.bin,开机文件名称:/isolinux/boot.cat。

(注:不加长参数使用iso时会出现:boot failed could not read from cdrom)

可能产生的错误:

1、执行mkisofs命令时,提示:boot image ‘./isolinux/isolinux.bin’ has not an allowable size。
解决办法:因为默认用的是软驱,加入: -hard-disk-boot 或者 -no-emul-boot 即可。

2、制作以后的Linux镜像在引导的时候提示:ISOLINUX 3.86 2010-04-01 ETCDisolinux: Image checksum error。
解决办法:在执行mkisofs命令时,加入 -boot-info-table 参数。

三、参考

mkisofs参数:http://linux.about.com/library/cmd/blcmdl8_mkisofs.htm

重新创建光盘:http://vega.sra-tohoku.co.jp/~kabe/vsd/c5-i586/dvd.html

制作iso和dvd脚本:http://scientificlinux.mirror.ac.za/59/x86_64/build/scripts/buildisoimages/archives/make-dvd.sh

四、总结

(1)因该文章时很多内容的总结,其中会有比较多的问题,还请读者根据实际的环境修改。

(2)因每一部分都涉及比较多的内容和代码,只能列出简要的目录,其他的可以查阅官网或其他。

(3)本人思路有限,若有更好的设计建议,也可发邮件沟通,在此先感谢!邮箱地址aoyang888@qq.com。

 
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
利用CentOS快速构建自己的发行版
根据CentOS定制自己的发行版
Linux 系统安装 零基础必看
打造自己的centos/linux发行版 订制精简ISO压缩包文件[初级版]
半自动化系统安装
为Linux用ISO制作U盘启动及基本原理
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服