分类: LINUX
2009-12-23 00:25:11
介绍
在开始介绍之前,首先表达一个观点,一般不推荐使用root构建构建RPM包,尤其对RPM包构建不是很熟悉的用户,因为一些配置或者误操作可能会影响甚至破坏系统,造成一些不必要的损失。另外一点是使用普通用户基本可以满足构建大多数RPM包的要求。
RPM包是一种优秀的软件包安装管理系统,而RPM源码包则是RPM包系统中重要的组成部分,是其他各种RPM包母体,其他种类的RPM包都是由RPM源 码包生成的。这样当软件有升级更新时,首先需要更新的是RPM源码包,下来通过RPM源码包生成新的RPM安装包等其他包。
准备知识
制作RPM升级包需要一个完整的RPM包构建环境,如何构建RPM构建环境可以参考另一份文档(RPM包如何制作)。我个人认为RPM升级包制作分为两种情况:
1 只是对RPM包小部分的内容进行更新,比如是代码中的一个bug或者小变动。这种情况通过生成一个补丁文件附加到已存在的RPM源码包的方式就可以实现升 级操作。该升级方式操作简单,生成一个源码补丁另外在SPEC文档中添加两行针对新补丁文件的操作即完成源码更新包的操作。
2 软件有重大功能变化,即有大量的源码文件发生变化或者大的内容变化,这种情况一般处理的方式是使软件包进行一个大的版本号的升级,并把上一版源码包中所有 补丁文件和最新更新的所有内容结合到一起,重新制作出新版本的源码包。这种升级方式相对来说操作复杂一些,需要重新打包源码压缩包,需要修改SPEC文档 较多内容。
作为普通软件包的使用者最多遇到的是第一种情形,一般只会针对某个功能添加一点自己的补丁以改善软件包的特性。而第二种情况更多的软件包的开发者、维护者可能会做的大手术。
RPM源码包的组成可以分为:软件源码所有文件的归档文件(即压缩文件)、一些补丁文件(可能不存在)和SPEC文档。如果是需要对SPEC文档更新,则需要直接修改该文档(补丁文件对此是没有效果的)。
下面主要以上面提到的第一种情况介绍升级包的制作过程。
制作升级包
假设如下:
当前用户的RPM构建根目录是 ~/rpmbuild.
软件包名和版本号为 hellorpm-0.1
1 安装hellorpm源码包,安装程序将会把hellorpm源码包中的SPEC文档解压到~/rpmbuild/SPECS,把源码归档包和补丁文件安装到~/rpmbuild/SOURCES。
2 获得一个干净的hellorpm源码树,该步操作将在SPEC文档的内容的控制下,从SOURCES目录下解压源码归档文件到BUILD目录,并打上所有SPEC文档中列出的补丁文件和其他一些操作。该步操作命令如下:
$rpmbuild -bp SPECS/hellorpm.spec
3 现在一个完整的源码工作目录以及生成,现在可以进入源码目录,修改需要的内容,并可以在此目录下使用configure和make命令进行测试,如果确认 完成源码的修改,则可以开始生成补丁文件。在开始生成补丁文件之前,为了确保补丁文件的正确,这里我推荐按如下操作生成补丁文件:
首先进入BUILD目录:
cd ~/rpmbuild/BUILD/
重命名当前hellorpm源码工作目录:
mv hellorpm-0.1 hellorpm-0.1.work
按上面第2步从新生成一个干净的源码目录:
rpmbuild -bp ../SPECS/hellorpm.spec
重命名上步生成的源码目录:
mv hellorpm-0.1 hellorpm-0.1.new
把在前面源码树中所做的源码的确定修改再次更新的hellorpm-0.1.new中,完成修改操作后,再次重复第二步操作生成一个干净的源码目录,并使用diff命令生成补丁文件,生成的补丁文件将存放于SOURCES目录,操作如下:
rpmbuild -bp ../SPECS/hellorpm.spec
diff -uNr hellorpm-0.1 hellorpm-0.1.new >../SOURCES/hellorpm-0.1-test.patch
注意,使用 diff 时运用了选项 -uNr 。 -u 以 统一格式创建补丁文件,这种格式比缺省格式更紧凑些。 -N 确保补丁文件将正确地处理已经创建或删除文件的情况。 -r 比较命令行上所给出的两个目录的所有子目录中的所有文件。
另外还要注意:只要您完全按上述来做,这些目录名是无关紧要的。 补丁文件中将有这些目录名,但我们将通知补丁程序忽略它们。
检查一下补丁文件 hellorpm-0.1.patch可以确认补丁文件内容是否正常。
到此补丁文件制作成功,接着需要修改SPEC文档加入新生成的补丁文件的内容。下面是一个已该好的hellorpm SPEC文档的模板,大家可以参考。
hellorpmp.spec文件内容
-------------------------------------------------------------
1 Summary: hellorpm is a test program。
2 Name: hellorpm
3 Version: 0.1
4 Release: 1 #注意更新该代码
5 Source0: %{name}-%{version}.tar.bz2
6 License: GPL
7 Group: Development/Tools
8 BuildRoot:%{_tmppath}/%{name}-%{version}-%{release}-root
9
10 Patch0:hellorpm-0.1-test.spec #新加入行
11
12 %description
13 The hellorpm program is a test.
14 %prep
15 %setup -q
16 %patch0 -p1 #新加入行
17 %build
18 #./configure
19 make
20 %install
21 make DESTDIR=$RPM_BUILD_ROOT install
22 %files
23 %defattr(-,root,root)
24 /usr/local/bin/hellorpm
25 %doc %attr(0444,root,root) /usr/local/man/man1/hellorpm.1
26 %doc README
-------------------------------------------------------------
对于这个简单例子中,SPEC文档对于新补丁文件的改变主要是两行,也就是上面加注的两行,补丁文件序号顺序递增,且上下两处之间的数字是对应的。另一个修改是软件版本号的修改,一般修改Release后面的数值以便和老的版本区别。
现可以使用下面命令生成新的RPM源码包和二进制安装包等其他包, 新生成的源码包在~/rpmbuild/SRPMS/目录,二进制安装包和调试信息包在~/rpmbuild/RPMS。
rpmbuild -ba SPECS/hellorpm.spec