今回はLinuxネタとなります。

筆者宅では内向きのDNSサーバにArchLinuxでunboundを動かしております。
本日、久しぶりにpacman -Syu で更新かけようとしたところ、パッケージ数が87!

更新終わって再起動すると。。unboundが起動しておりません。

そんなわけで今回は障害対応ネタです。

libssl.so.1.1: cannot open shared object file: No such file or directory

ArchLinux上のコンソールで、まずはunboundのステータスをみてみます。
「sudo systemctl status unbound」と叩くと無残にも以下のメッセージが表示されております。

/usr/bin/unbound: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory

状況確認(opensslのバージョンチェック)

更新の際に何のバージョンがインストールされてしまったのか?を以下コマンドで確認します。

$ sudo pacman -Ss openssl

おやおや、sslは何と3に更新されておりました。

core/openssl 3.0.7-2.2 [インストール済み]
    The Open Source toolkit for Secure Sockets Layer and Transport Layer Security
core/openssl-1.0 1.0.2.u-1.0
    The Open Source toolkit for Secure Sockets Layer and Transport Layer Security
core/openssl-1.1 1.1.1.s-2.2
    The Open Source toolkit for Secure Sockets Layer and Transport Layer Security

というわけで、フォルダの中身も確認してみます。

$ cd /usr/lib
$ ls libssl*

libssl.so@  libssl.so.3*  libssl3.so*

やはり・・・・。ない。。。
そりゃあ、unboundも起動できませんよね。


復旧(過去パッケージより抽出)

というわけでここに、libssl.so.1.1を置いてあげればいいわけです。
どこから持ってくるかというと、過去にダウンロード済のパッケージのキャッシュから
openssl.so.1.1を抜き出して復旧することとします。

$ cd /var/cache/pacman/pkg
$ ls openssl-1* 

openssl-1.1.1.n-1.0-pentium4.pkg.tar.zst      openssl-1.1.1.o-1.0-pentium4.pkg.tar.zst      openssl-1.1.1.q-1.0-pentium4.pkg.tar.zst
openssl-1.1.1.n-1.0-pentium4.pkg.tar.zst.sig  openssl-1.1.1.o-1.0-pentium4.pkg.tar.zst.sig  openssl-1.1.1.q-1.0-pentium4.pkg.tar.zst.sig

良かったです、過去バージョンがありました。
上記のzstファイル、これは圧縮されたファイルですので、
このファイルをユーザディレクトリにコピーしてから解凍していきます。

$ cp openssl-1.1.1.q-1.0-pentium4.pkg.tar.zst ~/
$ cd
$ tar -I zstd -xvf openssl-1.1.1.q-1.0-pentium4.pkg.tar.zst


抽出したファイルを所定の場所へ移動

ホームディレクトリ以下のusr/lib/以下に該当のlibssl.so.1.1が解凍されています。
これを本来あるべき場所に移動してやります。
同じく解凍されていたのがlibcrypt.so.1.1。
これも念のため一緒に移動しておきました。

$ sudo mv usr/lib/libssl.so.1.1 /usr/lib
$ sudo mv usr/lib/libcrypt.so.1.1 /usr/lib

いざ起動!

それではいざ、unboundを起動!

$ sudo systemctl status unbound                                                                                                                                 

● unbound.service - Validating, recursive, and caching DNS resolver
     Loaded: loaded (/usr/lib/systemd/system/unbound.service; disabled; preset: disabled)
     Active: active (running) since Tue 2022-12-13 23:29:21 JST; 5s ago
       Docs: man:unbound(8)
   Main PID: 1079 (unbound)
      Tasks: 1 (limit: 4746)
     Memory: 5.7M
        CPU: 378ms
     CGroup: /system.slice/unbound.service
             └─1079 /usr/bin/unbound -d -p

12月 13 23:29:21 osmaniax9 systemd[1]: Starting Validating, recursive, and caching DNS resolver...
12月 13 23:29:21 osmaniax9 unbound[1079]: [1079:0] notice: init module 0: subnetcache
12月 13 23:29:21 osmaniax9 unbound[1079]: [1079:0] notice: init module 1: validator
12月 13 23:29:21 osmaniax9 unbound[1079]: [1079:0] notice: init module 2: iterator
12月 13 23:29:21 osmaniax9 unbound[1079]: [1079:0] info: start of service (unbound 1.14.0).
12月 13 23:29:21 osmaniax9 systemd[1]: Started Validating, recursive, and caching DNS resolver.
12月 13 23:29:22 osmaniax9 unbound[1079]: [1079:0] info: generate keytag query _ta-4f66. NULL IN

やった!
これでばっちり起動できました。
復旧です。


まとめ

今回はArchLinuxでlibsslが最新に更新されてしまい、unboundがライブラリ依存により起動できなくなったという障害対応を実施しました。

何かの参考になれば幸いです。