Centos

yum/rpm 無法在 chroot 中初始化 NSS 庫

  • February 21, 2020

我正在執行從 CentOS 7.4 到 CentOS 7.5 的 yum 更新,當 nspr 和 nss soft-softoken 收到更新時,我得到以下錯誤:

yum update nspr
error: Failed to initialize NSS library
There was a problem importing one of the Python modules
required to run yum. The error leading to this problem was:

  cannot import name ts

Please install a package which provides this module, or
verify that the module is installed correctly.

It's possible that the above module doesn't match the
current version of Python, which is:
2.7.5 (default, Apr 11 2018, 07:36:10) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-28)]

If you cannot solve this problem yourself, please go to 
the yum faq at:
 http://yum.baseurl.org/wiki/Faq

更新到的軟體包:

nss                         3.34.0-4.el7                                           
nss-softokn                 3.34.0-2.el7                                           
nss-softokn-freebl          3.34.0-2.el7                                           
nss-sysinit                 3.34.0-4.el7                                           
nss-tools                   3.34.0-4.el7                                           
nss-util                    3.34.0-2.el7  

故障排除嘗試:讀者應該注意,升級後的文件系統是版本控制的。以下每個步驟均在同一時間點執行,並在繼續進行下一個故障排除步驟之前恢復。

這些文章和解決方案中的每一個都沒有解決我的特定問題。

感謝您的時間。

特別感謝#centos 上的 TrevorH 和 jhodrien。

問題是 chroot 阻止訪問 /dev/urandom (如設計的那樣)。成功安裝的更新需要這些隨機位來初始化 GnuTLS。

解決方案是:

mount -o bind /dev dev/

到 chroot 並照常進行更新。

或者,如果您不想掛載整個 /dev 目錄,您可以創建自己的!

mknod -m 666 /dev/random c 1 8
mknod -m 666 /dev/urandom c 1 9

問題已解決。

Arlion 是對的,但也有不利的一面,一個大的。更好用

mount -o bind /dev/urandom dev/urandom

根據我對 Centos 7 的經驗,如果 /dev 大部分時間都安裝了,即使在它被解除安裝後 /dev/pts 被搞砸了,所以 ssh 登錄到該機器將失敗。發生這種情況時 ssh 將無法連接,並且會觀察到以下消息:

Server refused to allocate pty

/var/log/messages 或 dmesg 中沒有任何內容表明存在問題。雖然互動式會話將無法連接,但仍然可以通過 ssh 恢復:

ssh root@stuck_machine 'umount /dev/pts; mount devpts /dev/pts -t devpts'

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