Arch Linux 的软件管理非常灵活,但正因为灵活,系统里一旦启用了多个第三方仓库,就容易出现几个问题:
- 某个软件到底来自哪个源?
- 第三方源是不是覆盖了官方源?
- 同一个包在多个仓库都有时,pacman 会选哪个?
- 更新速度慢,是软件源本身的问题,还是镜像服务器的问题?
- 某些第三方源是否真的还有必要保留?
这次整理的核心,就是围绕 pacman.conf 中的第三方源进行排查、分析和优化,最终把系统源结构从“能用但不清楚”,整理成“官方源优先、第三方源必要保留、镜像线路更合理”的状态。
一、先确认当前启用的软件源结构
Arch Linux 的软件源配置位于:
/etc/pacman.conf
典型结构如下:
[core]
Include = /etc/pacman.d/mirrorlist
[extra]
Include = /etc/pacman.d/mirrorlist
[multilib]
Include = /etc/pacman.d/mirrorlist
[archlinuxcn]
SigLevel = Optional TrustedOnly
Server = https://mirrors.xtom.jp/archlinuxcn/$arch
[arch4edu]
SigLevel = Required DatabaseOptional TrustedOnly
Server = https://repository.arch4edu.org/$arch
这里最重要的是顺序。
pacman 在查找同名包时,会按照仓库顺序决定优先级。当前结构中,优先级大致是:
core > extra > multilib > archlinuxcn > arch4edu
也就是说,只要官方源里有同名包,通常优先使用官方源。第三方源只有在前面的源没有同名包时,才会参与选择。
因此,不能简单看到某个包在 archlinuxcn 或 arch4edu 中存在,就直接判断它是从这个第三方源安装的。
二、区分“软件来源”和“包来源”
整理过程中首先需要区分几个概念:
软件上游来源
Arch 官方源
AUR 包
第三方预编译仓库
当前 pacman 可见仓库
下载镜像服务器
例如 Brave 浏览器:
软件上游:Brave 官方
Arch 官方源:没有 brave-bin
AUR:有 brave-bin
archlinuxcn:提供 brave-bin 的预编译包
镜像服务器:负责下载这个包
所以不能说:
Brave 来自某个第三方镜像站
更准确的说法应该是:
Brave 软件来自 Brave 官方;
brave-bin 是 Arch 生态中的第三方打包形式;
archlinuxcn 提供了可由 pacman 直接安装的预编译包;
镜像站只是下载入口。
这个区别非常关键。
否则很容易把“软件开发者”“Arch 打包者”“第三方仓库”“镜像服务器”混为一谈。
三、查看哪些包在 archlinuxcn 中存在
可以用下面命令查看当前系统中,哪些已安装包也存在于 archlinuxcn 仓库:
pacman -Sl archlinuxcn | grep '\[installed'
或者只输出包名:
pacman -Sl archlinuxcn | awk '/\[installed/ {print $2}'
这类命令的含义是:
本地已安装这个包,并且 archlinuxcn 仓库中也存在同名包。
但这并不等于:
这个包一定是从 archlinuxcn 安装的。
因为如果官方源也有同名包,而且官方源排在前面,那么 pacman 默认仍然优先官方源。
更准确的判断方式是排除官方源中也存在的包。
例如,查找“已安装、archlinuxcn 有、但官方源没有”的包:
comm -23 \
<(comm -12 <(pacman -Qq | sort) <(pacman -Slq archlinuxcn | sort)) \
<(pacman -Slq core extra multilib | sort)
如果只想看显式安装的包:
comm -23 \
<(comm -12 <(pacman -Qeq | sort) <(pacman -Slq archlinuxcn | sort)) \
<(pacman -Slq core extra multilib | sort)
这样得到的结果,才更接近“真正依赖 archlinuxcn 提供的包”。
四、archlinuxcn 的定位
archlinuxcn 是 Arch Linux 中文社区维护的非官方二进制仓库。
它不是:
Arch 官方源
软件上游
AUR 官方二进制版
全球 Arch 用户默认启用的源
它更像是:
中文社区维护的第三方预编译仓库
它的作用主要是提供一些官方源没有的软件包,或者将部分常见 AUR 包预编译成 pacman 可以直接安装、升级的二进制包。
常见例子包括:
brave-bin
joplin-desktop
onlyoffice-bin
zotero-bin
rustdesk
rstudio-desktop-bin
v2raya
yay
保留它的好处是:
不用手动编译一批 AUR 软件
不用把桌面应用全部迁移到 Flatpak / AppImage
pacman 可以统一管理更新
风险边界也很清楚:
它不是官方源;
但也不是随机个人源;
它是长期存在的社区仓库;
是否使用,取决于对第三方预编译包的信任程度。
五、镜像服务器才是速度问题的关键
最初 archlinuxcn 使用的是中国大陆 USTC 镜像:
Server = https://mirrors.ustc.edu.cn/archlinuxcn/$arch
在海外网络环境下,这类跨境线路可能出现速度慢、不稳定的问题。表现为同步数据库时速度很低,甚至偶尔卡顿。
但这不代表 archlinuxcn 本身有问题。
真正的问题是镜像线路不适合当前网络位置。
后来将 archlinuxcn 改为日本 xTom 镜像:
[archlinuxcn]
SigLevel = Optional TrustedOnly
Server = https://mirrors.xtom.jp/archlinuxcn/$arch
修改后同步速度明显提升:
archlinuxcn 1355.6 KiB 4.46 MiB/s
这说明问题本质是:
镜像服务器地理位置和网络线路不合适
而不是软件源本身不可用。
六、arch4edu 也改为非中国大陆镜像
arch4edu 原来使用的是清华 TUNA 镜像:
Server = https://mirrors.tuna.tsinghua.edu.cn/arch4edu/$arch
同样,由于网络位置原因,这类中国大陆镜像在海外使用时可能不稳定。
后来改为 arch4edu 的 Global 主站:
[arch4edu]
SigLevel = Required DatabaseOptional TrustedOnly
Server = https://repository.arch4edu.org/$arch
修改后同步速度也变得正常:
arch4edu 236.6 KiB 1201 KiB/s
arch4edu 当前主要用于部分第三方软件或特殊包,例如:
makemkv
microsoft-edge-stable-bin
openboard
zoom
firmware 类包
由于它排在 archlinuxcn 后面,所以只有当前面仓库没有同名包时,它才会参与包选择。
七、alerque 源确认无价值并停用
另一个需要检查的是 alerque 源。
通过命令确认,在当前系统里,真正只和 alerque 有关的包只有:
google-chrome
检查命令类似:
comm -23 \
<(comm -12 <(pacman -Qq | sort) <(pacman -Slq alerque | sort)) \
<(pacman -Slq core extra multilib archlinuxcn arch4edu | sort)
结果显示:
google-chrome
但同步时又出现提示:
warning: google-chrome: local (...) is newer than alerque (...)
这说明本地 google-chrome 版本比 alerque 仓库里的版本还新。
也就是说,alerque 不但没有提供实际更新价值,反而造成版本落后提醒。
因此最终停用:
#[alerque]
#SigLevel = Required DatabaseOptional TrustedOnly
#Server = https://arch.alerque.com/$arch
停用后,alerque 不再参与同步,相关警告也会消失。
八、最终 pacman.conf 结构
整理后的第三方源部分可以写成:
#
# Unofficial repositories
#
# 启用 archlinuxcn,放在官方源后面。
# 主要用于官方源没有的第三方预编译包。
# 使用 xTom 日本镜像,当前网络环境下速度较好。
[archlinuxcn]
SigLevel = Optional TrustedOnly
Server = https://mirrors.xtom.jp/archlinuxcn/$arch
# 启用 arch4edu,放在 archlinuxcn 后面。
# 仅在前面仓库没有同名包时才会参与包选择。
# 不使用中国大陆镜像,改用 arch4edu Global 主站。
[arch4edu]
SigLevel = Required DatabaseOptional TrustedOnly
Server = https://repository.arch4edu.org/$arch
# alerque:停用。
# 当前仅对 google-chrome 有意义,而且版本落后,不建议保留。
#[alerque]
#SigLevel = Required DatabaseOptional TrustedOnly
#Server = https://arch.alerque.com/$arch
最终结构为:
core 启用
extra 启用
multilib 启用
archlinuxcn 启用,使用日本镜像
arch4edu 启用,使用 Global 主站
alerque 停用
优先级为:
core > extra > multilib > archlinuxcn > arch4edu
这套结构的特点是:
官方源优先
必要第三方源保留
低价值源停用
避免不稳定镜像
第三方软件仍可由 pacman 统一管理
九、更新检查结果
修改完成后执行:
sudo pacman -Syyu
同步结果正常:
core
extra
multilib
archlinuxcn
arch4edu
不再出现:
alerque
最终结果:
there is nothing to do
说明 pacman 层面已经干净。
然后检查 AUR:
yay -Sua
结果:
there is nothing to do
只有某些 AUR 包可能被标记为过期,但没有实际可更新内容。这不是系统错误。
再检查 Flatpak:
flatpak update
结果:
Nothing to do.
只有某个应用依赖的旧 KDE runtime 提示 EOL,这属于应用维护和 runtime 迁移问题,不是系统源配置问题。
十、日常维护命令
日常更新推荐使用:
sudo pacman -Syu
yay -Sua
flatpak update
不需要每次都使用:
sudo pacman -Syyu
-Syyu 是强制刷新数据库,适合以下情况:
刚更换镜像
刚启用或停用仓库
数据库疑似异常
源同步状态混乱
平时正常更新用 -Syu 即可。
总结
这次整理的重点不是单纯“换一个软件源”,而是重新理清了 Arch Linux 中几个容易混淆的层级:
软件上游
Arch 官方源
AUR
第三方预编译仓库
镜像服务器
pacman 仓库优先级
最终解决的问题包括:
确认第三方源中哪些包真正有意义
区分“仓库中存在”与“实际来自该仓库”
保留 archlinuxcn,但改用日本镜像
保留 arch4edu,但改用非中国大陆镜像
停用低价值的 alerque 源
保持官方源优先
让 pacman / yay / flatpak 更新状态全部干净
整理后的系统更接近一种长期可维护状态:
官方源负责系统基础
archlinuxcn 负责常用第三方预编译包
arch4edu 负责少量补充软件
AUR 和 Flatpak 作为辅助
低价值、不稳定、版本落后的源不再启用
对于 Arch Linux 来说,软件源并不是越多越好。
更好的结构是:必要、清楚、优先级明确、镜像线路适合当前网络环境。