升级从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,这似乎更合适。
通过sudo 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可能很好,但它正在通过这个软链接搞砸升级过程。这是升级过程中出现故障的地方。
...
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命令将其移除。这样就删除了有问题的文件和链接,并且似乎继续了升级过程。运行sudo apt dist-upgrade命令表明升级已完成。最后使用sudo apt autoremove命令完成整个过程。
那么,这是怎么回事呢?我安装了各种不同的软件源、软件包等,但很少遇到升级过程如此严重失败而无法简单修复(通常可以通过dpkg --configure -a或类似的方法解决)的情况。
1个回答

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