Chinaunix首页 | 论坛 | 博客
  • 博客访问: 964583
  • 博文数量: 335
  • 博客积分: 10287
  • 博客等级: 上将
  • 技术积分: 3300
  • 用 户 组: 普通用户
  • 注册时间: 2005-08-08 15:29
文章分类

全部博文(335)

文章存档

2015年(4)

2014年(15)

2013年(17)

2012年(11)

2011年(12)

2010年(96)

2009年(27)

2008年(34)

2007年(43)

2006年(39)

2005年(37)

我的朋友

分类: LINUX

2007-11-14 11:07:04

   需要自定义Linux发行版光盘的原因有很多,例如:想学习、想自己发布产品、为管理方便、更新Bug软件包等等。而最近由于工作的需要,也研究了一下Linux发行光盘的构造。这里主要是对沿用红帽发行方式的版本,例如CentOS等。他们都是使用anaconda安装环境的。下面的说明也只针对该环境,以组合红旗两CD光盘为1张DVD光盘为例说明
   另外,网上也有很多可以参考的资料,在附录中有链接。不过,若完全按照这些资料的步骤,会在最后执行buildinstall时出现很多的rpm依赖问题。所以,我绕过了这个脚本,使用更简单、更简单的方式处理。
一、架构
   以红旗 5.0 SP2发行版为例,其使用的也是anaconda安装环境。安装光盘架构如下:
引用
# ll
total 14
drwxr-sr-x  5 root root 2048 Jan 11 06:10 Asianux <-安装向导镜像及rpm包
drwxr-sr-x  2 root root 2048 Jan 11 06:18 Documents <-License协议及相关说明文档
-r--r--r--  1 root root 1319 Jan 11 06:19 TRANS.TBL <-当前目录的列表
drwxr-sr-x  7 root root 4096 Jan 11 06:10 dosutils <-为Dos下特殊安装准备的工具
drwxr-sr-x  4 root root 2048 Jan 11 06:19 images <-其他引导img镜像及额外驱动
drwxr-sr-x  2 root root 2048 Jan 11 06:10 isolinux <-光盘引导程序及msg提示信息

需要留意的,其实只有Asianux目录及isolinux目录。其他目录及文件在一般情况下是不需要修改的。
另外,还需要留意Asianux/base目录的内容:
引用
# pwd
/mnt/disk/Asianux/base
# ll stage2.img comps.xml
-rw-r--r--  2 root root   368715 Jan 11 06:05 comps.xml <-软件包组
-rw-r--r--  2 root root 77488128 Jan 11 06:10 stage2.img <-stage2.img是CD介质安装的镜像文件

stage2.img是光盘引导的镜像文件,如果自定义安装过程中的说明(个性化),需要修改它。而该目录下的其他文件则是硬盘等安装方式的镜像文件:
引用
hdstg1.img、hdstg2.img:都是硬盘介质安装的镜像文件
netstg1.img、netstg2.img:都是FTP、NFS等介质安装方式的镜像文件

而comps.xml是安装时候在“定制安装”中可以选择的组,如要增加“定制组”,则需要编辑该文件。
二、准备
   首先,把原始介质准备好,以红旗DC 5.0 for x86为例说明。
1、准备anaconda运行环境
如果您的系统中没有安装下述的软件,请安装上:
rpm -qa|grep anaconda
busybox-anaconda-1.00-4
anaconda-runtime-10.1.1.13-1.21AX
anaconda-10.1.1.13-1.21AX

另外,我使用的是简化方式,不直接运行buildinstall命令,所以,其他的软件包可以不用安装。而如果您想重新生成stage2.img等文件,请参考附录的信息。
2、获取介质
假设我们已经把两张红旗安装光盘做成.iso文件:
引用
redflag-dc5.0-sp2-x86-release-disc1.iso
redflag-dc5.0-sp2-x86-release-disc2.iso

