Ubuntu 22.04 Usrmerge 致命错误

Ubuntu 22.04 Usrmerge 致命错误

升级到 Ubuntu 22.04 时发生了这个致命错误。

FATAL ERROR:
Both /bin/systemd-tmpfiles and /usr/bin/systemd-tmpfiles exist.

You can try correcting the errors reported and running again
/usr/lib/usrmerge/convert-usrmerge until it will complete without errors.
Do not install or update other Debian packages until the program
has been run successfully.

dpkg:  error when processing package usrmerge (--configure):   
subprocess of package usrmerge was installed script post-installation  
returned error value 1 Errors found while processing: usrmerge  
E: Sub-process /usr/bin/dpkg returned an error code (1)

答案1

关于 usrmerge 实现的一系列错误已被发现:

https://bugs.launchpad.net/ubuntu/+source/usrmerge/+bugs?field.status:list=NEW

usrmerge 存在的原因可以追溯到 20 世纪 70 年代的 unix 历史。例如https://lwn.net/Articles/477467/

usrmerge 包的 README 尝试解释一点(请做好准备,这一切都非常神秘......) https://salsa.debian.org/md/usrmerge/raw/master/debian/README.Debian

坏消息是,如果你打电话

sudo /usr/lib/usrmerge/convert-usrmerge

您必须手动逐步解决所显示的问题。

例如,我在 /bin/evince 和 /usr/bin/evince 中得到了重复的 evince - 比较了两者并删除了 /bin/evince

然后

FATAL ERROR:
Both /lib64/ld-linux-x86-64.so.2 and /usr/lib64/ld-linux-x86-64.so.2 exist.

You can try correcting the errors reported and running again
/usr/lib/usrmerge/convert-usrmerge until it will complete without errors.
Do not install or update other Debian packages until the program
has been run successfully.

注意不要删除 /lib64/ld-linux-x86-64.so.2 - 它将使你的系统无法使用,你将不得不使用 USB 启动盘等进行修复

我必须恢复这个符号链接:

root@my_computer:/lib64# ls -l
total 0
lrwxrwxrwx 1 root root 42 Jul  7 01:23 ld-linux-x86-64.so.2 -> /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2

我最终放弃了这个软件包,等待事情平息,开发人员齐心协力,用普通人能理解的语言来更好地描述如何修复问题:

sudo apt remove --purge usrmerge

答案2

问题不在于 usrmerge 本身,而是 usrmerge 试图解决的问题。当一个软件包在 /lib 中安装库,而另一个软件包在 /usr/lib 中安装同一个库时,就会出现问题。usrmerge 通过符号链接所有内容解决了这个问题,因此不再会对库的安装位置产生混淆。

除此之外,在我的例子中,有一个库具有“不可变”属性,这意味着 usrmerge(或 dpkg!)无法删除或替换该文件。这导致了另一个后果问题(下面的 2)。

这里有三类问题:

  1. 以上内容:无法修改的文件。您应该使用检查lsattr,然后使用删除ai标志chattr -i -a /the/file
  2. usrmerge 在重组文件系统时会创建临时符号链接。这些文件很容易被find / -name "*~usrmerge* -delete
  3. 最后,当出现重复项时,删除它们的方法是检查其中一个是否由管理dpkg。其中一个肯定不是,所以你应该删除它:
dpkg -S {/usr,}/lib/a
a:amd64: /usr/lib/a
dpkg-query: no path found matching pattern /lib/a

在这种情况下,/lib/a可以删除,然后再次运行 convert-usrmerge。只需付出一点努力,您就可以将其转换为一个脚本,该脚本将解析 convert-usrmerge 的输出和上述 dpkg 命令,并反复修复所有问题,我也这样做了。

免责声明:很遗憾,由于其他问题,我需要回滚系统,不再有确切的命令和脚本,所以我凭空写下了上述内容。请谨慎处理此类事情。

相关内容