Arch Linux 上的 gnupg 自 readline 升级后就损坏了 - 找不到 libreadline.so.6

Arch Linux 上的 gnupg 自 readline 升级后就损坏了 - 找不到 libreadline.so.6

我刚刚将 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

这已报告给Arch这里

解决方法是运行

mkinitcpio -P

升级完成后、重新启动之前。

如果您在重新运行 mkinitcpio 之前重新启动,那么您需要关闭 USB 盘等设备并从 chroot 运行 mkinitcpio。最简单的是使用拱形 chroot如在Arch 安装说明

我还没有机会在这种特殊情况下测试这种方法,但过去曾这样做过。

答案2

通过手动验证并安装旧版本修复:

  1. 从以下位置下载以前的版本Arch Linux 档案
  2. 将包和签名文件复制到其他机器并验证那里的签名
  3. 打开包装: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 链接错误已修复。

相关内容