手动删除无法使用 apt/dpkg 删除的软件包

手动删除无法使用 apt/dpkg 删除的软件包

我有一台装有 WSL2/Ubuntu 20.04 的 PC。我最近尝试在其上安装一个软件包(戴尔srvadmin软件包)。安装进行到一半时失败了,因为 WSL2systemd上没有安装。

这使得软件包处于半安装/损坏状态,我无法使用 witherdpkgapt例如删除/清除等。

tim@DESKTOP-Q35QTRS:~/interlocutor$ sudo dpkg -r --force-all srvadmin-hapi
(Reading database ... 54160 files and directories currently installed.)
Removing srvadmin-hapi (9.3.2) ...
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down
dpkg: error processing package srvadmin-hapi (--remove):
 installed srvadmin-hapi package pre-removal script subprocess returned error exit status 1
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down
dpkg: error while cleaning up:
 installed srvadmin-hapi package post-installation script subprocess returned error exit status 1
Processing triggers for libc-bin (2.31-0ubuntu9.2) ...
Errors were encountered while processing:
 srvadmin-hapi
tim@DESKTOP-Q35QTRS:~/interlocutor$

那么我是否可以手动执行dpkg无法执行的步骤或以其他方式删除损坏的包?

答案1

编辑/var/lib/dpkg/info/srvadmin-hapi.prerm,然后插入set -x为第二行(即紧接该#!行之后)。编辑此脚本需要以 root 身份完成。

然后再跑dpkg -r --force-all srvadmin-hapi。这将向您显示 .prerm 脚本内发生的情况,以及具体哪个命令失败。这应该为您提供足够的信息来解决问题并删除软件包。

或者,对于强力“修复”,如果 .prerm 看起来不那么重要(或者它所做的唯一重要的事情是执行systemctl stop srvadmin-hapisystemctl status或类似),则只需插入exit 0为.prerm 脚本。然后您应该能够清除该包而不会出现其他问题。

相关内容