如何为每次调用设置rpmbuild的构建区域

时间:2010-06-04 03:49:03

标签: build-process packaging rpm rpmbuild

我正在修改自动构建,并希望告诉rpmbuild 在调用时使用特定的构建区域

这类似于existing question,但更具体。

  • 我不想以root用户身份运行任何构建命令;目标只是拥有一个RPM,而不是在系统中安装任何东西。

  • 我不想require the user to change their dotfiles(例如$HOME/.rpmrc);构建应该是自包含的,不会影响用户的现有设置。

  • 我不想将位置硬编码到foo.spec文件中;如果用户想要在不同的位置构建,该文件应该可以使用。

  • --buildroot option不是我需要的;为构建过程的make部分设置伪根文件系统,但我需要为整个 RPM构建过程指定“构建区域”。

我正在寻找的是一个假设的--build-area FOODIR选项,可以赋予rpmbuild命令或等效的环境变量。因此,它应该只影响该命令的单个调用,并使其为其构建区域使用指定的用户可写位置。

我已经看到对_topdir宏的引用似乎就是我所说的,但它似乎不是每次调用都可配置的。

如果rpmbuild可以在需要时在该位置设置自己的环境,那将是理想的,但我不介意为每个构建设置目录,因为这可以作为一部分自动化构建。目标是让用户可写位置仅在构建运行期间存在,然后在生成RPM文件后删除整个位置进行清理。

2 个答案:

答案 0 :(得分:71)

没有记录,但 _topdir决定了构建区域。

因此,您可以使用rpmbuild --define "_topdir ${PWD}/foobar" ...设置此每次调用,以将目录设置为您想要的任何内容。

--define是为任何宏设置值的关键,而不仅仅是_topdir。

答案 1 :(得分:4)

--buildroot选项不是您想要的。这个名称有点误导,因为它没有更改buildroot,而是为构建的安装阶段设置root。 RPM基本上是作为构建的一部分进行“make install”,然后打包结果。 buildroot选项允许您执行此安装,例如/ tmp / myinstallroot。

我最近不得不将rpm包构建集成到自动构建中,并遇到了同样的问题。我做的是生成一个自定义.rpmmacros文件,并正确设置%topdir。然后我暂时将HOME更改为该自定义.rpmmacros文件的位置。

"HOME=mytopdir rpmbuild ...".