ArchLinux整体回滚(重要)

今天使用Pacman升级系统后发现Gnome-Shell版本从46升级到了47, 每次这个大版本的升级都会导致大量的Gnome插件版本失效,这个问题之前我使用了锁定Gnome版本的方法,但是由于软件的相互依赖,好像这个并不是最佳方法。于是有了这篇文章,我们决定把ArchLinux整体回滚到某个正常使用日期前的最佳版本,锁定日期后系统相当于停止滚动,待时机成熟(相应的插件都处理可用或某一必备软件得到升级)可以再进行整体的升级。

Arch Linux Archive 简介

Arch Linux 存档库(Arch Linux Archive,简称 ala),以前称为 Arch Linux 回滚机(Arch Linux Rollback Machine,简称 ARM),保存了官方仓库快照、iso 镜像和引导程序包的历史版本。

用途

  • 将某个包降级到某个早期版本(最新版本不能用,我需要之前的版本)
  • 将所有包恢复到某个指定的历史时刻(所有包都不能用,我要恢复到两个月之前的状态)
  • 查找某个历史版本的 ISO 镜像

Arch Linux 存档库

前四个源是官方源及全球的存档镜像,它保存了每一天的镜像,而后面两个分别是清华大学和北京外国语大学的存档镜像,它们每周存档一次。如果您指定的日期在两个国内存档源中时则使用这两个,因为速度快。如果您的指定日期不在它们之中,则使用前四个源中的某一个都可以,2024年09月21日使用第一个官方存档库回滚系统到2024年09月18日, 这是我的电脑正常工作的最新日期,测试的速度比较快。

ArchLinux 所有软件包降级到特定日期

假设您的 Arch Linux 系统在两天前运行良好且稳定。您今天运行了系统更新,它破坏了系统。因此,您可以将所有软件包降级到之前的特定日期,例如2024 年 9 月 18 日

1. 备份/etc/pacman.d/mirrorlist

/etc/pacman.d/mirrorlist
1
sudo cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.bak

2. 备份/etc/pacman.d/mirrorlist

/etc/pacman.d/mirrorlist
1
2
3
4
5
6
Server = http://archive.archlinux.org/repos/2024/09/18/$repo/os/$arch
Server = https://america.archive.pkgbuild.com/repos/2024/09/19/$repo/os/$arch
Server = https://asia.archive.pkgbuild.com/repos/2024/09/19/$repo/os/$arch
Server = https://europe.archive.pkgbuild.com/repos/2024/09/19/$repo/os/$arch
Server = https://arch-archive.tuna.tsinghua.edu.cn/2024/09-16/$repo/os/$arch
Server = https://mirrors.bfsu.edu.cn/archlinux-archive/2024/09-16/$repo/os/$arch

1. 备份配置文件

1
sudo cp /etc/pacman.conf /etc/pacman.conf.bak

2. 修改/etc/pacman.conf

/etc/pacman.conf
1
2
3
4
5
6
7
8
9
10
11
[core]
SigLevel = PackageRequired
Server=https://archive.archlinux.org/repos/2024/09/18/$repo/os/$arch

[extra]
SigLevel = PackageRequired
Server=https://archive.archlinux.org/repos/2024/09/18/$repo/os/$arch

[community]
SigLevel = PackageRequired
Server=https://archive.archlinux.org/repos/2024/09/18/$repo/os/$arch

强制更新系统

仔细检查恢复日期, 保存并关闭文件。最后,更新数据库并使用命令强制 Arch Linux 更新:

1
sudo pacman -Syyuu

更新完成后,重新启动系统, 您现在已将所有包恢复到之前的特定日期(在我们的示例中为 2024年 9 月 18 日)。但是请注意,我们不建议使用过时的软件包,待您需要Gnome插件或其他特定版本的软件及时跟进更新后请及时将系统升级到最新,若出现问题则再锁定到最新的稳定系统日期,等待下一次全部软件稳定后再次更新。如果操作后可以保证一直稳定使用ArchLinux.

Gnome插件适配查询

此次研究锁定系统滚动日期的主要原因是:2024年09月21日升级后由于Gnome大版本升级导致插件hide-top-bar失效,所以请及时关注失效插件是否适配了当前版本,网址为:https://extensions.gnome.org/ 几个常用插件:

手动解决Gnome插件适配

在2024年09月21日升级系统后采用的锁定ArchLinux到指定日期的稳键策略,而2024年09月27日放开了更新后发现只有插件Hide Top Bar仍然没有适配,于是在百度后发现可以追加版本后修复,因为Gnome 47更新并没有大量改变java script接口,所以这个方法是可行的。具体修改为

/usr/share/gnome-shell/extensions/hidetopbar@mathieu.bidon.ca/metadata.json
1
2
3
4
5
6
7
8
9
{
"shell-version": ["45", "46", "47" ],
"uuid": "hidetopbar@mathieu.bidon.ca",
"name": "Hide Top Bar",
"settings-schema": "org.gnome.shell.extensions.hidetopbar",
"description": "Hides the top bar, except in overview. However, there is an option to show the panel whenever the mouse pointer approaches the edge of the screen. And if \"intellihide\" is enabled, the panel only hides when a window takes the space.\n\n- Press backspace to remove keyboard shortcut.\n- Log off and on again when there is an error after upgrading.",
"url": "https://gitlab.gnome.org/tuxor1337/hidetopbar",
"gettext-domain": "hidetopbar@mathieu.bidon.ca"
}