基于CentOS制作Linux发行版光盘

Posted by – 2011-12-28

#############################################
# Custom Linux ISO Bulid
# Author: 楚霏
# Company: chengyongxu.com
# Date: 2011-04-28
# Update: 2011-12-23
# Env: CentOS 5.5 x86_64 && CentOS 6.2 x86_64
#############################################
一、安装制作发行版所需的基本软件包并创建工作目录

1 yum -y install anaconda-runtime createrepo yum-utils anacondaanaconda-help busybox-anaconda mkisofs
2 mkdir /os
3 mkdir /mnt/cdrom

二、复制母盘文件

01 #挂载光盘镜像
02 mount -t iso9660 -o loop /usr/local/src/CentOS-5.5-x86_64-bin-DVD-1of2.iso  /mnt/cdrom
03 mount -t iso9660 -o loop /usr/local/src/CentOS-6.2-x86_64-bin-DVD1.iso  /mnt/cdrom
04 cd /mnt/cdrom
05 #将光盘文件拷到工作目录
06 tar -cf - . | ( cd /os ; tar -xvpf - )
07 #删除无用的文件
08 cd /os/
09 rm RELEASE-NOTES-* -f
10  
11 #centos5下是:
12 rm -rf /os/CentOS/*
13 #centos6下是:
14 rm -rf /os/Packages/*

三、定制package.list软件包清单

01 #以一台最小安装的线上服务器作为模板,将这台模板服务器安装时的/root/anaconda-ks.cfg拷贝到本地
02 #然后把这台模板服务器的RPM包信息导出拷贝到本地,导出方法是:
03 rpm -qa |awk -F- '{print $1}' >> packages.list
04 #可以统计一下条数
05 wc -l /root/packages.list
06 #如果你指定了alias cp=cp -i,刚先取消
07 alias cp=cp
08  
09 #把需要的RPM包列表中的包从光盘镜像拷贝到目标目录的相应位置
10 #centos5下是:
11 for i in `cat /root/packages.list`;do cp -vrf /mnt/cdrom/CentOS/$i* /os/CentOS/;done
12 #centos6下是:
13 for i in `cat /root/packages.list`;do cp -vrf /mnt/cdrom/Packages/$i* /os/Packages/;done
14  
15 #把想安装系统之后放入系统的源码包(chengyongxu.com.tar.gz)放入工作目录下
16 mv chengyongxu.com.tar.gz /os/
17 #下载光盘镜像中没有,但又需要的RPM包,例如:
18 #centos5下是:
21  
22 #执行createrepo程序生成repodata下的comps.xml文件
23 cd /os
24 #centos6下需要:
25 mv repodata/*-comps.xml repodata/comps.xml
26  
27 createrepo -g repodata/comps.xml .

四、配置kickstart

001 cd /os
002 #把模板服务器上anaconda-ks.cfg拷贝到工作目录
003 #订制完光盘默认密码是模板服务器装系统时的密码
004 cp anaconda-ks.cfg /os/ks.cfg
005 vi/os/isolinux/ks.cfg 并修改脚本如下:
006 vi ks.cfg
007 #CentOS 5的配置如下
009 #----------------------------引用文字-开始----------------------------
010 # Kickstart file automatically generated by anaconda.
011  
012 install
013 cdrom
014 lang en_US.UTF-8
015 keyboard us
016 network --device eth0 --bootproto dhcp --hostname localhost
017 rootpw --iscrypted $1$kAVanbBp$QjTH30VQgnj/.gYkQ6aN0
018 firewall --enabled --port=22:tcp
019 authconfig --enableshadow --enablemd5
020 selinux --enforcing
021 timezone --utc Asia/Shanghai
022 bootloader --location=mbr --driveorder=sda
023 # The following is the partition information you requested
024 # Note that any partitions you deleted are not expressed
025 # here so unless you clear all partitions first, this is
026 # not guaranteed to work
027 #clearpart --linux
028 clearpart --all --initlabel
029 part /boot --fstype ext3 --size=200 --asprimary
030 part / --fstype ext3 --size=40965
031 part swap --size=10245
032 part /data --fstype ext3 --size=1 --grow
033  
034 %packages
035 @base
036 @core
037 @dialup
038 @editors
039 @text-internet
040 keyutils
041 trousers
042 fipscheck
043 device-mapper-multipath
044 autoconf
045 automake
046 bison
047 bzip2-devel
048 compat-gcc-34-g77
049 compat-libstdc++-296
050 compat-libstdc++-33
051 curl
052 curl-devel
053 e2fsprogs-devel
054 flex
055 freetype-devel
056 gcc
057 gcc-c++
058 gettext-devel
059 krb5-devel
060 libidn-devel
061 libjpeg-devel
062 libpng-devel
063 libtiff-devel
064 libtool
065 libxml2
066 libxml2-devel
067 ncurses-devel
068 ntp
069 openssl-devel
070 pam-devel
071 sysstat
072 mhash-devel
073 zlib-devel
074  
075 # chengyongxu.com System Install
076 %post --nochroot
077  
078 # Mount CDROM
079 mkdir -p /mnt/cdrom
080 mount -r -t iso9660 /tmp/cdrom /mnt/cdrom
081  
082 # Copy our files, extract it ,then move to right locations
083 cp /mnt/cdrom/chengyongxu.com.tar.gz /mnt/sysimage/tmp/chengyongxu.com.tar.gz> /dev/null
084 cd /mnt/sysimage/tmp/
085 tar -zxvf chengyongxu.com.tar.gz > /dev/null
086 cp -R /mnt/sysimage/tmp/src/* /mnt/sysimage/usr/local/src/ >/dev/null 2>/dev/null
087  
088 # Umount CDROM
089 umount /mnt/cdrom
090  
091 %post
092  
093 # ssh configration
094 sed -i 's/#UseDNS yes/UseDNS no/g' /etc/ssh/sshd_config
095  
096 # Disable IPV6
097 sed -i 's/\IPV6\=yes/\IPV6\=no/g' /etc/sysconfig/network
098 echo 'alias net-pf-10 off
099 alias ipv6 off' >> /etc/modprobe.conf
100  
101 # Vim syntax on
102 VI_IN_BASH=`grep vim /root/.bashrc`
103 if [ -z "$VI_IN_BASH" ]
104 then
105 echo "alias vi='vim'" >> /root/.bashrc
106 source /root/.bashrc
107 fi
108  
109 # rsync configration
110 echo "alias rsync='rsync -apur --partial -e \"ssh -p 22 -c arcfour\"'" >> /root/.bashrc
111  
112 # Show detail when use the "history" command
113 echo "HISTTIMEFORMAT=\"%Y-%m-%d %H:%M:%S \"" >> /etc/profile
114  
115 # Turn off unnecessary services
116 SERVICE_NEED="apmd|atd|auditd|cpuspeed|crond|mdmonitor|mdmpd|microcode-ctl|network|ntpd|readahed_early|readahead_later|smartd|sshd|syslog|irqbalance"
117 SERVICE_NONEED=`chkconfig --list|awk '{print $1}'|grep -vE $SERVICE_NEED`
118 SERVICE_NEED_LIST=`echo $SERVICE_NEED|sed "s/|/ /g"`
119 for i in $SERVICE_NONEED; do chkconfig --level 2345 $i off; service $i stop; done
120 for i in $SERVICE_NEED_LIST; do chkconfig --level 2345 $i on; service $i start; done
121 #----------------------------引用文字-结束----------------------------
122  
123 #CentOS 6的配置如下
124 #----------------------------引用文字-开始----------------------------
125 # Kickstart file automatically generated by anaconda.
126  
127 #version=RHEL6
128 install
129 cdrom
130 lang en_US.UTF-8
131 keyboard us
132 #network --device eth0 --bootproto dhcp --hostname localhost
133 rootpw  --iscrypted $6$5q5hu2jMre1MaP4f$DUEVi7i0qo/4Vrh7iiuemzwLVv96pGWVO.T/SzRLE15qYDY9ZP/UfVNXpsoYTZsNLWrlce.yudFo.L7/BlG1
134 firewall --service=ssh
135 authconfig --enableshadow --passalgo=sha512 --enablefingerprint
136 selinux --enforcing
137 timezone --utc Asia/Shanghai
138 bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"
139 # The following is the partition information you requested
140 # Note that any partitions you deleted are not expressed
141 # here so unless you clear all partitions first, this is
142 # not guaranteed to work
143 #clearpart --none --drives=sda
144 clearpart --all --initlabel
145 part /boot --fstype=ext4 --size=200 --asprimary
146 part / --fstype=ext4 --size=40965
147 part swap --size=10245
148 part /data --fstype=ext4 --size=1 --grow
149  
150 repo --name="CentOS"  --baseurl=file:///mnt/source --cost=100
151  
152 %packages
153 @base
154 @client-mgmt-tools
155 @console-internet
156 @core
157 @server-policy
158 autoconf
159 automake
160 bison
161 bzip2-devel
162 cmake
163 compat-gcc-34-g77
164 compat-libstdc++-296
165 compat-libstdc++-33
166 curl
167 curl-devel
168 device-mapper-multipath
169 e2fsprogs-devel
170 flex
171 freetype-devel
172 ftp
173 gcc
174 gcc-c++
175 gettext-devel
176 htop
177 iptraf
178 krb5-devel
179 lftp
180 libidn-devel
181 libjpeg-devel
182 libpng-devel
183 libtiff-devel
184 libtool
185 libxml2
186 libxml2-devel
187 logwatch
188 lrzsz
189 make
190 ncurses-devel
191 ntp
192 openssl-devel
193 pam-devel
194 patch
195 sgpio
196 sysstat
197 trousers
198 mhash-devel
199 unix2dos
200 unzip
201 zlib-devel
202 %end
203  
204 # chengyongxu.com System Install
205 # CentOS 6 Can not use post --nochroot
206 %post --nochroot
207  
208 # Mount CDROM
209 mkdir -p /mnt/cdrom
210 mount -r -t iso9660 /dev/cdrom /mnt/cdrom
211  
212 # Copy our files, extract it ,then move to right locations
213 cd /mnt/cdrom/
214 tar -zmxvf chengyongxu.com.tar.gz -C /mnt/sysimage/usr/local/src/ > /dev/null
215 cd /mnt
216  
217 # Umount CDROM
218 umount /mnt/cdrom
219  
220 %post
221  
222 # ssh configration
223 sed -i 's/#UseDNS yes/UseDNS no/g' /etc/ssh/sshd_config
224  
225 # Disable IPV6
226 echo "NETWORKING_IPV6=no" >> /etc/sysconfig/network
227 echo 'alias net-pf-10 off
228 options ipv6 disable=1' >> /etc/modprobe.d/ipv6-off.conf
229  
230 # Vim syntax on
231 VI_IN_BASH=`grep vim /root/.bashrc`
232 if [ -z "$VI_IN_BASH" ]
233 then
234 echo "alias vi='vim'" >> /root/.bashrc
235 source /root/.bashrc
236 fi
237  
238 # rsync configration
239 echo "alias rsync='rsync -apur --partial -e \"ssh -p 22 -c arcfour\"'" >> /root/.bashrc
240  
241 # Show detail when use the "history" command
242 echo "HISTTIMEFORMAT=\"%Y-%m-%d %H:%M:%S \"" >> /etc/profile
243  
244 # Add a crontab task
245 echo "0 */8 * * * /usr/sbin/ntpdate 210.72.145.44" >> /var/spool/cron/root
246  
247 # If forget this, will output error : "sudo: sorry, you must have a tty to run sudo" on system boot
248 sed -i 's/Defaults    requiretty/#Defaults    requiretty/g' /etc/sudoers
249  
250 # Install Nginx PHP MySQL Memcached GD Libxml Libmcrypt Libevent Sphinx Nrpe
251 tar -zmxvf /usr/local/src/Etc_Init.d.tar.gz -C /etc/init.d/ > /dev/null
252 tar -zmxvf /usr/local/src/my.cnf.tar.gz -C /etc/ > /dev/null
253 tar -zmxvf /usr/local/src/Usr_Local.tar.gz -C /usr/local/ > /dev/null
254  
255 # Add Users
256 groupadd www -g 88
257 useradd -u 88 -g www www -m
258 useradd mysql
259 useradd nagios
260  
261 # Add services
262 chkconfig --add nginx
263 chkconfig --add memcached
264 chkconfig --add mysqld
265 chkconfig --add nrpe
266 chkconfig --add sphinx
267  
268 # Turn off unnecessary services
269 SERVICE_NEED="apmd|atd|auditd|cpuspeed|crond|irqbalance|memcached|mdmonitor|mdmpd|microcode-ctl|network|nginx|ntpd|nrpe|readahed_early|readahead_later|smartd|sphinx|sshd|syslog"
270 SERVICE_NONEED=`chkconfig --list|awk '{print $1}'|grep -vE $SERVICE_NEED`
271 SERVICE_NEED_LIST=`echo $SERVICE_NEED|sed "s/|/ /g"`
272 for i in $SERVICE_NONEED; do chkconfig --level 2345 $i off; service $i stop; done
273 for i in $SERVICE_NEED_LIST; do chkconfig --level 2345 $i on; service $i start; done
274  
275 # By 楚霏 (yxcx@yahoo.cn<script type="text/javascript">
276 /* <![CDATA[ */
277 (function(){try{var s,a,i,j,r,c,l,b=document.getElementsByTagName("script");l=b[b.length-1].previousSibling;a=l.getAttribute('data-cfemail');if(a){s='';r=parseInt(a.substr(0,2),16);for(j=2;a.length-j;j+=2){c=parseInt(a.substr(j,2),16)^r;s+=String.fromCharCode(c);}s=document.createTextNode(s);l.parentNode.replaceChild(s,l);}}catch(e){}})();
278 /* ]]> */
279 </script>)
280 #----------------------------引用文字-结束----------------------------

