给RPM打包的软件加补丁

开发者在线 Builder.com.cn 更新时间:2008-01-26作者:51CTO.COM 来源:

本文关键词: RPM 打包 软件 补丁

  构建 RPM 软件包通常要求您以 root 用户登录。 其原因如下:

  RPM 在打包过程中安装软件,并且通常只有 root 用户可以写到安装目录中。

  RPM 需要读写 /usr/src/redhat(一般用户不能修改它)下的目录。

  通过用 RPM 构建根(build root)来解决第一个问题。

  要解决第二个问题,可以通过更改 %_topdir设置来告诉 RPM 查找和创建不同目录集中的文件。按照下面的方法在您的主目录下创建一个名为 .rpmmacros的文件:

  %_topdir /home/your_userid/rpm

  这个文件会告诉 RPM:它先前在 /usr/src/redhat 下查找的所有目录应该改为在 /home/your_userid/rpm 下查找。 现在,您应该创建这样一个完整的目录树:~/rpm ~/rpm/SOURCES ~/rpm/SPECS ~/rpm/BUILD ~/rpm/RPMS ~/rpm/RPMS/i386 ~/rpm/SRPMS

  ~/rpm

  ~/rpm/SOURCES

  ~/rpm/SPECS

  ~/rpm/BUILD

  ~/rpm/RPMS

  ~/rpm/RPMS/i386

  ~/rpm/SRPMS

  (如果愿意,可以通过在 RPM 中重新定义其它宏,来将其中任何目录放在您想放的任何地方。您可能需要考虑更改的一些宏包括 %_sourcedir、 %_specdir、 %_srcrpmdir、 %_builddir和 %_rpmdir。 有关这些宏的缺省值,请查看 /usr/lib/rpm/macros。 对于这个示例,我们仅仅将它们都放在 ~/rpm 下。)

  现在,将 indent-2.2.6.tar.gz文件复制到 ~/rpm/SOURCES,这里 没有以 root 用户登录,运行 rpm -ba indent-2.spec。RPM 将 把 indent构建在 ~/rpm/BUILD 目录下,并将二进制的 RPM 包放在 ~/rpm/RPMS/i386 中,将源代码包放在 ~/rpm/SRPMS 中。

  与之相对照,在没有构建根的情况下,尝试使用 spec 文件 indent-1.spec。RPM 在尝试将 indent安装到 /usr/local/bin 中时会失败。

  告诫

  使用构建根和设置 RPM 的 i%_topdir使您能在不作为 root 运行的情况下构建许多软件包,但这并不总是很容易。

  首先,一些包并不象 indent那样可以容易地安装到构建根目录中。对于那些任何未用 GNU autoconf 来开发的包,您必须要仔细查看一下,看是否有一种方法,可以将包安装到另一个目录中, 这也许可以修改 Makefile 来强制这样做。 在下一部分中,我将向您演示如何使用 RPM 来构建已修改的程序。

  其次,只有相当少部分包将在其正常安装期间试图做一些只有 root 用户才可以做的事情,如:

  创建特殊文件(管道、设备文件等等)

  修改系统配置文件`

  您必须逐个处理这些问题。通常,您可以在 post-install 脚本(在安装 RPM 之后运行的脚本)中做一些必要工作。 我将在以后的文章中讨论它们,但简而言之,可以将“%post”节添加到 spec 文件中, 并在该节中放置一些 Linux 命令,以便在安装 RPM 之后运行这些命令。

推荐阅读与 RPM 打包 软件 补丁 相关开发者在线内容

用户评论

  • 用户名
  • 评论内容