Busybox wget 的 User-Agent 不被 mirrors.ustc.edu.cn 接受

之前 透明代理多个镜像源 的设想是用 DNS 重定向的方式,把包管理器的 HTTP 请求转发到自己的 nginx 上,然后重新分发到中国大陆的镜像。其中一个比较稳定且快速的就是 USTC - 中国科学技术大学开源软件镜像 mirrors.ustc.edu.cn

这个方子之前还挺好的,直到几个月前,Proxmox VE Helper-Scripts 添加了一个功能 core: harden shell scripts against injection and insecure permissions 作者:MickLesk · 拉取请求 #13239 · community-scripts/ProxmoxVE,把默认的 http repository 的网址改成了 https。因为没有办法绕过 TLS 的证书验证,也就没有办法去重定向了。

好在后续还有一个 PR core: APT/APK Mirror Fallback for CDN Failures 作者:MickLesk · 拉取请求 #13316 · community-scripts/ProxmoxVE,添加了一些 HTTP 的镜像,在失败的时候使用。我们可以主动使用 Ctrl+C 来触发中断,切换到使用镜像的代码逻辑。

我发现使用 busybox 的 wget 请求中科大的镜像时会返回 403,导致这个镜像全部都没有用。而在其他系统中使用 curl 或 wget 能够正常获得 200 响应。

实际问题出现在 busybox 中,wget 使用的 User-Agent: Wget,被中科大拦截导致返回了 403。

我找到了相关的 Issue wget 返回 403 · 议题 #479 · ustclug/discussions,说是防恶意流量。
wget -U wget. 只要是非 wget 字面量就能绕过,但 Proxmox VE Helper-Scripts 的脚本改不了。

好在其它 ZJU - 浙江大学开源软件镜像站 mirrors.zju.edu.cn 没这个限制,切换过去。

另外使用 fa1seut0pia/mirror-speed-test: 一个面向开发环境的镜像源测速与配置工具,支持常见镜像的下载速度测试。 测速,发现 mirrors.aliyun.com 虽然是最快的,但 apk 安装时提示 package integrity error,mirrors.huaweicloud.com 没这毛病,估计是同步出了偏差。

Proxmox VE Helper-Scripts 的 Alpine LXC 容器安装后需要打的补丁

目前安装脚本还有些不足:

apk del bash newt curl openssh nano mc ncurses jq
 
apk add tzdata
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
echo "Asia/Shanghai" > /etc/timezone