资源描述
定制Centos6.2系统盘详细过程
http://www.lampbo.org/linux-xuexi/linux-advance/diy-centos6.html
工作工程中经常遇到一次安装许多台服务器,而在IDC机房用网络远程安装也不是很现实,因为期间如果有其他服务器重启那就麻烦了,曾经发生过类似事 故,所以只能一台一台的安装,而如果每台都用原始发行版本,还要去一个一个选择安装选项,很麻烦。经过在网上搜索资料学习到可以自己定制linux的安装 (windows2003也可以定制安装,其教程会陆续发布)。我们以最新发行的CentOS6.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
由于在制作过程中需要拷贝大量数据,所以硬盘尽量保持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 | grep Installing | sed 's/Installing //g' > /root/packages.list 问题:无法找到
sed 's/Installing //g'
[中文版] 解决:不输入这部分
[root]# cat install.log | grep 安装 | sed 's/安装 //g' > /root/packages.list
生成后,仔细查看该文件,一般会在某些文件开始部分如“1:”这样的字符,需要删除这些字符,否在后面执行copy动作会报错。
4. 创建定制系统的目录(1). 光盘结构及文件简介
* isolinux 目录存放光盘启动时的安装界面信息
* images 目录包括了必要的启动映像文件
* Packages 目录存放安装软件包及信息
* .discinfo 文件是安装价质的识别信息
5.创建设/installcd目录并挂载光盘
[root]# mkdir /installcd
[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 write-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
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包存放的目录
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`
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-$version*
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
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 #查看安装包是否正确拷贝
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 static --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. authconfig --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 unless 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=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-support
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-proto-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++
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. chkconfig 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
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. * hard 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. 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_sack = 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 = 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
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. /sbin/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. 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:/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 挂载。需要使用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文件
假设当前目录位于准备好的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/install.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.xmlcomps.xml 文件中包含了安装时用户所见到的与rpm相关的所有内容,它会检查Packages下的RPM包的依赖关系,安装时如果缺少依赖包,它会提示您哪个RPM 包需要哪些依赖库。同时它的角色就是相当于图形安装时选择软件包那个环节。主要由三部分组成,首先是组列表,它描述了在安装过程中需要的不同的组(或组 件),包括组名、组的描述和包含的RPM包;其次是组的层次结构,它将组分成不同的类,并定义了组的一个顺序,从而可以决定哪些组需要先安装;最后为一系 列RPM包以及它们之间的依赖关系。
进入/installcd/repodata
[root]#cd /installcd/repodata
重命名.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]# declare -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尝试下吧。
展开阅读全文