Yum

RHEL 7:如何解決 yum multilib 問題

  • June 13, 2019

我正在嘗試在 RHEL 7.5 伺服器上安裝 texlive-xetex。這台伺服器是提前為我“設置”的。

但是,當我嘗試安裝時,它抱怨 texlive-kpathsea-lib 受到保護。

[root@hostname ~]#  yum install -y texlive-xetex
Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-manager, tmprepo
Resolving Dependencies
--> Running transaction check
---> Package texlive-xetex.noarch 2:svn26330.0.9997.5-38.el7 will be installed
--> Processing Dependency: tex-xetexconfig for package: 2:texlive-xetex-svn26330.0.9997.5-38.el7.noarch
--> Processing Dependency: texlive-xetex-bin for package: 2:texlive-xetex-svn26330.0.9997.5-38.el7.noarch
--> Running transaction check
---> Package texlive-xetex-bin.x86_64 2:svn26912.0-38.20130427_r30134.el7 will be installed
--> Processing Dependency: texlive-kpathsea-lib = 2:2012-38.20130427_r30134.el7 for package: 2:texlive-xetex-bin-svn26912.0-38.20130427_r30134.el7.x86_64
--> Processing Dependency: teckit for package: 2:texlive-xetex-bin-svn26912.0-38.20130427_r30134.el7.x86_64
--> Processing Dependency: libTECkit.so.0()(64bit) for package: 2:texlive-xetex-bin-svn26912.0-38.20130427_r30134.el7.x86_64
--> Processing Dependency: libicudata.so.50()(64bit) for package: 2:texlive-xetex-bin-svn26912.0-38.20130427_r30134.el7.x86_64
--> Processing Dependency: libicui18n.so.50()(64bit) for package: 2:texlive-xetex-bin-svn26912.0-38.20130427_r30134.el7.x86_64
--> Processing Dependency: libicuuc.so.50()(64bit) for package: 2:texlive-xetex-bin-svn26912.0-38.20130427_r30134.el7.x86_64
---> Package texlive-xetexconfig.noarch 2:svn28819.0-38.el7 will be installed
--> Running transaction check
---> Package libicu.x86_64 0:50.1.2-17.el7 will be installed
---> Package teckit.x86_64 0:2.5.1-11.el7 will be installed
---> Package texlive-kpathsea-lib.i686 2:2012-38.20130427_r30134.el7 will be installed
--> Finished Dependency Resolution
Error:  Multilib version problems found. This often means that the root
      cause is something else and multilib version checking is just
      pointing out that there is a problem. Eg.:

        1. You have an upgrade for texlive-kpathsea-lib which is missing some
           dependency that another package requires. Yum is trying to
           solve this by installing an older version of texlive-kpathsea-lib of the
           different architecture. If you exclude the bad architecture
           yum will tell you what the root cause is (which package
           requires what). You can try redoing the upgrade with
           --exclude texlive-kpathsea-lib.otherarch ... this should give you an error
           message showing the root cause of the problem.

        2. You have multiple architectures of texlive-kpathsea-lib installed, but
           yum can only see an upgrade for one of those architectures.
           If you don't want/need both architectures anymore then you
           can remove the one with the missing update and everything
           will work.

        3. You have duplicate versions of texlive-kpathsea-lib installed already.
           You can use "yum check" to get yum show these errors.

      ...you can also use --setopt=protected_multilib=false to remove
      this checking, however this is almost never the correct thing to
      do as something else is very likely to go wrong (often causing
      much more problems).

      Protected multilib versions: 2:texlive-kpathsea-lib-2012-38.20130427_r30134.el7.i686 != 2:texlive-kpathsea-lib-2012-43.20130427_r30134.el7.x86_64

但是,我只安裝了 kpathsea-lib X86_64。

[root@hostname ~]# rpm -qa | grep -i kpathsea
texlive-kpathsea-svn28792.0-43.el7.noarch
texlive-kpathsea-bin-svn27347.0-43.20130427_r30134.el7.x86_64
texlive-kpathsea-lib-2012-43.20130427_r30134.el7.x86_64

在我看來,它想要安裝 kpathsea-lib.i686。所以,我檢查了幾件事:

[root@hostname ~]# yum check
Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-manager, tmprepo
check all

[root@hostname ~]# yum check --showduplicates
Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-manager, tmprepo
check all

[root@hostname ~]# rpm -qa --dupes
gpg-pubkey.(none)
kernel-devel.x86_64
kernel.x86_64

[root@hostname ~]# package-cleanup --cleandupes
Loaded plugins: langpacks, product-id, subscription-manager
No duplicates to remove

回購清單是:

Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-manager, tmprepo
repo id                                        repo name                                                          status
epel/x86_64                                    Extra Packages for Enterprise Linux 7 - x86_64                     13,225
pgdg10/7Server/x86_64                          PostgreSQL 10 7Server - x86_64                                        719
pgdg11/7Server/x86_64                          PostgreSQL 11 7Server - x86_64                                        546
pgdg94/7Server/x86_64                          PostgreSQL 9.4 7Server - x86_64                                       788
pgdg95/7Server/x86_64                          PostgreSQL 9.5 7Server - x86_64                                       781
pgdg96/7Server/x86_64                          PostgreSQL 9.6 7Server - x86_64                                       785
remi-php72                                     Remi's PHP 7.2 RPM repository for Enterprise Linux 7 - x86_64         370
remi-safe                                      Safe Remi's RPM repository for Enterprise Linux 7 - x86_64          3,451
rhel-7-server-eus-optional-rpms/7Server/x86_64 Red Hat Enterprise Linux 7 Server - Extended Update Support - Opti 13,684
rhel-7-server-rpms/7Server/x86_64              Red Hat Enterprise Linux 7 Server (RPMs)                           24,345
repolist: 58,694

但是,現在我被困住了。歡迎任何幫助或建議。

謝謝你。

我在您的儲存庫列表中看到的明顯問題是系統僅部分設置為擴展更新支持儲存庫:

rhel-7-server-eus-optional-rpms/7Server/x86_64 Red Hat Enterprise Linux 7 Server - Extended Update Support - Opti 13,684
rhel-7-server-rpms/7Server/x86_64              Red Hat Enterprise Linux 7 Server (RPMs)                           24,345

可選頻道在 EUS 上,但基本頻道不在。

因為包texlive-xetex-bin在可選通道中,並且它所依賴的包texlive-kpathsea-lib在基本通道中,所以你得到這個版本不匹配。

要解決此問題,您應該將基本通道切換到 EUS(如果系統有權使用 EUS),或者關閉可選通道關閉 EUS(並允許系統更新到 RHEL 7.6)。

例如,要繼續進行 EUS:

subscription-manager repos --enable=rhel-7-server-eus-rpms
subscription-manager repos --disable=rhel-7-server-rpms
subscription-manager release --set=7.5

或者離開 EUS:

subscription-manager repos --enable=rhel-7-server-optional-rpms
subscription-manager repos --disable=rhel-7-server-eus-optional-rpms
subscription-manager release --unset

有關詳細資訊,請參閱此 Red Hat 知識庫文章:如何將系統綁定到 Red Hat Enterprise Linux 的特定更新?

引用自:https://serverfault.com/questions/971206