【问题标题】:Why won't rpm/yum pick up the required packages when I list it specifically?为什么我专门列出来rpm/yum 不选择需要的包?
【发布时间】:2016-09-04 12:46:06
【问题描述】:

我遇到了一个问题,使用 rpm 和 yum 无法获取更新所需的软件包。我正在将 main-package 从 16.1 升级到 16.2。如果我执行 yum upgrade,我会得到:

# yum upgrade
...
======================================================================================================
 Package                       Arch           Version                      Repository            Size
======================================================================================================
Updating:
 sub-package                   x86_64         1.1-455015.el7               privaterepo           29 k
 main-package                  noarch         16.2-460032.el7              privaterepo          1.9 M
...

如果我运行 yum upgrade main-package 我会得到:

# yum upgrade main-package
======================================================================================================
 Package                        Arch            Version                   Repository             Size
======================================================================================================
Updating:
 main-package                   noarch          16.2-460032.el7           privaterepo           1.9 M

Transaction Summary
======================================================================================================

它似乎认为我不需要新的子包,尽管 RPM 建议这样做:

# rpm -q --requires -p main-package-16.2-460032.el7.noarch.rpm  | grep -i sub-package
sub-package >= 1.1

# rpm -qa | grep sub-package
sub-package-1.0-455013.el7.x86_64

根据我所看到的,当我 yum upgrade main-package 时,它应该看到它需要 sub-package >= 1.1 并得到它。我应该补充一点,安装工作正常。就好像 rpm 和 yum 完全忽略了 main-package 需要 sub-package 版本 1.1 的要求.

编辑:

下面是 rpm 显示的依赖关系:

# rpm -q --provides -p sub-package-1.1-455015.el7.x86_64.rpm 
sub-package
sub-package = 1.1-455015.el7
sub-package(x86-64) = 1.1-455015.el7

# rpm -q --requires -p main-package-16.2-460032.el7.noarch.rpm  | grep sub-package
sub-package >= 1.1

这是已安装的较旧的子包:

# rpm -q --provides sub-package
sub-package
sub-package = 1.0-455013.el7
sub-package(x86-64) = 1.0-455013.el7

这是我的规范文件中的相关信息:

$ grep sub-package main-package.spec
Requires: sub-package >= 1.1

$ head -n4 sub-package.spec
Summary: sub-package (...)
Name: sub-package
Version: 1.1
Release: %{BUILD_NUMBER}%{?dist}

编辑 2:

我一直在做更多的挖掘工作,我注意到的一件事是 sub-package 如果我 rpm -q --whatprovides sub-package 在哪里列出了两次它拾取的其他依赖项只列出一次。

【问题讨论】:

  • 看起来sub-package 1.1-455015.el7可用,但目前安装的是什么?如果是1.1-somethingelse,则满足要求。
  • # rpm -qa | grep 子包 sub-package-1.0-455013.el7.x86_64
  • 那一直都在吗?不知道我是怎么错过的……抱歉,当时不知道。
  • 您是否尝试使用 rpm 进行更新(看看这是否是 yum 问题):将您的 main-package-16.2...rpm 复制到您的目标机器;然后执行:rpm -Uvh main-package-16.2...rpm。如果在没有 rpm 抱怨 sub-package-1.1 丢失的情况下可以正常工作;这意味着问题出在您的规范文件中。
  • rpm 不能单独工作。任何想法在规范文件中可能有什么问题? main-package 有Requires: sub-package >= 1.1 行,sub-package 有Version: 1.1 行。我在主帖中包含了更多信息。

标签: redhat rpm yum


【解决方案1】:

感谢@alvits,我得到了答案

Provides: sub-package

在 子包 规范文件中。提示来自这一行:

# rpm -q --provides -p sub-package-1.1-455015.el7.x86_64.rpm 
sub-package
sub-package = 1.1-455015.el7
sub-package(x86-64) = 1.1-455015.el7

第一行输出告诉rpm我的子包版本满足所有版本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-13
    相关资源
    最近更新 更多