构建 rpm 软件包通常要求您以 root 用户登录. 其原因如下: rpm 在打包过程中安装软件,并且通常只有 root 用户可以写到安装目录中. rpm 需要读写 /usr/src/redhat(一般用户不能修改它)下的目录.
要解决第二个问题,可以通过更改 %_topdir 设置来告诉 rpm 查找与创建不同目录集中的文件.按照下面的方法在您的主目录下创建一个名为 .rpmmacros的文件: 【程序编程相关:总谐波失真】
通过用 rpm 构建根(build root)来解决第一个问题. 【推荐阅读:供电方式】
这个文件会告诉 rpm:它先前在 /usr/src/redhat 下查找的所有目录应该改为在 /home/your_userid/rpm 下查找. 现在,您应该创建这样一个完整的目录树:~/rpm ~/rpm/sources ~/rpm/specs ~/rpm/build ~/rpm/rpms ~/rpm/rpms/i386 ~/rpm/srpms 【扩展信息:备份失败?请检查移动存储服务】
%_topdir /home/your_userid/rpm
~/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 来构建已修改的程序.
... 下一页