2

我有一个libfoo-devel可以创建的 rpm,使用技巧来覆盖_topdir. 现在我想构建一个包“ bar”,它有一个 BuildRequires ' libfoo-devel“。我似乎找不到正确的方法来访问它的内容,libfoo-devel而不必在构建主机上安装它。我应该怎么做?

编辑:

我的构建和目标发行版都是 SuSE。

我更喜欢不需要的解决方案mock,因为我相信 SuSE 不会将其包含在其股票回购中。

后续编辑:

我相信我寻求的答案就在build包装中。也许这是 SuSE 的回答mock?还是oBS服务的分布式版本?

描述

build 是一个以安全和干净的方式构建 SuSE Linux RPM 的工具。build 会将最小的 SuSE Linux 作为构建系统安装到某个目录中,并将 chroot 到该系统以编译软件包。这样你就不会冒险破坏你的工作系统(例如由于规范文件损坏),即使包不使用 BuildRoot。

build 在规范文件中搜索 BuildRequires: 行;如果找到这样的行,则安装所有指定的 rpm。否则,将使用默认包的选择。请注意,构建不会自动解决缺少的依赖项,因此指定的 rpm 必须足以用于构建。

4

2 回答 2

4

请注意,如果您真的不需要libfoo-devel安装来构建包bar,最明智的选择是libfoo-devel从 BuildRequires 指令中删除(并且可能将需求放在它所属的位置)。

但是,如果由于某种原因您不能这样做,请创建一个“开发”rpm 数据库。基本上它涉及使用rpm --initdb --root /path/to/fake/root. 然后用标准发行版安装的所有“目标包”填充它。

这是很多rpm --install --root /path/to/fake/root --justdb package-name.rpm命令,但也许您可以找到一种方法来复制/var/lib/rpm/*数据库文件并将其用作起点。一旦你有了替代的 rpm 数据库,你可以使用 --justdb 选项伪造 libfoo-devel 包的安装。然后你就可以在实际的 rpm 版本上自由自在了。

于 2011-06-17T04:08:05.737 回答
1

如果 mock 和openSUSE Build Service都不是一个可行的选择,那么您将不得不直接或在 chroot 中安装包;该软件包提供了 SRPM 打包程序决定构建所需的文件,因此位于BuildRequires标签中。

于 2011-06-17T03:57:37.420 回答