问题描述
1. Arch的换源操作不是幂等
chsrc set arch <源> 每次都会向 /etc/pacman.d/mirrorlist 追加(prepend)新的 Server 行,但从不清理旧行。多次换源后 mirrorlist 会累积所有历史源,例如:
chsrc set arch tuna → mirrorlist 写入 tuna 行
chsrc set arch ali → mirrorlist 写入 ali 行(tuna 行仍在)
chsrc set arch tencent → mirrorlist 写入 tencent 行(tuna、ali 行仍在)
结果:mirrorlist 中出现多行 Server,且最先命中的可能是旧源(行为不可预期);累积行数随换源次数线性增长,文件越来越脏。这不是幂等操作,重复执行同一操作结果不同。
修复:实现换源的幂等操作,仅对 x86_64 有效。
2. 官方源地址 https://repo.archlinux.org 实际不存在
arch dish 的 UpstreamProvider(即 chsrc set arch upstream)地址为 https://repo.archlinux.org,但该域名不存在:
- 本机
curl -I https://repo.archlinux.org 提示 curl: (6) Could not resolve host: repo.archlinux.org。
- 在线DNS检测,这个地址没有任何A记录
- Arch 官方全局 mirrorlist 中无此条目。
- 官方推荐入口是
geo.mirror.pkgbuild.com(按地理位置自动选最近镜像)/ fastly.mirror.pkgbuild.com
因此任何用户执行 chsrc set arch upstream ,会报 致命错误,且chsrc reset arch不可用,提示 暂未实现reset。
关联
已尝试实现修复并实测验证,具体见关联 PR #394
问题描述
1. Arch的换源操作不是幂等
chsrc set arch <源>每次都会向/etc/pacman.d/mirrorlist追加(prepend)新的 Server 行,但从不清理旧行。多次换源后 mirrorlist 会累积所有历史源,例如:chsrc set arch tuna→ mirrorlist 写入 tuna 行chsrc set arch ali→ mirrorlist 写入 ali 行(tuna 行仍在)chsrc set arch tencent→ mirrorlist 写入 tencent 行(tuna、ali 行仍在)结果:mirrorlist 中出现多行 Server,且最先命中的可能是旧源(行为不可预期);累积行数随换源次数线性增长,文件越来越脏。这不是幂等操作,重复执行同一操作结果不同。
修复:实现换源的幂等操作,仅对 x86_64 有效。
2. 官方源地址
https://repo.archlinux.org实际不存在arch dish 的 UpstreamProvider(即
chsrc set arch upstream)地址为https://repo.archlinux.org,但该域名不存在:curl -I https://repo.archlinux.org提示curl: (6) Could not resolve host: repo.archlinux.org。geo.mirror.pkgbuild.com(按地理位置自动选最近镜像)/fastly.mirror.pkgbuild.com因此任何用户执行
chsrc set arch upstream,会报致命错误,且chsrc reset arch不可用,提示暂未实现reset。关联
已尝试实现修复并实测验证,具体见关联 PR #394