科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网安全频道给RPM打包的软件加补丁

给RPM打包的软件加补丁

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

RPM 是一种广泛用于发布 Linux 软件的工具; 用户可以轻松地安装用 RPM 打包的产品。在本文中,Dan 说明了在不具备 root 权限的情况下如何对软件进行打包以及如何分发您的工作结果。

作者:51CTO.COM 2008年4月14日

关键字: 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 之后运行这些命令。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章