Arch Linux是一个比较"前卫"的滚动式(系统没有版本号,一条指令能更新系统中所有的软件到最新版本)Linux发行,因为它使用的软件包版本始终都是最新的。
我在滚系统时收到了pacman因为依赖关系破坏的提示而导致无法更新任何软件包。不过呢,pacman同步和移除软件包都有一个不被推荐使用的选项那就是在同步或者移除软件包时允许跳过所有的依赖关系检查(使用时只需传递两个dd选项给pacman)。这样一来,就会出很多问题。
我果断的用了这个选项滚了系统,之后系统果然出了问题。连pacman都无法好好工作了,说是自己要的一个动态库(它找不到的那个动态库叫libnghttp2.so.14,虽然它也是一个符号链接)找不到了。怎么办呢?
首先,我用了常规解决方案,看看系统中有没有这个动态库?没有,那有没有这个软件包?没有?从Arch Linux官网上下一个。libnghttp2属于Core的,而pacman的启动依赖于这个软件包。
因为Arch Linux的软件包实际上就是一个经过tar打包然后用xz压缩过的归档。所以解决方案就是直接解开软件包并将解开后的文件放到合适的位置(虽然放到usr下再用pacman工作正常,但依然无法将缺的这个软件包装上,会提示已经存在同名文件,如果将它们删了则pacman将不能正常工作。)而应该是放到usr/local下或者其它位置,但需要进行另外配置。)之后,pacman能正常工作了。这是重新安装安装pacman所缺的这个软件包已经没有了问题。虽然在Live环境的pacstrap也能完成这个工作,不过却是显得有些繁琐了。