我试图删除 avg2013,然而当我尝试时收到一条奇怪的错误消息。
我正在运行的命令:
sudo apt-get remove --purge avg2013flx
我收到的错误:
Removing avg2013flx (2013.3118) ...
Failed to stop avgd.service: Unit avgd.service not loaded.
invoke-rc.d: initscript avgd, action "stop" failed.
dpkg: error processing package avg2013flx (--purge):
subprocess installed pre-removal script returned error exit status 5
Errors were encountered while processing:
avg2013flx
E: Sub-process /usr/bin/dpkg returned an error code (1)
我查看过,该服务没有运行,但确实存在。
答案1
同样的问题在这里,我有一个解决方案:
打开终端并打开文件avg2013flx.prerm
sudo nano /var/lib/dpkg/info/avg2013flx.prerm
搜索以下行
if which invoke-rc.d >/dev/null 2>&1; then
invoke-rc.d avgd stop
else
/etc/init.d/avgd stop
fi
并替换全部发生
# if which invoke-rc.d >/dev/null 2>&1; then
# invoke-rc.d avgd stop
# else
# /etc/init.d/avgd stop
# fi
然后再次运行
sudo apt-get remove --purge avg2013flx
解释:
注释掉这些行会阻止进程尝试停止服务。而且服务本来就没在运行,所以它能够删除该包。
答案2
据我所知,使用较新版本的 Ubuntu(14.10、15.04)的用户会遇到此问题。这可能是由于 Ubuntu 转向 systemd init 引擎(启动和停止系统服务)造成的。
您看到的错误是软件包的预删除脚本尝试与 init 系统交互但失败了。
我们可以假设这就是脚本要做的全部工作。您可以忽略它的失败,并使用该dpkg
--force-all
标志继续执行。
sudo dpkg -P --force-all avg2013flx
如果脚本执行的操作不止这些,那就有点冒险了。我们可以查看一下,然后编辑(甚至修复)删除前的脚本:
sudoedit /var/lib/dpkg/info/avg2013flx.prerm
... 但您需要了解问题所在才能修复它。毫无疑问,它类似于这样的行service stop avg
。我没有安装它(或者只想为此安装它),所以您必须四处寻找(或编辑您的问题以包含它,我会看看)。
sudo ln -s /bin/true /etc/init.d/avgd
sudo apt-get remove --purge avg2013flx
这只是确保删除脚本存在一个虚假的 init 脚本副本,从而允许其完成。鉴于其他答案建议直接删除脚本,我最初的--force-all
建议应该同样安全。