构建rpm,覆盖_topdir,但获取BuildRequires deps?

时间:2011-06-17 03:19:02

标签: linux rpm rpmbuild

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

编辑:

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

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

后续编辑:

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

  

说明

     

build是构建SuSE Linux的工具   RPM安全,干净。建立   将安装一个最小的SuSE Linux作为   将系统构建到某个目录和   将chroot到这个系统进行编译   包裹。这样你就没有风险了   破坏你的工作系统(由于   一个破碎的spec文件,例如),甚至   如果包不使用BuildRoot。

     

build在spec文件中搜索a   BuildRequires:line;如果是这样的话   发现,所有指定的rpms都是   安装。否则选择   使用默认包。注意   构建不会自动解决   缺少依赖关系,所以指定   rpms必须足够了   建立。

2 个答案:

答案 0 :(得分:4)

请注意,如果您确实不需要安装libfoo-devel来构建包bar,那么最明智的替代方法是从BuildRequires指令中删除libfoo-devel(并且可能将要求放在何处)它属于。。

但是,如果由于某种原因无法执行此操作,请创建“开发”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构建中免费回家。

答案 1 :(得分:1)

如果模拟和openSUSE Build Service都不是可行的选择那么你必须直接或在chroot中扣下并安装包;该软件包提供SRPM打包程序已确定需要构建的文件,因此位于BuildRequires标记中。