【问题标题】:"Requires" entry in .spec file does not work.spec 文件中的“需要”条目不起作用
【发布时间】:2014-04-25 14:04:44
【问题描述】:

我正在为 rpm 包编写 .spec 文件,但遇到了问题。 我需要使用另一个包的特定版本安装该包。 让我们以python包为例。所以,我写了:

Requires        : bash, grep, python >= 2.6.7-4b

但是,即使python包是2.6.6版本,也会安装包。 如果我删除 python 包,系统会显示我的包需要 python 2.6.7。

有什么问题吗?

来自rpm -q --provides python的输出:

Distutils
python(abi) = 2.6
python-abi = 2.6
python-ctypes = 1.0.1
python-hashlib = 20081120
python-sqlite = 2.3.2
python-uuid = 1.31
python-x86_64 = 2.6.6-52.el6
python2 = 2.6.6
python = 2.6.6-52.el6
python(x86-64) = 2.6.6-52.el6

rpm -qpR $yourpackage.rpm 的输出:

/bin/sh
python >= 2.6.7-4b
bash
grep
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PartialHardlinkSets) <= 4.0.4-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rpmlib(PayloadIsXz) <= 5.2-1

【问题讨论】:

  • 您能否将rpm -q --provides python 的输出发布到安装了 2.6.6 并满足您的软件包要求的系统上?也请发布rpm -qR $yourpackagerpm -qpR $yourpackage.rpm 输出。
  • @EtanReisner 第一个命令的输出是: Distutils python(abi) = 2.6 python-abi = 2.6 python-ctypes = 1.0.1 python-hashlib = 20081120 python-sqlite = 2.3.2 python -uuid = 1.31 python-x86_64 = 2.6.6-52.el6 python2 = 2.6.6 python = 2.6.6-52.el6 python(x86-64) = 2.6.6-52.el6和最后一个命令的输出是:/bin/sh python >= 2.6.7-4b bash grep rpmlib(CompressedFileNames)
  • 我在我的 CentOS 5 机器上做了一个快速测试,其中安装的 python 版本是 2.4.3-56(带有一个需要 python &gt;= 2.4.4-15 的虚拟包)并且 rpm 无法正确安装包。你确定系统有你期望的python包吗? 'rpm -q --whatprovides python' 在系统上说什么?
  • @EtanReisner 当我输入python(x86-64) &gt;= 2.6.7-4b 时,它可以工作。 =) 但是我如何定义一种通用的方法来识别我正在使用的架构。例如,如果我的机器是 i386,则需要 python(x86-32),如果我使用的是 x86_64,则需要 python(x86-64)。
  • 在 32 位系统上真的有 python(x86-32) 提供吗?那会让我感到惊讶。您可以将%_arch 用于规范文件中的当前架构并进行检测/等。基于此,如果您需要,但我不知道为什么将 python &gt;= ... 更改为 python(x86-64) &gt;= ... 应该在这里有所作为。

标签: packaging rpm


【解决方案1】:

''Requires:'' 标签会被忽略,除非您也添加 ''Autoreq: no''。

较新版本的 rpmbuild 会自动计算需求并忽略“Requires:”,除非该功能已关闭。

我已经多次遇到这个问题,值得注意的是,您应该首先运行 rpmbuild without ''Autoreq: no'',注意自动检测到的依赖项,并将它们添加到 ' 'Required:'' 标记在最后运行之前使用 ''Autoreq: no''。

另外值得注意的是,依赖关系的自动检测有点bug,并且与cmets有一些问题。 不久前,我打包了一个带有注释的 perl 脚本,其中包含“……然后使用模块……”。 Autoreq 检测到它是 perl 模块“perl a”并将其添加到依赖项中,使我的 rpm 无用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-28
    • 2014-10-04
    • 1970-01-01
    • 2014-07-31
    • 1970-01-01
    • 2019-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多