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 容器安装后需要打的补丁
目前安装脚本还有些不足:
- ssh 用的 openssh 而不是 dropbear,并且默认安装
- 默认安装 bash newt curl openssh nano mc ncurses jq
- 没配置时区
以前都是手动整个仓库来替代的 enihsyou/ProxmoxVE: Proxmox VE Helper-Scripts (Community Edition) ,现在上游变化较大,还是后置处理。
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