FreeBSD 13→14アップグレードで「libssl.so.111 not found」エラーが出た時の対処法
How to Fix “libssl.so.111 not found” Error After FreeBSD 13 to 14 Upgrade
遅ればせながら、FreeBSDを13から14にアップグレードしました。
FreeBSD 13から14へのメジャーアップグレード後、以下のエラーが発生し、sudoやpkgなどのコマンドが使用できなくなりました。
$ pkg upgrade -y
ld-elf.so.1: Shared object "libssl.so.111" not found, required by "pkg"
$ sudo pkg upgrade -y
ld-elf.so.1: Shared object "libcrypto.so.111" not found, required by "sudo"
$ sudo freebsd-update install
ld-elf.so.1: Shared object "libcrypto.so.111" not found, required by "sudo"この状態では、sudoが完全に使用できなくなるため、通常のパッケージ管理操作ができなくなります。
原因
FreeBSD14ではOpenSSLのメジャーバージョン変更がありました。
- FreeBSD 13: OpenSSL 1.1.1(libssl.so.111, libcrypto.so.111)
- FreeBSD 14: OpenSSL 3.0(libssl.so.30, libcrypto.so.30)
pkgでインストールされたパッケージ(sudo,curlなどなど)は/usr/local/sbin/pkgを使用しています。
これらはFreeBSD13用にビルドされており、libssl.so.111にリンクされている形です。正しい手順では、カーネル更新後に必ず再起動してから次のfreebsd-update installを実行する必要がありますが、再起動前に2回目のinstallを実行すると、新しいカーネルと古いユーザーランドの間で不整合が発生します。この状態でパッケージの更新が行われないまま再起動すると、ライブラリの依存関係が壊れるということです。
解決法
まず、rootユーザになります。sudoが動作をしていないと思いますので、直接rootでログインします。
su -
password:pkg-staticコマンドを実行します。pkg-staticは静的リンクされているため、共有ライブラリに依存せず動作します。
pkg-static upgrade -f
pkg-static: Warning: Major OS version upgrade detected. Running "pkg bootstrap -f" recommended
Updating FreeBSD repository catalogue...
...
New version of pkg detected; it needs to be installed first.
パッケージ更新のプロンプトでyを入力して続行します。これによって全パッケージがFreeBSD14のABIに対応したバージョンに更新されます。
無事に更新されましたら、rootから抜けて動作確認をします。
exit
sudo pkg version
Updating FreeBSD repository catalogue...
FreeBSD repository is up to date.
Updating FreeBSD-kmods repository catalogue...
FreeBSD-kmods repository is up to date.
All repositories are up to date.
bash-5.3.3_2 =
brotli-1.1.0,1 =
curl-8.16.0 =
dmidecode-3.6 =
gettext-runtime-0.23.1 =
htop-3.4.0 =
indexinfo-0.3.1_1 =
isc-dhcp44-server-4.4.3P1_2 =
libedit-3.1.20250104,1 =
libffi-3.5.1 =
...まとめ
freebsd-updateでカーネル更新後に「Please reboot」と表示されたら、必ずその時点で再起動しようというお話でした。
わたしはそのままカタカタと作業している最中に2回目のinstallを実行してしまい、今回のようなライブラリエラーが発生しました。もし同じように間違えて実行してしまった場合は、rootになってpkg-static upgrade -fを実行すれば復旧できます。
おわり
正しいアップグレード手順
公式ドキュメントに従った正しいアップデート手順です。
# 現在のシステムを最新の状態にする
sudo freebsd-update fetch
sudo freebsd-update install
# アップグレードを開始
sudo freebsd-update -r 14.3-RELEASE upgrade
# 1回目のインストール(カーネル更新)
sudo freebsd-update install
#Kernel updates have been installed. Please reboot...
# 再起動
sudo shutdown -r now
# 再起動後、2回目のインストール(ユーザーランド更新)
sudo freebsd-update install
#rebuild all third-party applications...then run freebsd-update install again
# パッケージの更新
sudo pkg-static upgrade -f
# または
sudo pkg bootstrap -f
sudo pkg upgrade -y
# 3回目のインストール(古いライブラリ削除)
sudo freebsd-update install
# 最終的な再起動
sudo shutdown -r now参考リンク
missing libssl.so.lll after upgrading to 14.1
After upgrading system to 14.0 pkg don’t work
Chapter 26. Updating and Upgrading FreeBSD