CentOS6.5定制系统iso制作

分类:CentOS教程 阅读:60748 次

一、安装软件

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

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

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

二、创建定制系统

1、光盘文件

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

若想重新制作光盘可以按照一下步骤(采用以前光盘的内容则可跳过一下内容)。

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

#mount -o loop centos6.5 /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)

#/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调整参数,该命令生成了部分没用的内容,可手动删除,同时自己也会调整参数防止生成多余的文件。)

三、生成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包的文件夹)外的所有文件

#mount -t iso9660 -o loopcentos6.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工具制作而得。

CentOS6.5定制系统iso制作

注意此部分内容:

  1. clearpart--all--initlabel
  2. part/boot--fstype=ext4--size=2000
  3. partswap--size=5000
  4. part/--fstype=ext4--grow--size=200
  5. reboot
  6. repo--name="CentOS6.5"--baseurl=cdrom:sr0--cost=100
增加安装完成后的启动脚本:
  1. #增加安装后运行脚本
  2. %post
  3. #bootecho定制系统启动信息
  4. echo"CentOSRelease6.5">/etc/centos-release
  5. sed-i's/CentOSLinuxrelease6.0(Final)/CentOSRelease6.5/g'/etc/issue
  6. sed-i's/CentOSLinuxrelease6.0(Final)/CentOSRelease6.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. #closecdrom安装完成弹出光碟
  11. eject
  12. #reboot一切执行完毕后重启
  13. reboot-f
  14. %end
(4)修改安装界面文本标题

CentOS6.5定制系统iso制作

可以去掉安装过程中的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,减小压缩强度等级。也可以忽略不管,对结果没有影响。

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

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

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

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

#fileinitrd.img查看时gzip压缩

解压:

#cd/home/source/isolinux

#mkdir tmp

#cpinitrd.imgtmp/initrd.img.gz

#cd tmp

#gunzipinitrd.img.gz

#cpio -ivmd < initrd.img

#vim .buildstamp

压缩:

#cd/home/source/isolinux/tmp

#rminitrd.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、修改引导显示画面
CentOS6.5定制系统iso制作

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

CentOS6.5定制系统iso制作

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

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

  1. defaultvesamenu.c32
  2. #prompt1
  3. timeout600
  4. displayboot.msg
  5. menubackgroundsplash.jpg
  6. menutitleWelcometoCentOS6.<spanstyle="font-family:Arial;">5</span>!
  7. menucolorborder0#ffffffff#00000000
  8. menucolorsel7#ffffffff#ff000000
  9. menucolortitle0#ffffffff#00000000
  10. menucolortabmsg0#ffffffff#00000000
  11. menucolorunsel0#ffffffff#00000000
  12. menucolorhotsel0#ff000000#ffffffff
  13. menucolorhotkey7#ffffffff#ff000000
  14. menucolorscrollbar0#ffffffff#00000000
  15. labellinux
  16. menulabel^Install<spanstyle="font-family:Arial;"></span>system
  17. menudefault
  18. kernelvmlinuz
  19. appendinitrd=initrd.imgks=cdrom:/anaconda-ks.cfg
只保留默认安装,ks=cdrom:/anaconda-ks.cfg是增加上去的,实现自动化安装(不加上需要手动下一步式安装)。

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

CentOS6.5定制系统iso制作

其图片在/home/source/images/install.img镜像文件中

#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

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

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

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

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

CentOS6.5定制系统iso制作

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

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

#cd /home/source/
#cprepodata/*comps.xml./comps.xml
#rm -rfrepodata
#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)向安装程序添加自定义软件包(无需求可省略)

定制Linux发行版的一个重要步骤,是向安装程序添加自定义的软件包。

