如何修复 Ubuntu 上损坏的软件包

如何修复 Ubuntu 上损坏的软件包

我有一台 Ubuntu 18.10 服务器,最近尝试更新git。我不断收到错误消息,提示许多软件包未正确安装。

Errors were encountered while processing:
 libpaper1:amd64
 libpaper-utils
 unattended-upgrades
 libgs9:amd64
 ghostscript

然后我运行dpkg --configure -a并看到相同的错误。我想小心谨慎,不要破坏我的系统,但我该如何修复这些错误?

~ $ sudo apt list --upgradable
Listing... Done
~ $ sudo apt-get check
Reading package lists... Done
Building dependency tree
Reading state information... Done
~ $ sudo apt-get check
Reading package lists... Done
Building dependency tree
Reading state information... Done
~ $ sudo apt-get upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
5 not fully installed or removed.
After this operation, 0 B of additional disk space will be used.
Do you want to continue? [Y/n] y
Setting up libpaper1:amd64 (1.1.24+nmu5ubuntu1) ...
dpkg: error processing package libpaper1:amd64 (--configure):
 installed libpaper1:amd64 package post-installation script subprocess returned error exit status 10
dpkg: dependency problems prevent configuration of libpaper-utils:
 libpaper-utils depends on libpaper1; however:
  Package libpaper1:amd64 is not configured yet.

dpkg: error processing package libpaper-utils (--configure):
 dependency problems - leaving unconfigured
Setting up unattended-upgrades (1.5ubuntu3.18.10.4) ...
dpkg: error processing package unattended-upgrades (--configure):
 installed unattended-upgrades package post-installation script subprocess returned error exit status 10
dpkg: dependency problems prevent configuration of libgs9:amd64:
 libgs9:amd64 depends on libpaper1; however:
  Package libpaper1:amd64 is not configured yet.

dpkg: error processing package libgs9:amd64 (--configure):
 dependency problems - leaving unconfigured
dpkg: dependency problems prevent configuration of ghostscript:
 ghostscript depends on libgs9 (= 9.26~dfsg+0-0ubuntu0.18.10.9); however:
  Package libgs9:amd64 is not configured yet.

dpkg: error processing package ghostscript (--configure):
 dependency problems - leaving unconfigured
Processing triggers for libc-bin (2.28-0ubuntu1) ...
Errors were encountered while processing:
 libpaper1:amd64
 libpaper-utils
 unattended-upgrades
 libgs9:amd64
 ghostscript
E: Sub-process /usr/bin/dpkg returned an error code (1)

编辑

回答@Stefan Skoglund 的问题:

~ $ sudo apt-cache policy libpaper1
libpaper1:
  Installed: 1.1.24+nmu5ubuntu1
  Candidate: 1.1.24+nmu5ubuntu1
  Version table:
 *** 1.1.24+nmu5ubuntu1 500
        500 http://mirror.hetzner.de/ubuntu/packages cosmic/main amd64 Packages
        500 http://de.archive.ubuntu.com/ubuntu cosmic/main amd64 Packages
        100 /var/lib/dpkg/status

~ $ sudo dpkg-reconfigure -plow libpaper1
/usr/sbin/dpkg-reconfigure: libpaper1 is broken or not fully installed

编辑2

我抛开一切顾虑,闭上眼睛,交叉手指,尝试这样做:

sudo apt-get --purge remove libpaper1:amd64 libpaper-utils unattended-upgrades libgs9:amd64 ghostscript
sudo apt-get clean
sudo apt-get update && sudo apt-get upgrade
sudo apt autoremove

它神奇地起作用了。

如果有人能解释这里发生了什么以及最佳实践/故障排除提示是什么,我们仍然可以提供悬赏。

答案1

这里发生的事情是 libpaper1 软件包的安装后脚本被破坏,并在安装过程中因错误而退出。这不应该发生,因为它会破坏软件包状态,就像您遇到的情况一样,这就是为什么向软件包维护者报告错误是个好主意。请参阅ReportingBugs 维基页面了解详情。

您的选择如下:

删除软件包并等待修复。您的情况可能发生如下情况:当您决定清除 libpaper1 包时,该包已修复,新的安装成功。

需要注意的是,无论是否有可用的升级包,如果包状态损坏,则不会下载该包。因此,您必须删除该包,然后重新安装。

修复安装后脚本。如果您确实、绝对需要该软件包,并且不想等到修复,那么这是一个替代方案。您确实需要知道自己在做什么(必须具备 shell 编程知识),但修复脚本通常很简单。

每个包都可以有一个安装前脚本和一个安装后脚本,它们位于目录中/var/lib/dpkg/info,名为package[:arch].preinstpackage[:arch].postinst。它们分别在安装之前和安装之后执行 [*]。

在您的案例中,安装后脚本失败了,这意味着软件包已安装(因此文件已提取),剩下的唯一事情就是执行安装后脚本。因此,您需要做的是libpaper1:amd64.postinst从根终端运行脚本(),并记录发生错误的行。从这里开始修复脚本通常很简单,但一定要了解脚本试图做什么,因为失败的命令可能对软件包至关重要。请尝试实际修复脚本(例如,附加|| true到行尾是可行的,但可能不是最好的主意)。

如果脚本运行没有错误,则

dpkg --configure -a

命令将配置所有待处理的包,并在过程中运行后安装脚本,恢复包状态。

[*] 当然,实际过程要复杂一些;如果您想知道安装/删除过程中究竟发生了什么,请参阅dpkg(1) 手册页中 、 和 操作installconfigure描述。remove

答案2

您尝试过 apt-get install -f 吗?

当我必须在具有不同包源的服务器上工作时,我已经遇到了这样的问题。

解决方案各不相同。一般来说,应避免混合使用不同的软件包源。

如果安装了带有 apt 参数 -t <...> 的软件包,那么它有助于借助此参数安装所有有问题的软件包。

然而,有时我必须先移除包裹。

但我也遇到过必须使用 -Force 参数的情况。您尝试过 apt-get install -f 吗?

答案3

对我有用的简短答案

sudo rm /var/cache/debconf/*.dat

然后完美地更新和升级

相关内容