Debian 10에서 11로 업그레이드한 후 systemd를 복원할 수 없습니다: "정의되지 않은 기호: seccomp_api_get"

Debian 10에서 11로 업그레이드한 후 systemd를 복원할 수 없습니다: "정의되지 않은 기호: seccomp_api_get"

일주일 전에 데비안 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데이터를 삭제하는 것이 안전한지 여부를 결정하기 위해 한 번의 검색에만 의존할 수는 없습니다.

관련 정보