CentOS6.5定制系统iso制作

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

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

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

  1. <?xmlversion='1.0'encoding='UTF-8'?>
  2. <!DOCTYPEcompsPUBLIC"-//CentOS//DTDCompsinfo//EN""comps.dtd">
  3. <comps>
  4. <group>
  5. <id>base</id>
  6. <name>Base</name>
  7. <namexml:lang='en_GB'>Base</name>
  8. <namexml:lang='zh_CN'>基本</name>
  9. <description>ThebasicinstallationofCentOSLinux.</description>
  10. <descriptionxml:lang='zh_CN'>红帽企业版Linux基本安装。</description>
  11. <descriptionxml:lang='zh_TW'>CentOSLinux的基本安?。</description>
  12. <default>true</default>
  13. <uservisible>true</uservisible>
  14. <packagelist>
  15. <packagereqtype="default">zip</packagereq>
  16. <packagereqtype="mandatory">traceroute</packagereq>
  17. <packagereqtype="optional">zsh</packagereq>
  18. </packagelist>
  19. </group>
  20. <group>...</group>
  21. ...
  22. <category>
  23. <id>development</id>
  24. <name>Development</name>
  25. <namexml:lang='en_GB'>Development</name>
  26. <namexml:lang='zh_CN'>开发</name>
  27. <namexml:lang='zh_TW'>程式??</name>
  28. <description>Developmenttoolsandlibraries.</description>
  29. <descriptionxml:lang='zh_CN'>开发工具和程序库。</description>
  30. <descriptionxml:lang='zh_TW'>??工具?函式?臁?/span></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/
#cprepodata/*comps.xml./comps.xml

#vimcomps.xml

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

  1. <group>
  2. <id>inspur-security-group</id>
  3. <name>InspurSecurityGroup</name>
  4. <namexml:lang='en_GB'>InspurSecurityGroup</name>
  5. <namexml:lang='zh_CN'>自定义</name>
  6. <description>SomesecuritypackagesprovidedbyInspurcompany</description>
  7. <descriptionxml:lang='zh_CN'>自定义安装1</description>
  8. <default>true</default>
  9. <uservisible>true</uservisible>
  10. <packagelist>
  11. <packagereqtype="default">httpd</packagereq>
  12. <packagereqtype="default">mysql</packagereq>
  13. </packagelist>
  14. </group>
  15. <group>
  16. <id>inspur-optimization-tools</id>
  17. <name>InspurOptimizationTools</name>
  18. <namexml:lang='en_GB'>InspurSecurityGroup</name>
  19. <namexml:lang='zh_CN'>自定义</name>
  20. <description>SomeoptimizationpackagesprovidedbyInspurcompany.</description>
  21. <descriptionxml:lang='zh_CN'>自定义安装2</description>
  22. <default>true</default>
  23. <uservisible>true</uservisible>
  24. <packagelist>
  25. <packagereqtype="default">php</packagereq>
  26. <packagereqtype="default">php-mysql</packagereq>
  27. </packagelist>
  28. </group>
增加inspur-extra类别category,显示在安装左侧
  1. <category>
  2. <id>inspur-extra</id>
  3. <name>InspurextraPackages</name>
  4. <namexml:lang='zh_CN'>自定义开发</name>
  5. <descriptionxml:lang='zh_CN'>自定义开发工具和程序库</description>
  6. <grouplist>
  7. <groupid>inspur-security-group</groupid>
  8. <groupid>inspur-optimization-tools</groupid>
  9. </grouplist>
  10. </category>
CentOS6.5定制系统iso制作

然后重新生成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、修改系统默认选项及其相应选项的默认包

CentOS6.5定制系统iso制作

系统安装的两个阶段:
第一阶段:加载isolinux目录下的内核映像vmlinuz和初始RAM磁盘initrd.img,建立安装环境。initrd.img中的/init程序调用/sbin/loader程序,loader加载kickstart文件,最后运行/usr/bin/anaconda主程序,进入第二阶段。
第二阶段: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文件,

CentOS6.5定制系统iso制作

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 /home/source/isolinux/isolinux.bin -c /home/source/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中,防止复制过程中数据损坏;效验checkisomd5centos6.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。