1、 定制Centos6.2系统盘详细过程 http://www.lampbo.org/linux-xuexi/linux-advance/diy-centos6.html 工作工程中经常遇到一次安装许多台服务器,而在IDC机房用网络远程安装也不是很现实,因为期间如果有其他服务器重启那就麻烦了,曾经发生过类似事 故,所以只能一台一台的安装,而如果每台都用原始发行版本,还要去一个一个选择安装选项,很麻烦。经过在网上搜索资料学习到可以自己定制linux的安装 (windows2003也可以定制安装,其教程会陆续发布)。我们以最新发行的CentOS6.2系统为例进行试验说明。 首
2、先需要有一台已经安装要求安装好了的CentOS6.2系统。因为centos的yum是免费的,而且开源镜像站很多,所有一般客户要求的安装包比较少,经过我的简化只剩下了749个安装包,其中包括了常用的开发工具和开发库。好了,废话不说了,开始动手。 1. 安装Centos6.0系统为了方便制作,选用VMware作为环境。 (1)在搜狐开源镜像站上下载CentOS-6.0-x86_64-bin-DVD1.iso镜像文件,我们只需要这个就够了 Wget (2) 创建VM虚拟机 CPU:2 core / MEM:1G / HD:40G 由于在制作过程中需要拷贝大量数据,所以硬盘尽量
3、保持20G以上。 (3)安装操作系统的步骤就不详细说了,很简单都是图形界面的,安装要求选择和填写就是了 2. 确认以下工具已经安装 [root]# yum -y install anaconda repodata createrepo mkisofs [root]# yum -y install anaconda-runtime createrepo yum-utils anacondaanaconda-help busybox-anaconda mkisofs 3.生成packages.list软件清单 [英文版] [root]# cat install.log | gre
4、p Installing | sed 's/Installing //g' > /root/packages.list 问题:无法找到 sed 's/Installing //g' [中文版] 解决:不输入这部分 [root]# cat install.log | grep 安装 | sed 's/安装 //g' > /root/packages.list 生成后,仔细查看该文件,一般会在某些文件开始部分如“1:”这样的字符
5、需要删除这些字符,否在后面执行copy动作会报错。 4. 创建定制系统的目录(1). 光盘结构及文件简介 * isolinux 目录存放光盘启动时的安装界面信息 * images 目录包括了必要的启动映像文件 * Packages 目录存放安装软件包及信息 * .discinfo 文件是安装价质的识别信息 5.创建设/installcd目录并挂载光盘 [root]# mkdir /installcd
6、 [root]# mount –o loop /dev/cdrom /mnt 问题:mount:you must specify the filedsystem type 输入:mount: -t ios9660 /dev/cdrom /mnt/cdrom 问题:mount:special device /dev/cdrom does not exist 查看cdrom类型为cdrom1 输入:ln -s /dev/cdrom1 /dev/cdrom 提示:mount:block device /dev/sr0 is writ
7、e-protected,mounting read-only(权限为只读) 6. 拷贝光盘目录,除了Packages目录 [root]# cd /mnt/cdrom [root]# ls -a .|grep –v “Packages”|xargs -i cp -rp {} /installcd cp -rT /mnt/ /installcd [root]# mkdir /installcd/Packages #自行创建Pachages空目录 使用:cp -R /mnt/cdrom/. /mnt/installcd 删除 Packages :rm -rf Packages
8、 7. 拷贝第三步中生成的packages.list软件清单中的rpm包到/installcd/Packages中 cp -rf /root/packages.list /mnt/installcd/Packages 创建脚本copyrpm.sh: vi copyrpm.sh 1. #!/bin/bash 2. DEBUG=0 注:编写此脚本为了复制必要rpm包 3. CentOS_DVD=/mnt/ 4. ALL_RPMS_DIR=/mnt/Packages #源光盘RPM
9、包存放的目录 5. KOS_RPMS_DIR=/installcd/Packages #精简后RPM包存放的目录 6. packages_list=~/packages.list #软件清单RPM包列表 7. number_of_packages=`cat $packages_list | wc -l` 8. i=1 9. while [ $i -le $number_of_packages ] ; do 10. line=`head -n $i $packages_list | tail -n -1`
10、 11. name=`echo $line | awk '{print $1}'` 12. version=`echo $line | awk '{print $3}' | cut -f 2 -d :` 13. if [ $DEBUG -eq "1" ] ; then 14. echo $i: $line 15. echo $name 16. echo $version 17. fi 18. if [ $DEBUG -eq "1" ] ; then 19. ls $ALL_RPMS_DIR/$name-$ver
11、sion* 20. if [ $? -ne 0 ] ; then 21. echo "cp $ALL_RPMS_DIR/$name-$version* " 22. fi 23. else 24. echo "cp $ALL_RPMS_DIR/$name-$version* $KOS_RPMS_DIR/" 25. cp $ALL_RPMS_DIR/$name-$version* $KOS_RPMS_DIR/ 26. # in case the copy failed 27. if [ $? -ne 0 ] ; then
12、 28. echo "cp $ALL_RPMS_DIR/$name-$version* " 29. cp $ALL_RPMS_DIR/$name* $KOS_RPMS_DIR/ 30. fi 31. fi 32. i=`expr $i + 1` 33. done 然后使copyrpm.sh具有可执行的权限 [root]#chmod 755 ~/copyrpm.sh 运行该脚本,执行拷贝 [root]#~/copyrpm.sh [root]#ls -l /installcd/Packages #查看安装包是否
13、正确拷贝 8. 编写kickstart配置脚本 vim /installcd/isolinux/mandg.cfg 1. # Kickstart file automatically generated by anaconda. 2. 3. #version=DEVEL 4. install 5. cdrom 6. text 7. lang zh_CN.UTF-8 8. keyboard us 9. skipx 10. network --device eth0 --bootproto s
14、tatic --ip 192.168.1.112 --netmask 255.255.255.0 --gateway 192.168.1.1 --nameserver 202.96.69.38,202.96.64.68 --hostname 11. rootpw --iscrypted $6$f/3UZjoBHctOXF9y$yU3aL/0ST481wF61j0UEGIGwaFqA1ltjIvWoOoqhst6Dnc232l0msho2LKtZMdas/05oXFFRxwZz6z7CmOi42. 12. firewall --service=ssh 13. a
15、uthconfig --enableshadow --passalgo=sha512 14. selinux --disabled 15. timezone --utc Asia/Chongqing 16. bootloader --location=mbr 17. # The following is the partition information you requested 18. # Note that any partitions you deleted are not expressed 19. # here so un
16、less you clear all partitions first, this is 20. # not guaranteed to work 21. #clearpart --all --drives=sda 22. 23. #part /boot --fstype=ext4 --size=500 24. #part pv.008002 --grow --size=1 25. 26. volgroup vg_linux --pesize=4096 pv.008002 27. logvol / --fstype
17、ext4 --name=lv_root --vgname=vg_linux --grow --size=1024 --maxsize=51200 28. logvol swap --name=lv_swap --vgname=vg_linux --grow --size=1008 --maxsize=2016 29. zerombr yes 30. 31. reboot 32. 33. %packages 34. @additional-devel 35. @base 36. @chinese-suppor
18、t 37. @client-mgmt-tools 38. @compat-libraries 39. @core 40. @debugging 41. @development 42. @large-systems 43. @legacy-unix 44. @mainframe-access 45. @network-tools 46. @performance 47. @server-policy 48. libXinerama-devel 49. xorg-x11-pr
19、oto-devel 50. libbonobo-devel 51. libXau-devel 52. libgcrypt-devel 53. popt-devel 54. libXrandr-devel 55. libglade2-devel 56. gnutls-devel 57. mtools 58. sgpio 59. cmake 60. compat-gcc-34 61. compat-gcc-34-g77 62. compat-gcc-34-c++
20、 63. tcp_wrappers 64. -gnome-keyring-devel 65. -java-1.6.0-openjdk-devel 66. -mysql-devel 67. -gnome-desktop-devel 68. -libgnome-devel 69. 70. %post #%post作用是当系统初始化安装完毕后需要 71. # Disable unused service # 72. chkcon
21、fig acpid off 73. chkconfig anacron off 74. chkconfig ip6tables off 75. chkconfig netfs off 76. chkconfig nfslock off 77. chkconfig pcscd off 78. chkconfig portmap off 79. chkconfig restorecond off 80. chkconfig rpcgssd off 81. chkconfig rpcidmapd off
22、 82. 83. #init_ssh 84. ssh_cf="/etc/ssh/sshd_config" 85. sed -i -e '74 s/^/#/' -i -e '76 s/^/#/' $ssh_cf 86. sed -i "s/#UseDNS yes/UseDNS no/" $ssh_cf 87. 88. # file descriptors 89. ulimit -HSn 65535 90. 91. echo -ne " 92. * soft nofile 65536 93. * h
23、ard nofile 65536 94. " >>/etc/security/limits.conf 95. 96. #set sysctl 97. true > /etc/sysctl.conf 98. cat >> /etc/sysctl.conf << EOF 99. net.ipv4.ip_forward = 0 100. net.ipv4.conf.default.rp_filter = 1 101. net.ipv4.conf.default.accept_source_route = 0 102
24、 kernel.sysrq = 0 103. kernel.core_uses_pid = 1 104. net.ipv4.tcp_syncookies = 1 105. kernel.msgmnb = 65536 106. kernel.msgmax = 65536 107. kernel.shmmax = 68719476736 108. kernel.shmall = 4294967296 109. net.ipv4.tcp_max_tw_buckets = 6000 110. net.ipv4.tcp_s
25、ack = 1 111. net.ipv4.tcp_window_scaling = 1 112. net.ipv4.tcp_rmem = 4096 87380 4194304 113. net.ipv4.tcp_wmem = 4096 16384 4194304 114. net.core.wmem_default = 8388608 115. net.core.rmem_default = 8388608 116. net.core.rmem_max = 16777216 117. net.core.wmem_max =
26、 16777216 118. dev_max_backlog = 262144 119. net.core.somaxconn = 262144 120. net.ipv4.tcp_max_orphans = 3276800 121. net.ipv4.tcp_max_syn_backlog = 262144 122. net.ipv4.tcp_timestamps = 0 123. net.ipv4.tcp_synack_retries = 1 124. net.ipv4.tcp_syn_retries = 1
27、125. net.ipv4.tcp_tw_recycle = 1 126. net.ipv4.tcp_tw_reuse = 1 127. net.ipv4.tcp_mem = 94500000 915000000 927000000 128. net.ipv4.tcp_fin_timeout = 1 129. net.ipv4.tcp_keepalive_time = 1200 130. net.ipv4.ip_local_port_range = 1024 65535 131. EOF 132. 133. /sbi
28、n/sysctl -p 134. #close ctrl+alt+del 135. sed -i "s/ca::ctrlaltdel:\/sbin\/shutdown -t3 -r now/#ca::ctrlaltdel:\/sbin\/shutdown -t3 -r now/" /etc/inittab 136. 137. #set purview 138. chmod 600 /etc/passwd 139. chmod 600 /etc/shadow 140. chmod 600 /etc/group 141
29、 chmod 600 /etc/gshadow 142. %end 保存退出 9.修改isolinux.cfg文件 vim /installcd/isolinux/isolinux.cfg #修改isolinux.cfg中第一个label 1. label linux 2. menu label ^Install or upgrade an existing system 3. menu default 4. kernel vmlinuz 5. append ks=cdrom
30、/isolinux/mandg.cfg initrd=initrd.img 作用??? 7. 修改安装界面文本标题 这里我们可以去掉安装过程中的CentOS字样,在安装光盘里面有两个.buildstamp文件,一个位于stage2.img中,一个位于 initrd.img中,安装光盘运行时读取的是initrd.img中的那个.buildstamp文件,所以只要把initrd.img文件改了就可以了。 (1) 解压initrd.img文件 2.6内核中的initrd.img采用cpio压缩,不再是2.4内核使用的ext2格式,无法使用mount-o loop 挂载。
31、需要使用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 # rm –f initrd.img 然后修改.buildstamp文件,将CentOS改为MediaCentOS即可. (2) 制作initrd.img文件 假设当前目录位于准备好的
32、initrd文件系统的根目录下; # find . | cpio -c -o >../initrd.img # cp initrd.img /disk/isolinux/ 8.修改安装光盘背景图片1.grub 背景图片为 /disk/isolinux/splash.jpg 2.安装rpm包时背景图片在 /disk/images/install.img 镜像文件中 A.建立install.img镜像挂载目录 # mkdir /media/intall B. 挂载install.img 镜像 # mount –o loop /disk/images/i
33、nstall.img /media/intall C.拷贝/media/intall目录到/tmp 目录下 # rsync –av /media/intall /tmp D.修改背景图 /tmp/install/usr/share/anaconda/pixmaps/progress_first.png E. install.img封装并替换/disk/images/install.img #cd /tmp # mksquashfs install install.img #cp –fv install.img /disk/images/ 10.生成comps.xml
34、comps.xml 文件中包含了安装时用户所见到的与rpm相关的所有内容,它会检查Packages下的RPM包的依赖关系,安装时如果缺少依赖包,它会提示您哪个RPM 包需要哪些依赖库。同时它的角色就是相当于图形安装时选择软件包那个环节。主要由三部分组成,首先是组列表,它描述了在安装过程中需要的不同的组(或组 件),包括组名、组的描述和包含的RPM包;其次是组的层次结构,它将组分成不同的类,并定义了组的一个顺序,从而可以决定哪些组需要先安装;最后为一系 列RPM包以及它们之间的依赖关系。 进入/installcd/repodata [root]#cd /installcd/repodata
35、 重命名.xml文件 [root]#mv e9226c33fcd943a60c7a631c67895c01e61f4e62577c37e971cfe61de32239ff-c6-i386-comps.xml comps.xml 删除其他文件 [root]# ls .|grep -v “comps.xml”|xargs -i rm -f {} 返回到/installcd目录,重新生成comps.xml文件 [root]# cd /installcd/ [root]# createrepo -g repodata/comps.xml ./ [root]# decla
36、re -x discinfo=`head -1 .discinfo` [root]# createrepo -u "media://$discinfo" -g repodata/comps.xml /installcd/ comps.xml文件和其他相关联的文件已被重新生成到repodata目录下,如果增减Packages目录的RPM包,需要重新生成comps.xml文件。 11. 所有以上都是为这步做准备工作 ---制作ISO文件 [root]# cd /install/ [root]# mkisofs -o MyCentOS.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -R -J -v -T /installcd/ [root]#/usr/bin/implantisomd5 /installcd/CentOS6.2-i386.iso #生成MD5校验码 通过以上11步,一张CentOS6.2的CD安装版就新鲜出炉了,快用你自己制作deCD尝试下吧。






