修复失败的 Debian 升级

修复失败的 Debian 升级

我试图从 debian 9 升级到 10,但尝试安装时安装失败systemd-sysv_241-7~deb10u6_amd64.deb。我收到以下错误:

我的尝试运行apt --fix-broken install没有成功并导致以下相同的错误。

(Reading database ... 59371 files and directories currently installed.)
Preparing to unpack .../systemd-sysv_241-7~deb10u6_amd64.deb ...
Unpacking systemd-sysv (241-7~deb10u6) ...
dpkg: error processing archive /var/cache/apt/archives/systemd-sysv_241-7~deb10u6_amd64.deb (--install):
 trying to overwrite '/usr/share/man/man8/halt.8.gz', which is also in package sysvinit 2.88dsf-41+deb7u1
Processing triggers for man-db (2.7.6.1-2) ...
Errors were encountered while processing:
 /var/cache/apt/archives/systemd-sysv_241-7~deb10u6_amd64.deb

在我尝试隔离时,当我在详细模式下运行失败的命令时,我得到以下信息:

# dpkg --debug=77777 -i /var/cache/apt/archives/systemd-sysv_241-7~deb10u6_amd64.deb
...
D000040: ok 2 msgs >><<
D010000: check_triggers_cycle pnow=man-db:amd64
D020000: check_triggers_cycle pnow=man-db:amd64 first
Processing triggers for man-db (2.7.6.1-2) ...
D000002: fork/exec /var/lib/dpkg/info/man-db.postinst ( triggered /usr/share/man )
D000001: ensure_diversions: same, skipping
D020000: post_postinst_tasks - trig_incorporate
Errors were encountered while processing:
 /var/cache/apt/archives/systemd-sysv_241-7~deb10u6_amd64.deb

不幸的是,这种“详细”调试对我来说太简洁了,我在升级过程中陷入了困境。

我尝试按如下方式运行 man-db 安装后:

sh -x /var/lib/dpkg/info/man-db.postinst configure 2.6.7.1-2

它成功完成,没有错误,所以我不确定可以尝试修复什么错误。

我知道安装脚本位于 中ls /var/lib/dpkg/info,但我不知道哪些与该包相关。

谁能告诉我在哪里可以获得更多详细信息以更彻底地调试并修复它?

答案1

我不知道你如何才能获得比现有信息更多的相关信息。错误消息显示:

尝试覆盖 '/usr/share/man/man8/halt.8.gz',它也在软件包 sysvinit 2.88dsf-41+deb7u1 中

基本上就是这样:两个包想要安装同一个文件,而 debian 禁止这样做(因为单个文件不能有两个不同的内容)。

由于有问题的文件只是一个联机帮助页,因此不应该有任何真实的问题(如:导致系统无法启动的灾难性问题),无论两个软件包中的哪一个“获胜”。

所以我个人会做一个被迫安装损坏的包:

# dpkg --force-overwrite -i /var/cache/apt/archives/systemd-sysv_241-7~deb10u6_amd64.deb

然后重新启动升级。

但请注意,--force-***的选项dpkg通常被认为是危险的,您不应该在不了解其含义的情况下通过从互联网复制 shell 片段来盲目地强制执行某些操作。

Debian 升级

OTOH,Debian 花费了大量的血汗和泪水来使系统在 Debian 版本之间平滑升级(例如910)。那么为什么它对你不起作用呢?

您应该使用apt-get dist-upgrade在主要版本之间进行升级(因为这可以放松解析器并允许升级比简单的更复杂的情况apt-get upgrade)。

您还应该确保删除旧安装中的垃圾。例如,您的冲突sysvinit包有一个版本号2.88dsf-41+deb7u1,表明它来自 Debian7。事实上,sysvinit自 Debian 以来就没有软件包了8

所以你应该首先确保你实际上运行了一个Debian 9系统,然后再尝试将其升级到Debian 10

答案2

使用:

sudo dpkg -i --force-overwrite  /var/cache/apt/archives/systemd-sysv_241-7~deb10u6_amd64.deb

其次是:

sudo apt install -f

相关内容