Arch Linux / Manjaro 系统的包管理系统有两个特点:1. 滚动更新,软件总是紧跟最新发布版本,更新频率高;2. 用户软件仓库(Arch User Repository,AUR)提供大量额外软件包。这两个特点是我喜欢 Arch/Manjaro 的重要原因,不过有时也会带来一些苦恼,其中之一便是依赖项更新导致的 AUR 包失效问题。
由于 AUR 包是通过下载源码后本地编译安装的,如果其依赖项被更新,就会出现找不到依赖项的问题。比如 ros-noetic-desktop-full 包本身非常庞大,组件很多,而且依赖项也多,最近一次更新系统(python 从 3.8 更新到 3.9)后,就各种找不到 rospkg、catkin_pkg。在网上找了很久终于找到比较好的解决办法,总结下来就是:
- 借助 rebuild-detector 工具 (AUR 安装) 查询系统中由于依赖项失效而需要重新构建的包,其
-v
参数可以查看依赖项失效的详细信息; - 在 yay 中加入
--rebuildtree
开关来强制重新编译全部关联的 AUR 包,比如当 ros 依赖项失效时,可以用yay -Syu ros-noetic-desktop-full --rebuildtree
命令强制重新编译 ros 全部组件。
另外有个关于 yay 的小技巧:当安装的包需要很长的编译时间(比如 ros)时,编译后安装前输密码的阶段很容易因为等待超时而错过,导致安装失败,给 yay 加上 --sudoloop
则可以避免这一情况。