![如何修复 Ubuntu 上损坏的软件包](https://linux22.com/image/743903/%E5%A6%82%E4%BD%95%E4%BF%AE%E5%A4%8D%20Ubuntu%20%E4%B8%8A%E6%8D%9F%E5%9D%8F%E7%9A%84%E8%BD%AF%E4%BB%B6%E5%8C%85.png)
我有一台 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].preinst
和package[:arch].postinst
。它们分别在安装之前和安装之后执行 [*]。
在您的案例中,安装后脚本失败了,这意味着软件包已安装(因此文件已提取),剩下的唯一事情就是执行安装后脚本。因此,您需要做的是libpaper1:amd64.postinst
从根终端运行脚本(),并记录发生错误的行。从这里开始修复脚本通常很简单,但一定要了解脚本试图做什么,因为失败的命令可能对软件包至关重要。请尝试实际修复脚本(例如,附加|| true
到行尾是可行的,但可能不是最好的主意)。
如果脚本运行没有错误,则
dpkg --configure -a
命令将配置所有待处理的包,并在过程中运行后安装脚本,恢复包状态。
[*] 当然,实际过程要复杂一些;如果您想知道安装/删除过程中究竟发生了什么,请参阅dpkg(1) 手册页中 、 和 操作install
的configure
描述。remove
答案2
您尝试过 apt-get install -f 吗?
当我必须在具有不同包源的服务器上工作时,我已经遇到了这样的问题。
解决方案各不相同。一般来说,应避免混合使用不同的软件包源。
如果安装了带有 apt 参数 -t <...> 的软件包,那么它有助于借助此参数安装所有有问题的软件包。
然而,有时我必须先移除包裹。
但我也遇到过必须使用 -Force 参数的情况。您尝试过 apt-get install -f 吗?
答案3
对我有用的简短答案
sudo rm /var/cache/debconf/*.dat
然后完美地更新和升级