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

也就是说,只要官方源里有同名包,通常优先使用官方源。第三方源只有在前面的源没有同名包时,才会参与选择。

因此,不能简单看到某个包在 archlinuxcnarch4edu 中存在,就直接判断它是从这个第三方源安装的。


二、区分“软件来源”和“包来源”

整理过程中首先需要区分几个概念:

软件上游来源
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 来说,软件源并不是越多越好。
更好的结构是:必要、清楚、优先级明确、镜像线路适合当前网络环境。

Leave a Reply

Your email address will not be published. Required fields are marked *