readlineのアップグレード後にArch Linuxのgnupgが破損する - libreadline.so.6が見つかりません

readlineのアップグレード後にArch Linuxのgnupgが破損する - 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

この内容がアーチに報告されました。ここ

解決策は実行することです。

mkinitcpio -P

アップグレードが完了した後に再起動する前です。

mkinitcpioを再実行する前に再起動する場合は、USBドライブなどのデバイスの電源を切り、chrootでmkinitcpioを実行する必要があります。最も簡単なのは使用することですアーチ型ルートのようにアーチの設置手順

私はこの特別な状況でこのアプローチをテストする機会はありませんでしたが、過去にテストしたことがあります。

答え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てアップグレードします。libgcryptpacman -S bashreadline 7.0

パックマンの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リンクエラーが修正されました。

関連情報