Downgrading packages (简体中文)
在决定降级之前,请小心考虑。如果是因为现有包有Bug,请在Bug追踪系统搜索现有的Bug报告。如果没有,请花上几分钟帮忙把它报告给Arch的Bug追踪系统或软件包的项目地址,或者在论坛中警告其他可能遇到类似问题的用户。
- 降级某个软件包可能需要降级相应的依赖包.如果依赖包数量巨大,参见Arch Linux Archive#How to restore all packages to a specific date.
- 在修改配置文件和脚本时请小心.只要我们不绕过pacman的安全措施,它将为我们处理这些问题.
- 如果软件包降级会引进 soname 变更,所有依赖包可能都需要降级或重新编译.
如何降级软件包
使用pacman的临时文件
如果一个新包刚刚被安装并且没有删除pacman cache,你可以在/var/cache/pacman/pkg/
中找到较早版本.
安装替换现有的版本.pacman会处理依赖包但不会处理依赖库的版本冲突。如果一个其依赖库因该包降级需要降级,你需要手动降级这些包。
# pacman -U /var/cache/pacman/pkg/package-old_version.pkg.tar.type
对老的软件包,type
应该是 xz
,遵循 2020 变更的新软件包,type
应该是 zst
。
当成功降级该包以后,请暂时将其加入pacman.conf
的IgnorePkg section,直到您的问题被解决。
降级内核
新内核出问题时,可以通过使用 pacman 缓存降级内核。在/var/cache/pacman/pkg
寻找旧版安装包。必须降级的有linux, linux-headers和任何内核模块。举例来说:
# pacman -U linux-4.15.8-1-x86_64.pkg.tar.xz linux-headers-4.15.8-1-x86_64.pkg.tar.xz virtualbox-host-modules-arch-5.2.8-4-x86_64.pkg.tar.xz
退出并重启。
如果您在升级内核后无法启动,您可以通过使用 live CD 来降级内核。方法类似Arch Linux的安装进程。启动后在/mnt
挂载你的根目录文件系统,别忘了挂载其他分区如/boot
或/var
等等。(例子 mount /dev/sdc3 /mnt/boot
)。然后chroot进入系统。
Arch Linux Archive
Arch Linux Archive是official repositories的日更快照。
ALA能被用来降级包或者还原整个系统到过去版本。
手动编译
如果找不到编译好的软件包,就需要自己找到 PKGBUILD 并通过 makepkg 编译。
官方软件仓库中的 PKGBUILD 可以通过 ABS 获取并修改软件版本。或者访问 软件包页面搜索你需要的降级的软件包,然后点 "查看修改" 链接,选择“查看日志“。找到需要的版本并通过 Tree 视图下载 .tar.gz
快照。
参阅 Arch Build System#Checkout an older version of a package.
老的 AUR 软件包可以从 AUR 软件包 git 仓库提出旧版本。如果是 2015 AUR3 之前的 PKGBUILD,请参阅 Arch User Repository#Git repositories for AUR3 packages.
自动化
downgrader-gitAUR 是一个基于libalpm的小工具, 支持 pacman log,使用 Arch Linux Archive,本地缓存和ARM进行降级.
downgradeAUR 基于Bash使用本地缓存和Arch Rollback Machine。详见man downgrade
。