扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
构建 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领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者