From aa65ad32b545ee79d2a710da0e93a61b0d820041 Mon Sep 17 00:00:00 2001 From: yoyo Date: Wed, 3 Dec 2025 18:16:16 +0800 Subject: [PATCH] =?UTF-8?q?1=E4=BB=A3=E7=90=86=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- install.sh | 49 ++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 44 insertions(+), 5 deletions(-) diff --git a/install.sh b/install.sh index 5c476a1..520ff58 100755 --- a/install.sh +++ b/install.sh @@ -762,19 +762,53 @@ build_from_source() { # 禁用 GOSUMDB 以避免连接 proxy.golang.org(在中国大陆通常无法访问) # 如果必须启用校验和,可以使用 GOSUMDB=sum.golang.google.cn,但可能仍有问题 - GO_ENV="$GO_PATH_ENV GOPROXY=${GO_PROXY} GOSUMDB=off GOTIMEOUT=300" + GO_ENV="$GO_PATH_ENV GOPROXY=${GO_PROXY} GOSUMDB=off GOTIMEOUT=300 GOPRIVATE=*" - # 显示当前 Go 环境信息 + # 使用 go env -w 永久设置环境变量(避免被其他配置覆盖) + echo -e "${BLUE}永久设置 Go 环境变量(避免连接 proxy.golang.org)...${NC}" + 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 GOPRIVATE=*" 2>/dev/null || true + + # 显示当前 Go 环境信息(验证设置是否生效) echo -e "${BLUE}Go 环境信息:${NC}" - echo -e "${BLUE} GOPROXY=${GO_PROXY}${NC}" - echo -e "${BLUE} GOSUMDB=off (已禁用,避免连接 proxy.golang.org)${NC}" - sudo bash -c "cd '$SOURCE_DIR' && $GO_ENV && go env GOPROXY GOSUMDB" || true + echo -e "${BLUE} 设置的 GOPROXY=${GO_PROXY}${NC}" + echo -e "${BLUE} 设置的 GOSUMDB=off (已禁用,避免连接 proxy.golang.org)${NC}" + echo -e "${BLUE} 实际生效的环境变量:${NC}" + sudo bash -c "cd '$SOURCE_DIR' && $GO_ENV && go env GOPROXY GOSUMDB GOPRIVATE" || true echo "" + # 验证是否仍然会连接 proxy.golang.org + ACTUAL_GOPROXY=$(sudo bash -c "cd '$SOURCE_DIR' && $GO_ENV && go env GOPROXY" 2>/dev/null || echo "") + if echo "$ACTUAL_GOPROXY" | grep -q "proxy.golang.org"; then + echo -e "${RED}⚠ 警告: 检测到 GOPROXY 仍包含 proxy.golang.org${NC}" + 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=*" + 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 + # 先尝试整理依赖(显示详细信息) echo -e "${BLUE}整理 Go 模块依赖...${NC}" + # 再次确认环境变量(防止被覆盖) + 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 GOPRIVATE=*" 2>/dev/null || true + if ! sudo bash -c "cd '$SOURCE_DIR' && $GO_ENV && go mod tidy -v" 2>&1; then echo -e "${YELLOW}⚠ go mod tidy 失败,继续尝试下载依赖...${NC}" + # 检查错误日志中是否包含 proxy.golang.org + TIDY_LOG=$(sudo bash -c "cd '$SOURCE_DIR' && $GO_ENV && go mod tidy -v" 2>&1 || true) + if echo "$TIDY_LOG" | grep -q "proxy.golang.org"; then + echo -e "${RED}错误: 检测到仍尝试连接 proxy.golang.org${NC}" + echo -e "${YELLOW}尝试清理 Go 模块缓存并重新设置...${NC}" + sudo bash -c "cd '$SOURCE_DIR' && $GO_PATH_ENV && go clean -modcache" 2>/dev/null || true + 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 GOPRIVATE=*" 2>/dev/null || true + fi fi # 下载依赖(显示详细进度) @@ -788,6 +822,11 @@ build_from_source() { # 使用 -x 显示详细执行过程 echo -e "${BLUE}正在下载依赖包,显示详细进度...${NC}" + # 在下载前再次确认环境变量设置 + 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 GOPRIVATE=*" 2>/dev/null || true + if sudo bash -c "cd '$SOURCE_DIR' && $GO_ENV && timeout 600 go mod download -x" > "$DOWNLOAD_LOG" 2>&1; then DOWNLOAD_END_TIME=$(date +%s) DOWNLOAD_DURATION=$((DOWNLOAD_END_TIME - DOWNLOAD_START_TIME))