[原]自定义Linux发行版光盘

   需要自定义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/

至此,新光盘完成。

[原]自定义Linux发行版光盘内文分页: [1] [2]
个性化Linux发行版光盘之补充——XZ(LZMA算法)
使用Mock 实现跨平台跨发行版编译RPM
Anaconda 的启动参数
[转]rpm命令选项中文说明
创建VPS OS模板

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/113019.html

(0)
上一篇 2021年8月27日
下一篇 2021年8月27日

相关推荐

发表回复

登录后才能评论