情况:又是好久没有滚Arch,更新内容太多,滚挂如下图

解决:首先怀疑是清华源的问题,故改源

  1. 安装 (用于帮助自动选择最快的镜像源)
1
sudo pacman -S reflector
  1. 使用 reflector 选择最快的镜像源并更新 /etc/pacman.d/mirrorlist 文件:
1
2

sudo reflector --verbose -l 100 -p https --sort rate --save /etc/pacman.d/mirrorlist

这个命令会列出100个镜像源,使用 HTTPS 协议,根据下载速度排序,并将最快的镜像源保存到 mirrorlist 文件中。

  • -country: 指定国家和区域
  • -age: 指定最后更新/同步时间,可以过滤掉某些已经停止维护的镜像地址, 单位: 小时
  • -sort: 指定排序方式, 可选 {age,rate,country,score,delay}, 分别为 {最后更新, 下载速度, 镜像分数, 延迟}
  • -protocol: 指定http或https协议
  • -save: 将结果覆写到文件, 一般都是 /etc/pacman.d/mirrorlist, 请提前备份旧的Mirrorlist
  • -threads: 指定多线程数量,不可大于cpu总线程数量
  • -list-countries: 列出国家代码和镜像数量

还有一些其他参数, 具体请使用 reflector --help查看帮助

  • 选择中国的镜像源:
1
sudo reflector --verbose --country 'China' -l 100 -p https --sort rate --save /etc/pacman.d/mirrorlist
  • 手动指定某个特定的镜像源,直接编辑 /etc/pacman.d/mirrorlist 文件,将首选的镜像源地址放在文件的最顶端。使用清华大学开源软件镜像站:
1
echo 'Server = [https://mirrors.tuna.tsinghua.edu.cn/archlinux/$repo/os/$arch](https://mirrors.tuna.tsinghua.edu.cn/archlinux/$repo/os/$arch)' > /etc/pacman.d/mirrorlist
  1. 更新完镜像源后,运行以下命令来更新软件包数据库:
1
sudo pacman -Syy

注意,更换镜像源后,可能需要重新导入 GPG 密钥,如果在使用 pacman -Syu 时遇到了问题,可以尝试使用 pacman -Syyu 来强制更新数据库或者使用 pacman -Syyuu 来尝试降级部分软件包。

重启电脑安装依旧失败,怀疑是’rime-ice-git-r748.2a2bb24-1-any.pkg.tar.zst’等软件包的问题,尝试手动更新这些包,但是失败了

1
2
3
4
5
6
7
8
9
10
sudo pacman -S rime-ice-git
正在解析依赖关系...
正在查找软件包冲突...

……下载失败
错误:无法从 mirrors.tuna.tsinghua.edu.cn : The requested URL returned error: 403 获取文件
……
警告:无法获取某些文件
错误:无法提交处理 (无法获取某些文件)
发生错误,没有软件包被更新。

改用aur库安装也失败

1
2
3
4
5
6
7
8
9
10
11
12
❯ yay -S rime-ice-git
Sync Explicit (1): rime-ice-git-r748.2a2bb24-1
正在解析依赖关系...
正在查找软件包冲突...

……下载失败
错误:无法从 mirrors.tuna.tsinghua.edu.cn : The requested URL returned error: 403 获取文件
……
警告:无法获取某些文件
错误:无法提交处理 (无法获取某些文件)
发生错误,没有软件包被更新。
-> error installing repo packages

强制安装同样失败

1
2
3
4
5
6
sudo pacman -Syyu
:: 正在同步软件包数据库...
……
archlinuxcn.db下载失败
错误:无法从 mirrors.tuna.tsinghua.edu.cn : Resolving timed out after 10000 milliseconds 获取文件 'archlinuxcn.db'
错误:未能同步所有数据库(下载数据库出错)

决定删除报错的软件包再整体更新

1
sudo pacman -Rns ……

删除后更新成功

重新检查,怀疑是在 pacman -Syu 更新时调用缓存,但是缓存已过期或者正在尝试安装版本已更新且本地缓存中存在旧链接的软件包,收到先前的错误

清个缓存

1
2
3
4
5
6
7
8
9
10
11
12
sudo pacman -Sc
[sudo] krismile 的密码:.
要保留的软件包:
所有本地安装的软件包

缓存目录:/var/cache/pacman/pkg/
:: 您想从缓存中删除所有其他的软件包吗? [Y/n] y
正在从缓存中删除旧软件包...

数据库目录:/var/lib/pacman/
:: 打算删除无用的软件库? [Y/n]
正在删除未用的同步仓库...

但是单独安装这些包依旧失败,所以最后只是认为镜像源中没有这些软件包(镜像源问题

发现在 /etc/pacman.conf 里面有

1
2
[archlinuxcn]
Server = https://mirrors.tuna.tsinghua.edu.cn/archlinuxcn/$arch

是导致使用清华源下载的原因

改用中科大源

1
Server = https://mirrors.ustc.edu.cn/archlinuxcn/$arch

更新数据库

1
sudo pacman -Syy

下载先前未能下载的软件包……下载成功