-----thanks NetSeek
环境说明:CentOS 5.5-i386 + Vmware Workstation.
装好的虚拟机母系统的磁盘为一个IDE 10G,能连接互联网.
DIY
CD的装机图片,GRUB图片会去掉,不要华丽,用原始。
从页面上复制脚本粘贴进LINUX后,注意DOS
UNIX格式的问题,否则脚本执行会报错。可用vi -b filename查看修改。
制作好的光盘结构介绍
* isolinux
目录存放光盘启动时的安装界面信息
* images 目录包括了必要的启动映像文件
* CentOS 目录存放安装软件包及信息
* .discinfo 文件是安装价质的识别信息
* TRANS.TBL
一.制作TANK-OS具体过程
0.
在虚拟机里安装一个centos母系统。
如果做服务器版本CD的话,尽量把常用的文本界面下的工具安装上。
注意:容量问题。本次实验母系统装好后1.3G,DIY好的光盘容量560M。使制作好的容量尽量保持在一张CD容量内(<700M),方便携带安
装.
1.安装制作发行版所需的基本软件包
# yum -y install anaconda-runtime
createrepo yum-utils anaconda anaconda-help busybox-anaconda mkisofs
2.
制作tank-os源文件夹
# mkdir /tank-os
# mkdir /mnt/cdrom
# mount -t
iso9660 -o loop /dev/cdrom /mnt/cdrom/ 挂载光盘镜像
或者挂载ISO文件到/mnt/cdrom
# mount -t iso9660 -o loop centos.xxx.iso /mnt/cdrom
将CentOS的ISO文件挂载到/mnt/cdrom目录
# cd /mnt/cdrom
将/mnt/cdrom里的
images isolinux repodata三个目录 .discinfo TRANS.TBL两个文件拷贝到/tank-os这个目录下.
并#mkdir
/tank-os/CentOS 建立存放rpm包的目录.
/tank-os/下的目录结构应如下:
[root@server
tank-os]# ls -al
total 100
drwxr-xr-x 6 root root 4096 Apr 11
21:00 .
drwxr-xr-x 27 root root 4096 Apr 12 05:26 ..
drwxr-xr-x 2
root root 36864 Apr 8 16:06 CentOS //空目录
-rw-r--r-- 1 root root 97
Apr 8 16:43 .discinfo
drwxr-xr-x 4 root root 4096 Mar 21 23:04
images
drwxr-xr-x 2 root root 4096 Apr 12 00:00 isolinux
drwxr-xr-x
2 root root 4096 Apr 11 21:00 repodata
-r--r--r-- 1 root root 7048
Mar 21 23:05 TRANS.TBL
3.定制package.list软件包清单
在母系统~root目录下有安装
母系统产生的日志,/root/install.log。用脚本从中提取软件包.
#cd /root
#cat install.log |
grep Installing | sed 's/Installing //g'|sed 's/^[0-9]\+://g' >
packages.list
#wc -l packages.list
466 packages.list
将定制
tank-os所要的rpm复制到/tank-os/CentOS目录
#cat packages.list |while read
name ;do cp -a /mnt/cdrom/CentOS/$name.rpm /tank-os/CentOS/ ;done
#cd
/tank-os
#createrepo -g repodata/comps.xml . //注意最后的"."不可漏了.
4.
配置kickstart脚本
安装母系统以后,会在系统里产生一个kickstart安装脚本,/root/anaconda-ks.cfg
(就
是以后自动安装DIY系统的系统配置文件,其参数自己视情况修改,如磁盘分区容量,hostname...;当然安装时不选auto自动安装也可以选择
centos原来提供的其他安装方式自己根据提示设置.)
# cp anaconda-ks.cfg
/tank-os/isolinux/ks.cfg
# vi /tank-os/isolinux/ks.cfg
自己动手修改脚本如下,不要随意复制粘贴后就执行。
# Kickstart file automatically
generated by anaconda.
# Install CentOS instead of Upgrade
install
text
#install from cd-rom
cdrom
lang en_US.UTF-8
keyboard
us
# Skip the X Configuration
skipx
network --device eth0
--bootproto dhcp --hostname tank-os.test.org
rootpw tank-os #如果去掉该行,安装时提示输入ROOT密码。
# Setup the firewall with SSH, HTTP/S,
Syslog, Webmin, and Netflow enabled
firewall --enabled
--port=22:tcp --port=80:tcp --port=443:tcp
authconfig
--enableshadow --enablemd5
# Disable SELinux
selinux --disabled
timezone
--utc Asia/Shanghai
# Clear the Bootloader and load it to the
Master Boot Record
bootloader --location=mbr
zerombr yes
#
Set the Mouse
mouse generic3ps/2
# The following is the
partition information you requested
# Note that any partitions you
deleted are not expressed
# here so unless you clear all partitions
first, this is
# not guaranteed to work
clearpart --all
--initlabel
#如果没有下面的分区设置,安装时会有默认分区,当然也可以自行设置。
part /boot --fstype
ext3 --size=100 --asprimary
part / --fstype ext3 --size=6000
part
swap --size=512
part /data --fstype ext3 --size=1 --grow
#---
Reboot the host after installation is done
reboot
#如果没有该行,安装结束时需要点击“reboot”方可重启。
%packages
@base
@core
@dns-server
@dialup
@editors
@ftp-server
@legacy-network-server
@mail-server
@network-server
@news-server
@server-cfg
@text-internet
@web-server
@smb-server
keyutils
trousers
fipscheck
device-mapper-multipath
#some
changers after install packegs.
%post
if [ -f
/boot/grub/splash.xpm.gz ];then rm -f /boot/grub/splash.xpm.gz; fi
>/dev/null 2>&1
if [ -f /etc/redhat-release ];then sed -i
's/CentOS/TANK-OS/' /etc/redhat-release; fi >/dev/null 2>&1
if
[ -f /etc/issue ];then sed -i 's/CentOS/TANK-OS/' /etc/issue; fi
>/dev/null 2>&1
if [ -f /boot/grub/grub.conf ];then sed -i
's/CentOS/TANK-OS/' /boot/grub/grub.conf; fi >/dev/null 2>&1
chkconfig
sendmail off >/dev/null 2>&1
chkconfig portmap off
>/dev/null 2>&1
chkconfig cups off >/dev/null
2>&1
chkconfig rpcidmapd off >/dev/null 2>&1
5.
添加auto项,让系统从kickstart配置启动
# vi /tank-os/isolinux/isolinux.cfg
default
auto
prompt 1
timeout 600
display boot.msg
F1 boot.msg
F2
options.msg
F3 general.msg
F4 param.msg
F5 rescue.msg
label
linux
kernel vmlinuz
append initrd=initrd.img
label
text
kernel vmlinuz
append initrd=initrd.img text
label
auto
kernel vmlinuz
append ks=cdrom:/isolinux/ks.cfg
initrd=initrd.img
label ks
kernel vmlinuz
append ks
initrd=initrd.img
label local
localboot 1
label
memtest86
kernel memtest
append -
二.个性化定制你的系统
去
掉装机图片:修改/tank-os/isolinux/boot.msg文件,删除“splash.lss”。
删除/tank-os/isolinux/splash.lss这个图片。
去掉安装过程中的CentOS字样:
在安装光盘里面有两个.buildstamp文件,一个位于stage2.img中,一个位于initrd.img中,
安装光盘运行时读取的是initrd.img中的那个.buildstamp文件,所以只要把initrd.img文件改了就可以了。
2.6内核中的initrd.img采用cpio压缩,不再是2.4内核使用的ext2格式,无法使用mount -o loop 挂载。需
要使用gunzip解压缩,然后再使用利用cpio给img解包
# cd /tank-os/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
然后修改.buildstamp文件,将CentOS改为tank-os即可.当然,里面的网址也
可以改。
生成新的initrd.img文件:
#cd /tmp/initrd
# find . | cpio -c
-o > ../initrd.img
# gzip ../initrd.img
#cd ..
# mv
initrd.img.gz initrd.img
# cp initrd.img /tank-os/isolinux/
然后将
initrd.img复制到/tank-os/isolinux/,覆盖旧的。
三.打包发布
# cd /tank-os
#
declare -x discinfo=`head -1 .discinfo` //指定环境变量discinfo
#
createrepo -u "media://$discinfo" -g repodata/comps.xml .
//生成repodata数据库。
说明:repodata
数据库精确描述一个rpm包的详细信息,如依赖关系,包含文件,校验码信息。它的文件主要是XML格式。
生成ISO文件
#cd
/tank-os
#mkisofs -R -J -T -r -l -d -allow-multidot
-allow-leading-dots -no-bak -o /tmp/tank-os-0.1-i386.iso \
-b
isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size
4 -boot-info-table .
生成Md5,供下载后校验ISO
#md5sum
/tmp/tank-os-0.1-i386.iso > tank-os-0.1-i386.iso.md5
四.另建立个虚拟机
测试安装该ISO
阅读(791) | 评论(0) | 转发(0) |