Debian 10 から 11 にアップグレードした後、systemd を復元できません: "未定義のシンボル: seccomp_api_get"

Debian 10 から 11 にアップグレードした後、systemd を復元できません: "未定義のシンボル: seccomp_api_get"

1週間前にDebian 10から11にアップグレードしました。

繰り返されるエラーは次のとおりです。

symbol lookup error: /lib/systemd/libsystemd-shared-247.so: undefined symbol: seccomp_api_get

システムの起動中にカーネルパニックが発生します。

初期化システムとしてsystemvに切り替える必要がありました。

今すぐ復元しようとすると、systemd次のエラーが発生します。

root@nas:~# apt install systemd
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
systemd is already the newest version (247.3-6).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
1 not fully installed or removed.
After this operation, 0 B of additional disk space will be used.
Do you want to continue? [Y/n] 
Setting up systemd (247.3-6) ...
systemd-machine-id-setup: symbol lookup error: /lib/systemd/libsystemd-shared-247.so: undefined symbol: seccomp_api_get
dpkg: error processing package systemd (--configure):
 installed systemd package post-installation script subprocess returned error exit status 127
Errors were encountered while processing:
 systemd
needrestart is being skipped since dpkg has failed
E: Sub-process /usr/bin/dpkg returned an error code (1)

私のバージョン:

root@nas:~# lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 11 (bullseye)
Release:    11
Codename:   bullseye
root@nas:~# uname -a
Linux nas 5.10.0-9-amd64 #1 SMP Debian 5.10.70-1 (2021-09-30) x86_64 GNU/Linux

答え1

解決策が見つかりましたここ:

私も同じ問題があります。その理由は、/lib/x86_64-linux-gnuにあるいくつかの古いライブラリ、特にlibseccompによるものです。パッケージは管理されていません(つまり、どのパッケージにも属しません)。 [… ]

新しいlibseccomp2パッケージは新しいバイナリを/usr/lib/x86_64-linux-gnuに送信しますが、ランタイムローダは/lib/x86_64-linux-gnuに古いバージョンをロードします。 [… ]

/lib/x86_64-linux-gnuから古いライブラリを削除すると、問題がなくなります。

だから、次のファイルを削除しました。

rm /lib/x86_64-linux-gnu/libseccomp.so.2*

Systemdに戻すことができました。

確認方法

dpkg --searchこれを使用して、ファイルまたはディレクトリが孤立していることを確認できます。

dpkg --search /lib/x86_64-linux-gnu/libseccomp.so.2
dpkg-query: no path found matching pattern /lib/x86_64-linux-gnu/libseccomp.so.2

次のコマンドを使用して、そのパッケージがないファイルを見つけることができますcruft-ngどのパッケージにも属さないファイルを見つける方法は?


修正する

一つある/lib/x86_64-linux-gnu/との間のシンボリックリンク/usr/lib/x86_64-linux-gnu/したがって、削除を決定する前に、両方のディレクトリで検索してください。

実行しましたがdpkg --search /usr/lib/terminfo/警告が返され、ディレクトリが削除されましたが、実際にCLIが中断されたため、CLIが中断されましたncurses-base

このディレクトリを所有するパッケージを検索して/usr/lib/提供します。/lib/

dpkg --search /usr/lib/terminfo/ /lib/terminfo/
dpkg-query: no path found matching pattern /usr/lib/terminfo/
ncurses-base: /lib/terminfo

したがって、dpkg --searchデータを削除するのが安全かどうかを判断するために、1回の検索にのみ依存することはできません。

関連情報