定制自己的eversecOS

 

定制自己的eversecOS

 

一:要求:利用CentOS-5.5-i386-bin-DVD.iso定制自己的发行版。

       性能要求:安装过程要求能选择安装公司的哪些组件,哪些RPM包,并且安装过程中,可通过特定的界面来配置公司开发软件的配置文件。

       界面要求: 文字图片需是公司的内容或logo。

 

二:完成的工作:

       性能部分,配置好ks.cfg后,只能在text方式下可选安装组件与RPM包。

       界面部分,安装完成部分CentOS的图片不知道怎么替换。

 

三:制作方法:

1.在制作发行版之前,需要安装一些软件,安装方法如下:

 #yum -y install anaconda-runtime createrepo yum-utils anaconda anaconda-help busybox-anaconda mkisofs

 

2. 要想做好一个基于CentOS发行版的linux,继续要在虚拟机中安装一次CentOS,安装时,将必要的包选中,比如,base,develop-tools,text-internet等等,其他的,用不到的东西最好不要选,这样做出来的系统,可以保证体积。

 

3. 执行完第二步后,进入第二步安装好的系统,在根目录下创建一些目录,用来存放linux发行版需要的文件,比如,我将我的系统命名为eversecOS,则,我在/目录下创建一个eversecOS的目录,用来存放linux发行版制作时需要的文件。

#mkdir /eversecOS

 

4. 我们需要将CentOS的dvd光盘挂载到linux上来,可以通过挂载光驱,也可以通过挂载iso文件,在挂载之前,我们先在/mnt/目录下创建一个目录,用来挂载。

#mkdir /mnt/cdrom
//dvd
#mount -t iso9660 -o loop /dev/cdrom /mnt/cdrom      //挂载光驱
//iso文件
#mount -t iso9660 -o loop /mnt/hgfs/centos_data1/CentOS-5.5-i386-bin-DVD.iso  /mnt/cdrom      

 

5. 挂载完成之后,利用tar命令将光驱中所有的文件复制至/eversecOS目录:

#cd /mnt/cdrom

#tar -cf - . | ( cd /eversecOS ; tar -xvpf - )

 

6. 进入/eversecOS/CentOS 删除全部文件(rpm包)

# cd  /eversecOS/CentOS

#rm –f  *

 

7.进入/eversecOS ,删除部分文件(夹)。删除后ls –al 只留下一下内容:

#rm XXX XXX

#ls –al

drwxr-xr-x 2 ossec ossec 155648 09-03 01:44 CentOS
-rw-r--r-- 1 root root     112 03-21 23:05 .discinfo
drwxr-xr-x 4 root root    4096 03-21 23:04 images
drwxr-xr-x 2 root root    4096 09-03 19:51 isolinux
drwxr-xr-x 2 root root    4096 09-03 19:47 repodata
-rw-r--r-- 1 root root    1318 2009-09-04 TRANS.TBL
-rw-r--r-- 1 root root     413 03-21 23:04 .treeinfo

 

8. 在CentOS系统安装完成之后,会将所有rpm包的安装信息记录在/root/目录下的install.log文件中,我们可以通过一些脚本对这个文件及/mnt/cdrom文件的操作,将需要的rpm包复制到/eversecOS/CentOS/目录下。

#cd /root/

//生成packages.list,以便之后复制rpm包。

#cat install.log | grep Installing | sed 's/Installing //g'|sed 's/^[0-9]\+://g' >packages.list

 

创建自动提取相关rpm脚本:

#vi cprpms.sh

#!/bin/bash
DEBUG=0
LT_CD=/mnt/cdrom

#挂载光盘存放的目录
ALL_RPMS_DIR=/mnt/cdrom/CentOS

#存放RPM包的目录
LT_RPMS_DIR=/eversecOS/CentOS
packages_list=/root/packages.list
number_of_packages=`cat $packages_list | wc -l`
i=1
while [ $i -le $number_of_packages ] ; do
line=`head -n $i $packages_list | tail -n -1`
name=`echo $line | awk '{print $1}'`
version=`echo $line | awk '{print $3}' | cut -f 2 -d :`
if [ $DEBUG -eq "1" ] ; then
echo $i: $line
echo $name
echo $version
fi
if [ $DEBUG -eq "1" ] ; then
ls $ALL_RPMS_DIR/$name-$version*
if [ $? -ne 0 ] ; then
echo "cp $ALL_RPMS_DIR/$name-$version* "
fi
else
echo "cp $ALL_RPMS_DIR/$name-$version* $LT_RPMS_DIR/"
cp $ALL_RPMS_DIR/$name-$version* $LT_RPMS_DIR/
# in case the copy failed
if [ $? -ne 0 ] ; then
echo "cp $ALL_RPMS_DIR/$name-$version* "
cp $ALL_RPMS_DIR/$name* $LT_RPMS_DIR/
fi
fi
i=`expr $i + 1`

