36

我正在修改一个自动构建,并想在调用它时告诉rpmbuild使用特定的构建区域

这类似于现有问题,但更具体。

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

  • 我不想要求用户更改他们的点文件(例如$HOME/.rpmrc);构建应该是独立的,并且不会影响用户的现有设置。

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

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

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

我已经看到了对_topdir宏的引用,这似乎就是我正在谈论的内容,但它似乎不是每次调用都可以配置的。

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

4

2 回答 2

74

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

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

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

于 2010-11-25T18:56:22.600 回答
4

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

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

"HOME=mytopdir rpmbuild ...".
于 2010-06-04T04:18:11.290 回答