使用SRPM

使用Linux 之类的开源软件,最大的优点之一,就是可以根据源代码修改你所使用的软件,使之更符合你的要求。在RedHat和Fedora 版本的Linux中,我们可以找到所有的源代码软件包,它们都以srpm的格式存在。这里。我们以Fedora-Core2 版本的Linux和grub软件为例,介绍一下srpm的用法。

故事的起因是近来迷上了FreeBSD操作系统,FreeBSD系统的启动管理程序不如Linux 下的Grub好用,于是我就使用Grub来管理启动。

Fedora-Core2 自带的grub软件不能识别FreeBSD的ufs分区,只能支持以chainloader 的方式启动FreeBSD ,也就是说在/boot/gurb.conf 中这样配置:

splashimage=(hd0,5)/boot/grub/splash.xpm.gz
title FreeBSD 5.2.1
rootnoverify (hd0,1)
chainloader +1
这样能够启动FreeBSD系统,但因为是链式装载,启动速度不如直接载入内核的方式快速。于是我在www.gun.org上下载了最新的grub-0.95的源代码进行编译,在编译的过程中只要加上 --enable-ufs2 参数,就可以把grub.conf 写成如下形式并直接进入BSD系统,
title FreeBSD 5.2.1
root (hd0,1)
kernel /boot/loader
新的问题又出现了,我自行编译的grub不能在启动的时候显显示背景图片,这个grub 根本不能识别grub.conf 中的splashimage的参数。找遍了grub的文档,也没发现有显示图片的编译参数,凭经验,知道一定是Fedora-Core2的开发者给grub加了补丁。
根据gnu的版权规定,修改以后的gnu软件仍然要开放源代码,所以我只要把那些补丁下载回来,并且在编译的时候加上相应的参数就可以了。 在 www.rpmfind.net 的网站上,我找到了grub-0.95-3.src.rpm的软件包,下载并安装。
rpm -ivh grub-0.95-3.src.rpm

srpm包会被安装在/usr/src/redhat目录下,这里还有五个子目录,分别为 SPEC、SOURCES、BUILD、RPMS、SPRMS。

SPEC :grub.spec 文件被放置到此处,此文件决定了rpm的编翻译参数。

SOURCES :当然是源代码了,grub的源代码和补丁文件都在这里。除了最主要的文件grub-0.95-3.tar.gz 以外,果真有一大堆补丁存在。这些补丁的用法,已经都在前文中提及的grub.spec定义好了。

BUILD :源代码在SOURCES 目录中以tar.gz的格式出现,在需要的时候会被解压到此,并根据grub.spec的要求打上相应的补丁。

SRPMS :如果要重新生成srpm文件的话,就会放置在此处。

RPMS :根据srpm编译出来的rpm 文件就回放置在此。下边还有althon、i386、i486、i686和noarch 5个子目录,分别代表不同架构的cpu,缺省的情况下,会在i386下生成rpm 文件。

进入SPEC目录,在grub.spec文件中把
%configure --sbindir=/sbin --disable-auto-linux-mem-opt 改为,
%configure --sbindir=/sbin --disable-auto-linux-mem-opt --enable-ufs2
这个—enable-ufs2 的参数就是支持FreeBSD的ufs 分区用的。

在RPM/i386下生成生成 grub-0.95-3.i386.rpm 的命令为:
rpmbuild -bb grub.spec

在SRPM下生成grub-0.95-3.src.rpm 的命令是:
rpmbuild -bs grub.spec

这个srpm 已经包含刚刚做出的改动,即 –enable-ufs2 参数了,如果别人再次安装并编译的话,已经可以直接支持FreeBSD操作系统了。
最后执行grub-install /dev/hda ,任务完成。Grub已经可以支持直接载入freebsd内核启动了。

randomness