done

执行以上脚本将定制eversecOS-0-1必要的rpm复制到/eversecOS/CentOS目录

#chmod u+x cprpms.sh

#./cprpms.sh

 

9. 这个时候,在/eversecOS/CentOS下,有上次安装centOS的所有需要的.rpm包了。

      如果需要添加自己的.rpm包,现在需要手动添加到这个文件夹了。例如:假若上次安装,没有选择安装ftp,而自己定制的eversecOS-0-1.iso 需要安装vsftpd,那么请把vsftpd-2.0.5-16.el5_4.1.i386.rpm放入/eversecOS/CentOS

 

10. 准备rpm包完成之后,返回到/eversecOS目录下,执行createrepo程序生repodata下的comps.xml文件

#cd /eversecOS

#createrepo -g repodata/comps.xml .  

 

11. 生成comps.xml之后,就要开始创建kickstart脚本了,可以通过anaconda-ks.cfg来完成对kickstart脚本的定制:

#cd ~

# cp anaconda-ks.cfg /eversecOS/isolinux/ks.cfg

 

 

用vi修改ks.cfg成如下:

#vi /eversecOS/isolinux/ks.cfg

# Kickstart file automatically generated by anaconda.

install     

text          

cdrom      

lang en_US.UTF-8         

keyboard us           

skipx               

network --device eth0 --bootproto dhcp --hostname eversecOS

#这儿密码加密了,必须与anaconda-ks.cfg的一致

rootpw --iscrypted $1$g.aM7xrn$XviIYCTu8r51cm91dgQOG/

authconfig --enableshadow --enablemd5   

selinux --disabled                

timezone --utc Asia/Shanghai       

bootloader --location=mbr         

zerombr yes                        

mouse generic3ps/2                    

clearpart --all --initlabel 

reboot      

 

%packages

@base

@core

@dns-server

@development-libs

@development-tools

@dialup

@editors

@gnome-desktop

@games

@graphical-internet

@graphics

@office

@printing

@sound-and-video

@text-internet

@base-x

keyutils

trousers

fipscheck

device-mapper-multipath

imake

java-1.6.0-openjdk

libsane-hpaio

xorg-x11-server-Xnest

xorg-x11-server-Xvfb

vsftpd

#post后面可以安装tar.gz 程序

%post

mkdir -p /yin/hai/long #实验成功语句

 

mount  /dev/cdrom /mnt  #实验失败语句

cp /mnt/test.jpg /yin/hai/long/test.jpg #实验失败语句

 

12. kickstart脚本写完之后,需要修改linux的默认安装方式,这里,修改/eversecOS/isolinux/isolinux.cfg这个文件,达到我们的目标,值得注意的是,isolinux.cfg文件是只读的,要想修改,需要为其赋予可写权限:

#chmod +w /eversecOS/isolinux/isolinux.cfg

#cd /eversecOS/isolinux/

#vi isolinux.cfg

default ks

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 ks

  kernel vmlinuz

  append ks=cdrom:/isolinux/ks.cfg initrd=initrd.img

label local

  localboot 1

label memtest86

  kernel memtest

  append –

 

13. 修改画面:

安装启动画面用的是一种比较奇怪的格式lss16,它限制图片使用16种颜色,除去前景和背景色只能有14种颜色。我们需要ppmtolss16 giftopnm等程序,系统一般默认都安装了。
一般用gimp生成一个index模式的gif图形,颜色限制为14, 然后通过如下的办法进行转:

 #yum -y install syslinux

先生成高质量的gif图:
用photoshop打开图片,然后在文件的下拉菜单里,保存的时候选择“保存为WEB和设备使用格式“,再然后选择gif再选择16色保存,就得到splash.gif
仍后利用giftopnm < splash.gif | ppmtolss16 > splash.lss 转换即可.

然后把新生成的splash.lss替换/eversecOS/isolinux里的同名文件。
另外修改isolinux/boot.msg文件,做一些个性化的提示.

修改images/stage2.img 定制安装过程图片。

stage2.img 使用的是squashfs 文件系统直接挂在即可

我们建立两个目录一个用户挂载一个用于修改文件

mkdir /tmp/stage{1..2}

