我试图从 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 版本之间平滑升级(例如9到10)。那么为什么它对你不起作用呢?
您应该使用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