从 19.10 升级到 20.04 失败

从 19.10 升级到 20.04 失败

我之前升级过另一个系统,遇到了一些问题,但只需简单sudo apt dist-upgrade继续升级即可解决该问题。

第二个系统从 19.10 升级到 20.04 失败,并显示错误消息:

systemd-machine-id-setup: /lib/libcrypt.so.1: version `XCRYPT_2.0' not found (required by /lib/systemd/libsystemd-shared-245.so)

具体来说,我正在升级 Kubuntu 并使用了以下站点的说明: https://help.ubuntu.com/community/FocalUpgrades/Kubuntu

从 中https://unix.stackexchange.com/questions/518699/error-while-starting-open-ssh-usr-sbin-sshd-lib-libcrypt-so-1-version-xcr,我发现这libcrypt.so.1是一个软链接/lib/libcrypt.so.1 -> libcrypt-2.30.so。我删除了软链接,以便找到另一个 libcrypt,/usr/lib/x86_64-linux-gnu/libcrypt.so -> /lib/x86_64-linux-gnu/libcrypt.so.1.1.0,这似乎更合适。

Asudo apt dist-upgrade继续推进升级。然而,它再次失败:

/usr/bin/perl: /lib/libcrypt.so.1: version `XCRYPT_2.0' not found (required by /usr/bin/perl)

显然,安装过程中的某些操作重新创建了该链接:/lib/libcrypt.so.1 -> libcrypt-2.30.so

我确信 libcrypt-2.30.so 很棒,但这个软链接却搞砸了升级过程。WTF?!?升级过程中失败的地方如下:

...
Processing triggers for cups (2.3.1-9ubuntu1.1) ...
Updating PPD files for hpcups ...
Processing triggers for libc-bin (2.31-0ubuntu9) ...
Processing triggers for systemd (245.4-4ubuntu3.1) ...
Processing triggers for man-db (2.9.1-1) ...
perl: /lib/libcrypt.so.1: version `XCRYPT_2.0' not found (required by perl)
...

我敢打赌,他们libc-bin以某种方式恢复了联系。

使用dpkg -S /lib/libcrypt-2.30.so显示libc6-udeb安装/lib/libcrypt-2.30.so文件。该libc6-udeb包没有任何依赖关系,因此sudo apt remove libc6-udeb。这删除了有问题的文件、链接,似乎继续升级。Asudo apt dist-upgrade似乎表示升级已完成。Asudo apt autoremove用于完成该过程。

那么,这是怎么回事呢?我安装了各种不同的存储库、软件包等,但我很少遇到升级过程如此失败而没有(通常)简单dpkg --configure -a或类似(可能稍微复杂一点)的修复。

答案1

使用sudo apt remove libc6-udeb似乎可以解决上述问题所示的问题。

答案2

我在将虚拟机从 Debian 10 升级到 11(从 buster 到 bullseye)时遇到了这种问题,所以我会在这里记录下来,以防其他人遇到这种情况。症状非常可怕,因为大多数系统工具都无法启动,而你只有升级会话的 shell,它仍然没有死掉。

问题在于 /lib/libcrypt.so.1 符号链接指向旧文件 /lib/libcrypt-2.11.3.so(其时间戳为 2014 年),而不是指向当前 libcrypt1 包提供的新文件 /lib/$arch-linux-gnu/libcrypt.so.1.1.0(其时间戳为 2021 年)。

Debian 错误跟踪系统中有一些关于一些已修复的排序问题的信息,但就我而言,我在 dist-upgrade 过程中用完了磁盘空间,这可能以类似的方式搞砸了排序。

修复方法只是在工作 shell 中运行 ln -sf 来手动切换。

此外,dpkg -S 不再识别的旧库文件必须手动移出库路径,以使链接保持正确。

相关内容