通过下面的命令,挂载CD1并释放到/data/disk/install目录中:
mkdir /mnt/disk
mkdir -p /data/disk/install
mount -o loop redflag-dc5.0-sp2-x86-release-disc1.iso /mnt/disk
cd /mnt/disk
tar cf - ./|tar xf - -C /data/disk/install

用同样的方式处理CD2:
cd -
umount /mnt/disk
mount -o loop redflag-dc5.0-sp2-x86-release-disc2.iso /mnt/disk
cd /mnt/disk
tar cf - ./|tar xf - -C /data/disk/install

※说明一下:为什么使用tar?而不使用cp等命令?
原因是,在光盘的根目录下会有写隐含的文件,例如.discinfo,而这些文件使用cp命令是比较麻烦的,但这些文件又是很重要的文件,所以,使用tar比较安全。
.discinfo是记录光盘发行信息的文件,若丢失,在安装的时候会提示找不到安装介质。

3、删除多于的文件
TRANS.TBL文件会在后面使用mkisofs的时候自动生成,这里可以删掉:
cd /data/disk/install/
find ./ -name 'TRANS.TBL' -exec rm {} \;

三、修改光盘内容
1、修改光盘内容
正如前面说到的,接下来您可以根据自己的情况,添加或删除Asianux/RPMS中的rpm包。
而这里的依赖关系必须自行解决的。您可以先在正规系统中尝试后再更新或放入该目录中。
2、修改comps.xml文件
根据前面的架构分析,如果您添加了新rpm文件,则需要修改comps.xml的信息。其中需要增加或删除您的rpm文件,或增加新的组和成员包等。
引用
Asianux/bas/comps.xml

该文件使用XML架构,很容易明白,简单的方式用手工修改即可。若修改比较复杂的,可通过编程解决。
因我只是把两CD合并,没有增加或删除rpm,所以,不需要修改该文件。
3、修改.discinfo
当前该文件的内容是CD2的,把第四行的“2”改为“1”,表示只从第一张光盘获取内容。
引用
# cat .discinfo
1168466978.826122
Asianux 2.0 SP2
i386
1 <-修改这里
Asianux/base
Asianux/RPMS
Asianux/pixmaps

四、生成新光盘
一切准备妥当后,就可以生成新光盘了。
1、运行环境
设置好命令和库的路径:
export PYTHONPATH=/usr/lib/anaconda:/usr/lib/anaconda-runtime:$PYTHONPATH
export PATH="$PATH:/usr/lib/anaconda-runtime"

2、更新光盘的文件树信息
genhdlist --productpath "Asianux" /data/disk/install/

会生成Asianux/base目录下的新hdlist和hdlist2文件
3、生成pkgfile文件
pkgorder --product Asianux /data/disk/install/ Asianux > /data/disk/pkgorder.txt

该文件会分析rpm的运行脚本,并生成rpm list表。
4、划分光盘
这一步通常是发行CD版本的时候必须做的。因为1张CD不够空间存放整一套系统,所以要分开多张CD。当然,在这个例子中,是不需要的:
splittree.py --arch=i386 --total-discs=1 --bin-discs=1 \
--src-discs=0 --release-string="Asianux" --productpath=Asianux \
--pkgorderfile=/data/disk/pkgorder.txt --distdir=/data/disk/install \
--srcdir=/data/disk/install/pool/SRPMS

5、使用pkgfile再更新一次文件树信息
genhdlist --withnumbers --fileorder /data/disk/pkgorder.txt \
--productpath "Asianux" /data/disk/install/

这样做的目的,是为了让hdlist和hdlist2中反应rpm对应的光盘号。在这里不是必须的,但建议运行。而如果您运行了splittree.py脚本,则是必须的。
6、生成光盘
mkisofs -b isolinux/isolinux.bin -no-emul-boot -boot-load-size 4 \
-boot-info-table -c isolinux/boot.cat -l -J \
-o /data/disk/Asianux_2.0.iso -R -T -V "Asianux 2.0" /data/disk/install/

至此,新光盘完成。
阅读(1316) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~