五、让系统从kickstart配置启动

01 #修改disk/isolinux/isolinux.cfg文件,如下是我的一个配置文件
02 vi isolinux/isolinux.cfg
03 #把default选项改为ks
04 #append ks initrd=initrd.img改为append ks=cdrom:/ks.cfg initrd=initrd.img
05 #----------------------------引用文字-开始----------------------------
06 default ks
07 prompt 1
08 timeout 600
09 display boot.msg
10 F1 boot.msg
11 F2 options.msg
12 F3 general.msg
13 F4 param.msg
14 F5 rescue.msg
15 label linux
16   kernel vmlinuz
17   append initrd=initrd.img
18 label text
19   kernel vmlinuz
20   append initrd=initrd.img text
21 label ks
22   kernel vmlinuz
23   append ks=cdrom:/ks.cfg initrd=initrd.img
24 label local
25   localboot 1
26 label memtest86
27   kernel memtest
28   append -
29 #----------------------------引用文字-结束----------------------------
30  
31 #CentOS 6的配置如下
32 #----------------------------引用文字-开始----------------------------
33 default ks
34 prompt 1
35 timeout 60
36  
37 display boot.msg
38  
39 menu background splash.jpg
40 menu title Welcome to CentOS 6.2!
41 menu color border 0 #ffffffff #00000000
42 menu color sel 7 #ffffffff #ff000000
43 menu color title 0 #ffffffff #00000000
44 menu color tabmsg 0 #ffffffff #00000000
45 menu color unsel 0 #ffffffff #00000000
46 menu color hotsel 0 #ff000000 #ffffffff
47 menu color hotkey 7 #ffffffff #ff000000
48 menu color scrollbar 0 #ffffffff #00000000
49  
50 label linux
51   menu label ^Install or upgrade an existing system
52   menu default
53   kernel vmlinuz
54   append initrd=initrd.img
55 label ks
56   kernel vmlinuz
57   append ks=cdrom:/ks.cfg initrd=initrd.img
58 label vesa
59   menu label Install system with ^basic video driver
60   kernel vmlinuz
61   append initrd=initrd.img xdriver=vesa nomodeset
62 label rescue
63   menu label ^Rescue installed system
64   kernel vmlinuz
65   append initrd=initrd.img rescue
66 label local
67   menu label Boot from ^local drive
68   localboot 0xffff
69 label memtest86
70   menu label ^Memory test
71   kernel memtest
72   append -
73 #----------------------------引用文字-结束----------------------------

六、生成光盘镜像

1 mkisofs -R -J -T -V Boot --allow-multidot --allow-leading-dots -no-bak -input-charset UTF-8 -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot --boot-load-size 4 --boot-info-table -o /tmp/chengyongxu.com-Linux-Release-20111223-x64.iso .
2 #可以计算一下md5并保存信息
3 md5sum /tmp/Chengyonxu.com-Linux-Release-20111223-x64.iso >> /tmp/md5.txt

七、参考文档

http://bbs.linuxtone.org/thread-2448-1-1.html

http://bbs.linuxtone.org/thread-1240-1-1.html

http://hi.baidu.com/zj8la8la/blog/item/8aac2b02b8fd5b85d53f7c7c.html

Logo

更多推荐