2011-06-17 36 views
2

我有一个libfoo-devel转,我可以创建,使用技巧来覆盖_topdir。现在我想要构建一个包含“BuildRequires'libfoo-devel的包”bar“。我似乎无法找到正确的方式来访问libfoo-devel的内容,而无需将其安装在构建主机上。这样做构建rpm,覆盖_topdir,但获取BuildRequires代码?

编辑:。

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

我宁愿不要求mock,因为我相信的SuSE不包括在其股票回购方案

后续编辑:

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

说明

建设是建立在SuSE Linux RPM包在一个安全,清洁的方式的工具。建立 将安装最小SuSE Linux作为 构建系统进入某个目录,而 将chroot到这个系统编译 这个包。这样你就不会冒 来破坏你的工作系统(例如 是一个破损的spec文件),如果软件包没有使用BuildRoot的话,即使是 。

构建在spec文件中搜索 BuildRequires:line;如果找到这样一行 ,则所有指定的rpms都安装了 。否则使用 默认包。请注意, 版本不会自动解决缺少依赖关系的 ,因此指定的 rpm必须足够用于 版本。

+0

哪个发行版? – 2011-06-17 03:29:16

回答

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版本中免费回家。

+0

标题和从libfoo所以需要构建的栏。所以你说我需要'libc','sh','cp'和我的所有朋友都安装好才能开始使用?这听起来令人难以置信的沉重,它必须表明我“做错了”。所以忘记我的先决条件,我该怎么做?如果我需要成为超级用户,这不是特别方便。但也许这是最自然/合适的方式来做到这一点。这里的'rpm'成语是什么? – 2011-06-17 04:20:03

+0

是的,我想我应该先把最重要的一点。 – 2011-06-17 04:21:49

+0

我只是提供一个解决方案,而不是一个简单的解决方案。简单的一点很明显,安装devel软件包。毕竟,你的酒吧rpm包需要它来构建,不是吗? – 2011-06-17 04:26:50

1

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

+0

对,我应该说我创作了'libfoo'和'bar'。我不认为我可以使用oBS,但我会考虑模拟。我必须说,在'buildroot'和'_topdir'之间,想象chroot会适合什么地方是相当混乱的。我希望我可以说服'rpmbuild'安装一个软件包列表,或者我可以说'rpm'安装到我的buildroot。 – 2011-06-17 04:08:27

+0

安装到buildroot将无济于事;这就是分解的SRPM所在的位置,但它们仍然需要正常安装BR RPM。 – 2011-06-17 04:11:31

+0

我现在可以呻吟吗?我觉得我应该把我所有的libfoo,bar和baz业务都变成一个兆转每分钟,否则我必须跳过一些重要的环节才能让它成为非超级用户。 – 2011-06-17 04:18:59