我一周前从 Debian 10 升级到 11。
重复出现的错误是:
symbol lookup error: /lib/systemd/libsystemd-shared-247.so: undefined symbol: seccomp_api_get
它在启动系统时导致内核恐慌。
我不得不切换到 systemv 作为 init 系统。
现在,当我尝试恢复时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,因为它实际上是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
决定删除数据是否安全。