我可以创建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必须足够了 建立。
答案 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
标记中。