修复失败的 Debian 升级

Jas*_* K. 6 debian upgrade systemd sysvinit

我试图从 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
Run Code Online (Sandbox Code Playgroud)

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

# 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
Run Code Online (Sandbox Code Playgroud)

不幸的是,这个“详细”的调试对我来说太简洁了,我在升级过程中被卡住了。

我尝试运行 man-db post install 如下:

sh -x /var/lib/dpkg/info/man-db.postinst configure 2.6.7.1-2
Run Code Online (Sandbox Code Playgroud)

并且它成功完成而没有错误,所以我不确定错误是什么能够尝试和修复。

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

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

uml*_*ute 11

我不明白您如何获得比您已有的更多相关信息。错误消息说:

试图覆盖 '/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
Run Code Online (Sandbox Code Playgroud)

然后重新启动升级。

但是请注意, 的--force-***选项dpkg通常被认为是危险的,您不应该在不了解其含义的情况下通过从 Internet 复制 shell 片段来盲目地强迫事情。

Debian 升级

OTOH,Debian 花费了大量的血汗和泪水来使系统能够在 Debian 发行版(例如910)之间顺利升级。那么为什么它不适合你呢?

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

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

因此,在尝试将其升级到Debian 10之前,您应该首先确保您实际运行的是Debian 9系统。

  • 删除古老且过时的 `sysvinit` 包应该可以对所有内容进行排序,并且可能是唯一需要做的事情。 (3认同)