建议日常进行系统完整更新,这样既能享受到最新的问题修复和安全更新,还可以避免一次更新太多的软件包,手动处理是分批进行的。从社区寻求帮助时,其他人会假定系统进行了完整更新。
手头上保留 Arch 安装盘或其它 Linux “Live” 环境,这样有问题时可以进行修正。如果在生产环境使用 Arch,无法接受任何的停机,那么在更新前请在非关键系统上测试新配置文件和软件包,没有问题的时候再部署到生产环境。
如果软件包来自 AUR,请注意更新完整。
升级前的准备
建议升级前访问 Arch Linux 主页查看最新消息,或订阅 RSS 或 arch-announce 邮件列表。如果升级需要不寻常的用户操作介入时(无法简单地按照 pacman 的输出信息处理),以上信息总会给出合适的方法。
在更新内核、X.Org、systemd 和 glibc包 等重要软件之前,查看论坛看是否有被报告的出错等问题。
有时候系统更新会出现问题,需要用户立即进行一些手动调整。因此,请不要在重要任务前进行系统更新;而是留出足够的时间用于应付可能的问题。
提示: 可以使用 pacman 钩子如 informantAUR 来避免在阅读最新 Arch 新闻前全面更新系统。
避免某些 pacman 命令
避免部分更新,不要运行 pacman -Sy
而是运行 pacman -Syu
。
一般情况下,避免使用 pacman 的 --force
选项,尤其要避免 pacman -Syu --force
这种可能更新多个软件包的指令。--force
忽略文件冲突,可能导致文件丢失!如果系统按正常维护,Arch 开发者会给出明确的指导,在 Arch 主页会有通知。
避免使用 -d
选项,pacman -Rdd package
会在删除软件包时跳过依赖关系检查。如果删除了系统必要的依赖关系,可能导致系统损坏。
不支持部分升级
Arch Linux 是滚动发行版,新库 版本将不断被推送到源。开发者和信任用户会按照需要重新构建源中的所有软件包。如果有本地安装的版本(例如 AUR 软件包),需要在它们的依赖关系升级了soname时重新编译。
也就是说,部分升级是不被支持的。不要使用:
pacman -Sy _package_
- 或等价命令,如
pacman -Sy
之后再pacman -S _package_
pacman -Syuw
,它和pacman -Sy
有一样的风险,因为它会更新 pacman 同步数据库而不安装新版本软件包。
在安装软件包前请更新源并升级(总是使用 pacman -Syu
)。请注意如果 pacman -Syu
因为某个错误而没有完成升级,最后导致的系统状态和运行 pacman -Sy
是一样的。错误必须被处理,升级更新要尽快完成。同理请特别注意 IgnorePkg
和 IgnoreGroup
的使用。如果系统安装了自行编译的软件包(如从 AUR 包),在其依赖出现 soname 冲突时用户必须重新编译。
如果进行了部分升级,二进制包因为找不到链接库而损坏,不要通过简单的符号链接进行修正。库升级 soname 是因为它们不再向前兼容。只要 pacman 可以运行,使用更新的源进行 pacman -Syu
就能修复这些问题。
注意更新时的提醒
当升级系统时, 请一定要注意 pacman 输出的注意信息。 如果有需要用户手动操作的,请一定要立即搞定。 如果不明白 pacman 输出的信息, 请去论坛搜索或者看 Arch Linux 首页的新闻。
处理配置文件更新
pacman 可能会创建 .pacnew
和 .pacsave
文件,这时 pacman 会通知用户,而用户需要主动处理这些文件。详细的操作说明请参考 Pacnew 和 Pacsave 文件。
同样,注意所有你可能会复制或创建的配置文件。如果软件包提供了一个空配置文件,这个文件被复制到主目录,请注意查看示例文件是否有更新。
在更新后重启程序和系统
升级通常不立即应用于运行中的程序。 您必须重新启动程序才能完全应用升级。
软件包 archlinux-contrib包 提供了一个称为 checkservices 的脚本,它运行 pacdiff 来合并 .pacnew 文件,然后检查正在运行且使用过期库的进程,并提示用户是否想要重启它们。
内核很难在重启前更新。升级内核后重启系统永远是最安全的选择,如果不方便重启可以通过内核热补丁在不重启系统的情况下应用更新。
回退有问题的更新
如果软件包可能导致问题,软件包维护者会在更新时给出提示信息。在更新后遇到问题,请先确认 /var/log/pacman.log
中有没有提醒信息。
提示: 可以使用 wat-gitAUR 等工具搜索 pacman 日志。
然后看看 https://archlinux.org/ 中有没有新闻,然后再到论坛上查找类似的问题,如果都没有找到,可到 论坛、IRC中发帖求助。
降级软件包是最后的解决方案。
检查孤立和未使用软件包
更新系统后,可能有些软件包不再需要,或者不再属于官方软件仓库。
用 pacman -Qtd
命令查找之前作为依赖安装,现在不再需要的软件包。如果孤立的包还是需要的,可用修改 安装原因。如果不再需要,可用将其删除。
除此之外,有些软件包可能已经不再属于远程仓库,但是依然还安装在本地,用 pacman -Qm
命令查找所有这些软件包。注意此命令会包含手动安装的软件,例如 AUR 中的软件。可以使用 ancient-packagesAUR 来排除尚存在于 AUR 中的软件包。
使用包管理器安装软件
软件包管理器 pacman 可以比你更好地记录安装的文件。如果你手动地安装软件,时间一长,就可能忘记安装了什么、到底安装在哪里、安装导致的哪些冲突、是否安装在了错误的地方等等问题。
- 使用 pacman 安装软件包中介绍的方法安装官方软件包。
- 如果找不到需要的软件包,看看 AUR 中有没有提供软件包打包脚本。
- 如果都没有找到,请学习创建软件包。
要清理自己安装的文件,可以参考查找不属于任何软件包的文件。
选择开源驱动
尽可能地选择开源驱动。避免私有驱动。大多数时候,开源驱动比私有驱动更加稳定可靠。开源驱动的问题修改起来比较容易快速,但同时私有驱动提供更多的特性和性能,不过也可能带来稳定性的代价。为了避免这个两难选择,可以选择已知的有很好的开源驱动支持的硬件。关于硬件和开源 Linux 驱动的信息可以在这里找到:linux-drivers.org。
谨慎使用非官方或测试不足的软件包
在使用 AUR 或非官方软件仓库中的软件包时应有预防措施。大部分软件包都是由用户提供的,并不能提供和官方软件仓库相同的质量。谨慎使用 AUR 助手,它们简化了 AUR 中的软件包的安装过程。在编译和安装 AUR 中的软件包之前,务必检查软件包的 PKGBUILD 确保其中不含有错误或恶意的代码。
为简化维护,请限制第三方软件包的使用。周期性地检查真正在使用的包,并移除实际上没有使用的包(或安装官方维护的版本)。pacman 维护提供了清理软件的方法。在系统升级后,可使用 rebuild-detector包 来寻找可能需要重新构建的第三方包。
更新镜像列表
镜像的质量会随着时间而变化,有些镜像会下线或者同步和下载出问题,所以请注意更新 pacman 的镜像列表,详情参考镜像。