yum + 預先存在的 rpmdb 問題 + yum 抱怨已經安裝的軟體包
我們正在嘗試在 rhel 7.2 伺服器上安裝以下 rpm,但沒有成功
uname -r 3.10.0-327.el7.x86_64 yum install python2-cryptography-1.7.2-2.el7.x86_64.rpm Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-manager . . . --> Processing Dependency: python-cffi >= 1.4.1 for package: python2-cryptography-1.7.2-2.el7.x86_64 --> Processing Dependency: python-idna >= 2.0 for package: python2-cryptography-1.7.2-2.el7.x86_64 --> Processing Dependency: python-pyasn1 >= 0.1.8 for package: python2-cryptography-1.7.2-2.el7.x86_64 --> Processing Dependency: libcrypto.so.10(OPENSSL_1.0.2)(64bit) for package: python2-cryptography-1.7.2-2.el7.x86_64 --> Processing Dependency: python-ipaddress for package: python2-cryptography-1.7.2-2.el7.x86_64 --> Finished Dependency Resolution Error: Package: python2-cryptography-1.7.2-2.el7.x86_64 (/python2-cryptography-1.7.2-2.el7.x86_64) Requires: python-ipaddress Error: Package: python2-cryptography-1.7.2-2.el7.x86_64 (/python2-cryptography-1.7.2-2.el7.x86_64) Requires: libcrypto.so.10(OPENSSL_1.0.2)(64bit) Error: Package: python2-cryptography-1.7.2-2.el7.x86_64 (/python2-cryptography-1.7.2-2.el7.x86_64) Requires: python-cffi >= 1.4.1 Available: python-cffi-0.8.6-2.el7.x86_64 (local) python-cffi = 0.8.6-2.el7 Error: Package: python2-cryptography-1.7.2-2.el7.x86_64 (/python2-cryptography-1.7.2-2.el7.x86_64) Requires: python-pyasn1 >= 0.1.8 Available: python-pyasn1-0.1.6-2.el7.noarch (local) python-pyasn1 = 0.1.6-2.el7 Error: Package: python2-cryptography-1.7.2-2.el7.x86_64 (/python2-cryptography-1.7.2-2.el7.x86_64) Requires: python-idna >= 2.0 You could try using --skip-broken to work around the problem ** Found 2 pre-existing rpmdb problem(s), 'yum check' output follows: containerd.io-1.2.13-3.1.el7.x86_64 has installed conflicts containerd: containerd.io-1.2.13-3.1.el7.x86_64 containerd.io-1.2.13-3.1.el7.x86_64 has installed conflicts runc: containerd.io-1.2.13-3.1.el7.x86_64
因為我們得到
pre-existing rpmdb problem(s)
我們執行了以下操作
package-cleanup --dupes package-cleanup --cleandupes
但問題仍然存在
還有我們發現 yum 需要的 python 包實際上是安裝的
例子
pip list | grep idna idna 2.10 pip list | grep pyasn1 pyasn1 0.1.9
所以我們不明白為什麼當 python 包已經安裝了正確的版本時 yum 會抱怨
您似乎正在使用
pip
以及yum
安裝軟體包。安裝的軟體包對pip
是不可見的yum
,這將是您的安裝失敗的原因。opensource.com 上的這篇文章很好地解釋了這些問題:以正確的方式管理 Python 包。我將在這裡總結關鍵資訊。
使用
pip
(withsudo pip install
) 全域安裝包時,會將包安裝到通常由 OS 包管理器控制的系統級位置。但是,包管理器不知道該包,這使得安裝與已安裝包的數據庫不一致。在極端情況下,這可能會導致依賴 Python 的系統級應用程序(例如其yum
自身)出現問題。通常,在全域安裝 Python 模組時,您應該更喜歡系統的本機包管理器。這些包是用特定版本的作業系統測試的,所以它們應該更可靠。
如果你真的想用
pip
安裝包,推薦使用虛擬環境。使用virtualenv
,您將獲得一個本地安裝,您可以根據需要進行修改。您可以安裝所需的任何軟體包,而不會危及整個系統的完整性。與往常一樣,這兩種方法之間存在權衡。在繼續之前仔細評估它們。
在您的特定情況下,您可以通過刪除模組來繼續
pip
,然後通過重新安裝它yum
。我不能保證這會奏效,因此請謹慎使用並首先測試該方法。關於實際的軟體包,我能夠找到CentOS 7 的清單。在 RHEL 上,您可能需要 Software Collections 儲存庫來獲取此軟體包。再一次,在您決定繼續這條路線之前,請確保您確實通過某個渠道獲得了可用的 RPM 包。