代理增加

This commit is contained in:
2025-12-03 18:37:30 +08:00
parent 14a2a52fc6
commit 32a6a74851

View File

@@ -712,6 +712,71 @@ build_from_source() {
sudo git config --global --add safe.directory "$SOURCE_DIR" 2>/dev/null || true
git config --global --add safe.directory "$SOURCE_DIR" 2>/dev/null || true
# 配置 Git 使用代理(加速 GitHub 访问)
echo -e "${BLUE}配置 Git 代理(加速 GitHub 访问)...${NC}"
# GitHub 代理镜像列表(按优先级排序)
GITHUB_PROXIES=(
"https://gh-proxy.com"
"https://githubproxy.cc"
"https://ghproxy.com"
"https://mirror.ghproxy.com"
"https://github.com.cnpmjs.org"
)
# 测试并选择可用的 GitHub 代理
GITHUB_PROXY=""
for proxy in "${GITHUB_PROXIES[@]}"; do
echo -n " 测试 ${proxy}... "
# 测试代理是否可用(尝试访问 GitHub 主页)
if curl -sf --connect-timeout 3 --max-time 5 "${proxy}/https://github.com" > /dev/null 2>&1 || \
curl -sf --connect-timeout 3 --max-time 5 "${proxy}" > /dev/null 2>&1; then
GITHUB_PROXY="$proxy"
echo -e "${GREEN}可用${NC}"
break
else
echo -e "${RED}不可用${NC}"
fi
done
if [ -n "$GITHUB_PROXY" ]; then
# 配置 Git 使用代理
echo -e "${GREEN}✓ 使用 GitHub 代理: ${GITHUB_PROXY}${NC}"
# 根据不同的代理服务配置不同的 URL 格式
if echo "$GITHUB_PROXY" | grep -q "gh-proxy.com\|githubproxy.cc"; then
# gh-proxy.com 和 githubproxy.cc 使用 /https://github.com/ 格式
GIT_PROXY_URL="${GITHUB_PROXY}/https://github.com/"
sudo git config --global url."${GIT_PROXY_URL}".insteadOf "https://github.com/" 2>/dev/null || true
git config --global url."${GIT_PROXY_URL}".insteadOf "https://github.com/" 2>/dev/null || true
# 配置 Git HTTP/HTTPS 代理
sudo git config --global http.https://github.com.proxy "${GITHUB_PROXY}/" 2>/dev/null || true
git config --global http.https://github.com.proxy "${GITHUB_PROXY}/" 2>/dev/null || true
else
# 其他代理使用标准格式
sudo git config --global url."${GITHUB_PROXY}/https://github.com/".insteadOf "https://github.com/" 2>/dev/null || true
git config --global url."${GITHUB_PROXY}/https://github.com/".insteadOf "https://github.com/" 2>/dev/null || true
sudo git config --global http.https://github.com.proxy "${GITHUB_PROXY}/" 2>/dev/null || true
git config --global http.https://github.com.proxy "${GITHUB_PROXY}/" 2>/dev/null || true
fi
# 设置环境变量(供 Go 使用)
export HTTP_PROXY="${GITHUB_PROXY}/"
export HTTPS_PROXY="${GITHUB_PROXY}/"
export http_proxy="${GITHUB_PROXY}/"
export https_proxy="${GITHUB_PROXY}/"
# 添加到 Go 环境变量中
GO_ENV="$GO_ENV HTTP_PROXY=${GITHUB_PROXY}/ HTTPS_PROXY=${GITHUB_PROXY}/ http_proxy=${GITHUB_PROXY}/ https_proxy=${GITHUB_PROXY}/"
echo -e "${BLUE}已配置 Git 和 Go 使用 GitHub 代理加速${NC}"
else
echo -e "${YELLOW}⚠ 未找到可用的 GitHub 代理,将直接访问 GitHub${NC}"
echo -e "${YELLOW}提示: 如果 GitHub 访问慢,可以手动设置代理${NC}"
fi
# 配置 Go 代理(使用国内镜像)
echo -e "${BLUE}配置 Go 代理(使用国内镜像加速)...${NC}"
# Go 代理镜像列表(按优先级排序,使用多个镜像以提高成功率)
@@ -760,7 +825,7 @@ build_from_source() {
# 禁用 GOSUMDB 以避免连接 proxy.golang.org在中国大陆通常无法访问
# 如果必须启用校验和,可以使用 GOSUMDB=sum.golang.google.cn但可能仍有问题
GO_ENV="$GO_PATH_ENV GOPROXY=${GO_PROXY} GOSUMDB=off GOTIMEOUT=300 GOPRIVATE=*"
GO_ENV="$GO_PATH_ENV GOPROXY=${GO_PROXY} GOSUMDB=off GOTIMEOUT=60 GONOPROXY= GONOSUMDB= GOPRIVATE=*"
# 使用 go env -w 永久设置环境变量(避免被其他配置覆盖)
echo -e "${BLUE}永久设置 Go 环境变量(避免连接 proxy.golang.org...${NC}"
@@ -783,7 +848,7 @@ build_from_source() {
echo -e "${YELLOW}正在强制移除 proxy.golang.org...${NC}"
CLEAN_PROXY=$(echo "$ACTUAL_GOPROXY" | sed 's|https://proxy.golang.org,||g' | sed 's|,https://proxy.golang.org||g' | sed 's|https://proxy.golang.org||g')
GO_PROXY="$CLEAN_PROXY"
GO_ENV="$GO_PATH_ENV GOPROXY=${GO_PROXY} GOSUMDB=off GOTIMEOUT=300 GOPRIVATE=*"
GO_ENV="$GO_PATH_ENV GOPROXY=${GO_PROXY} GOSUMDB=off GOTIMEOUT=60 GONOPROXY= GONOSUMDB= GOPRIVATE=*"
sudo bash -c "cd '$SOURCE_DIR' && $GO_PATH_ENV && go env -w GOPROXY=${GO_PROXY}" 2>/dev/null || true
echo -e "${GREEN}✓ 已更新 GOPROXY: ${GO_PROXY}${NC}"
fi
@@ -819,10 +884,13 @@ build_from_source() {
DOWNLOAD_LOG="/tmp/go_download_$$.log"
DOWNLOAD_PROGRESS_LOG="/tmp/go_progress_$$.log"
# 在下载前再次确认环境变量设置
# 在下载前再次确认环境变量设置(强制所有包都通过代理)
sudo bash -c "cd '$SOURCE_DIR' && $GO_PATH_ENV && go env -w GOPROXY=${GO_PROXY}" 2>/dev/null || true
sudo bash -c "cd '$SOURCE_DIR' && $GO_PATH_ENV && go env -w GOSUMDB=off" 2>/dev/null || true
sudo bash -c "cd '$SOURCE_DIR' && $GO_PATH_ENV && go env -w GONOPROXY=" 2>/dev/null || true
sudo bash -c "cd '$SOURCE_DIR' && $GO_PATH_ENV && go env -w GONOSUMDB=" 2>/dev/null || true
sudo bash -c "cd '$SOURCE_DIR' && $GO_PATH_ENV && go env -w GOPRIVATE=*" 2>/dev/null || true
sudo bash -c "cd '$SOURCE_DIR' && $GO_PATH_ENV && go env -w GOTIMEOUT=60" 2>/dev/null || true
# 使用命名管道来实时监控输出
PIPE_FILE="/tmp/go_download_pipe_$$"
@@ -875,7 +943,16 @@ build_from_source() {
PROGRESS_PID=$!
# 使用 -x 标志下载,显示详细输出,同时写入日志和管道
if sudo bash -c "cd '$SOURCE_DIR' && $GO_ENV && timeout 600 go mod download -x" 2>&1 | tee "$DOWNLOAD_LOG" "$PIPE_FILE"; then
# 设置较短的超时时间,避免长时间卡住
echo -e "${BLUE}开始下载超时时间300秒...${NC}"
# 确保环境变量中包含代理设置
if [ -n "$GITHUB_PROXY" ]; then
GO_ENV="$GO_ENV HTTP_PROXY=${GITHUB_PROXY}/ HTTPS_PROXY=${GITHUB_PROXY}/ http_proxy=${GITHUB_PROXY}/ https_proxy=${GITHUB_PROXY}/"
fi
# 使用 timeout 命令设置总超时时间
if timeout 300 sudo bash -c "cd '$SOURCE_DIR' && $GO_ENV && go mod download -x" 2>&1 | tee "$DOWNLOAD_LOG" "$PIPE_FILE"; then
# 停止进度显示进程
touch "${DOWNLOAD_PROGRESS_LOG}.done"
sleep 2
@@ -919,7 +996,7 @@ build_from_source() {
# 清理管道文件
rm -f "$PIPE_FILE" 2>/dev/null || true
DOWNLOAD_EXIT_CODE=$?
DOWNLOAD_EXIT_CODE=${DOWNLOAD_EXIT_CODE:-$?}
DOWNLOAD_END_TIME=$(date +%s)
DOWNLOAD_DURATION=$((DOWNLOAD_END_TIME - DOWNLOAD_START_TIME))
@@ -941,7 +1018,20 @@ build_from_source() {
echo -e "${YELLOW}尝试使用 direct 模式(直接从 GitHub/GitLab 等下载)...${NC}"
# 如果失败,尝试使用 direct 模式,直接从源码仓库下载
# 注意:不使用 proxy.golang.org因为在中国大陆无法访问
GO_ENV="$GO_PATH_ENV GOPROXY=direct GOSUMDB=off GOTIMEOUT=300"
GO_ENV="$GO_PATH_ENV GOPROXY=direct GOSUMDB=off GOTIMEOUT=60 GONOPROXY= GONOSUMDB= GOPRIVATE=*"
# 如果配置了 GitHub 代理,添加到环境变量
if [ -n "$GITHUB_PROXY" ]; then
GO_ENV="$GO_ENV HTTP_PROXY=${GITHUB_PROXY}/ HTTPS_PROXY=${GITHUB_PROXY}/ http_proxy=${GITHUB_PROXY}/ https_proxy=${GITHUB_PROXY}/"
fi
# 重新设置环境变量
sudo bash -c "cd '$SOURCE_DIR' && $GO_PATH_ENV && go env -w GOPROXY=direct" 2>/dev/null || true
sudo bash -c "cd '$SOURCE_DIR' && $GO_PATH_ENV && go env -w GOSUMDB=off" 2>/dev/null || true
sudo bash -c "cd '$SOURCE_DIR' && $GO_PATH_ENV && go env -w GONOPROXY=" 2>/dev/null || true
sudo bash -c "cd '$SOURCE_DIR' && $GO_PATH_ENV && go env -w GONOSUMDB=" 2>/dev/null || true
sudo bash -c "cd '$SOURCE_DIR' && $GO_PATH_ENV && go env -w GOPRIVATE=*" 2>/dev/null || true
sudo bash -c "cd '$SOURCE_DIR' && $GO_PATH_ENV && go env -w GOTIMEOUT=60" 2>/dev/null || true
# 重新启动进度显示
(