bokumin.org

Github

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