我刚刚将 readline 升级到新的主要版本:
$ grep readline.*7 /var/log/pacman.log
[2016-11-15 21:53] [ALPM] upgraded readline (6.3.008-4 -> 7.0-1)
由于这个 GNUPG 已损坏:
$ gpg
gpg: error while loading shared libraries: libreadline.so.6: cannot open shared object file: No such file or directory
这也意味着我无法升级任何软件包。我如何安全地修复我的安装?
到目前为止我已经尝试过的降级阅读行:
- 包裹不在
/var/cache/pacman/pkg
- 建筑从以前的 PKGBUILD失败是因为它不会自行引导 - 它依赖于
awk
哪个也丢失了libreadline.so.6
。
答案1
答案2
通过手动验证并安装旧版本修复:
- 从以下位置下载以前的版本Arch Linux 档案
- 将包和签名文件复制到其他机器并验证那里的签名
- 打开包装:
sudo tar -xvpf readline-6.3.008-4-x86_64.pkg.tar.xz -C / --exclude .PKGINFO --exclude .INSTALL
警告:其他软件包可能包含安装前或安装后脚本。这一个没有,但请考虑自己受到警告!
答案3
它似乎libreadline.so.7
向后兼容,足以让大多数实用程序在运行后继续工作:
sudo ln -s /usr/lib/libreadline.so.7 /usr/lib/libreadline.so.6
之后它警告我/usr/bin/bash: Symbol rl_readline_state has different size in shared object, consider re-linking
,但我能够更新pacman-key
和升级,libgcrypt
以便新的软件包能够验证,然后pacman -S bash
使用 重建我的 shell readline 7.0
。
扑灭 pacman 的 Catch-22 式火灾后,只需使用以下命令进行清理即可:
sudo rm /usr/lib/libreadline.so.6
答案4
我按照@chbrown的建议做了:
sudo ln -s /usr/lib/libreadline.so.7 /usr/lib/libreadline.so.6
(也有链接警告)
然后我遇到了一个关于 ca-certificates-utils 的新错误,所以我必须遵循以下步骤:https://bugs.archlinux.org/task/53217#comment155971
pacman -Sy --force ca-certificates-utils
然后我可以:
pacman -Syu
所有升级都很顺利,并且 libreadline/libreadline 链接错误已修复。