mount -o loop -t squashfs stage2.img /tmp/stage1

拷贝文件到stage2

cd /tmp/stage1

tar xzf - . |(cd /tmp/stage1 ; tar -xvpf -)

注意如果是直接cp

这个文件/tmp/stage1/.buildstamp 一定要拷贝到stage2 的相关目录去,否则

在安装的时候会出现"no centos cd was found which matches your boot

media"

cd /tmp/stage2/usr/share/anaconda/pixmaps

更换此目录下的图片即可

生成新的stage2.img

cd /tmp/stage2/

mksquashfs . ../stage2.img -all-root -no-fragments

 

14. 去掉安装过程中的CentOS字样,用EversecOS 替代:
在安装光盘里面有两个.buildstamp文件,一个位于stage2.img中,一个位于initrd.img中,安装光盘运行时读取的是initrd.img中的那个.buildstamp文件,所以只要把initrd.img文件改了就可以了。

解压initr.dimg文件:
2.6内核中的initrd.img采用cpio压缩,不再是2.4内核使用的ext2格式,无法使用mount -o loop 挂载。需要使用gunzip解压缩,然后再使用
利用cpio给img解包
# cd /eversecOS/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改为EversecOS即可.
制作initrd.img文件:
#假设当前目录位于准备好的initrd文件系统的根目录下
# find . | cpio -c -o > ../initrd.img
# gzip ../initrd.img
# mv initrd.img.gz initrd.img
# cp initrd.img /eversecOS/isolinux/
仍后将initrd.img复制到/eversecOS/isolinux/

 

15. 如何替换安装以后的grub ?

(1) 将备一张640 x 480 16色grub.gif图片,档案类型为JPG的格式
(2)convert grub.gif -colors 14 -geometry 640x480! splash.xpm && gzip -9 splash.xpm
(3) 把生成的splash.xpm.gz直接替换/boot/grup/splash.xpm.gz 文件即可.(在安装光盘的ks.cfg文件%post语句后面写shell脚本.)


16. 如何去掉启动过程中的"CentOS release 5 (Final)"
在安装光盘里的ks.cfg文件里写好脚本,直接替换/etc/redhat-release /etc/issue /boot/grub/grub.conf即可。

if [ -f /etc/issue ];then sed -i 's/CentOS release 5.5 (Final)/EversecOS 0.1/' /etc/issue; fi >/dev/null 2>&1

if [ -f /boot/grub/grub.conf ];then sed -i 's/CentOS/EversecOS 0.1 /' /boot/grub/grub.conf; fi >/dev/null 2>&1

echo "eversecOS 0.1" > /etc/redhat-release

 

 

17. 在完成以上工作之后,就可以使用mkisofs发布iso文件,不能将/eversecOS这个目录直接复制到windows用UltraISO这样的软件直接制作,因为这样做出来,不能够引导

#cd  /eversecOS

#mkisofs -R -J -T -r -l -d -allow-multidot -allow-leading-dots -no-bak -o /mnt/hgfs/centos_data1/eversecOS-0-1.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table .

 

结束:

制作iso完成之后,即可将iso下载至windows,使用VMware安装看看,若能够安装成功,则iso制作成功。

 

 

/

 

例子:

%post --nochroot

# Mount CDROM

mkdir -p /mnt/cdrom

mount -r -t iso9660 /tmp/cdrom /mnt/cdrom

 

# Copy our file

unalias cp

 

cp -f /mnt/cdrom/splash.xpm.gz /mnt/sysimage/ > /dev/null

cp -f /mnt/cdrom/default.jpg /mnt/sysimage/ > /dev/null

#cp -f /mnt/cdrom/default.jpg / > /dev/null

cp /mnt/cdrom/splash.xpm.gz / > /dev/null

umount /mnt/cdrom

%post

if [ -f /etc/issue ];then sed -i 's/CentOS release 5.5 (Final)/EversecOS 0.1/' /etc/issue; fi >/dev/null 2>&1

if [ -f /boot/grub/grub.conf ];then sed -i 's/CentOS/EversecOS 0.1 /' /boot/grub/grub.conf; fi >/dev/null 2>&1

echo "eversecOS 0.1" > /etc/redhat-release

 

unalias cp > /dev/null

cp -f /default.jpg /usr/share/backgrounds/images/ > /dev/null

#unalias cp > /dev/null

rm -f /boot/grub/splash.xpm.gz > /dev/null

cp -f /splash.xpm.gz /boot/grub/ > /dev/null

startx > /dev/null

 

 

// 对CentOS    的修改还有: /var/log/boot.log

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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值