diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..6bdce3d Binary files /dev/null and b/.DS_Store differ diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c7ec943 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +test.log diff --git a/install.sh b/install.sh index b216b90..1bd0f4c 100755 --- a/install.sh +++ b/install.sh @@ -768,9 +768,25 @@ build_from_source() { export http_proxy="${GITHUB_PROXY}/" export https_proxy="${GITHUB_PROXY}/" + # 配置 Git 重写 golang.org 和 google.golang.org 的 URL(通过 GitHub 代理) + # golang.org/x/* 包在 GitHub 上的镜像路径是 github.com/golang/x-* + # 例如:golang.org/x/net -> github.com/golang/net + sudo git config --global url."${GITHUB_PROXY}/https://github.com/golang/".insteadOf "https://golang.org/x/" 2>/dev/null || true + git config --global url."${GITHUB_PROXY}/https://github.com/golang/".insteadOf "https://golang.org/x/" 2>/dev/null || true + + # google.golang.org 也可以通过 GitHub 代理 + # 例如:google.golang.org/protobuf -> github.com/protocolbuffers/protobuf-go + sudo git config --global url."${GITHUB_PROXY}/https://github.com/protocolbuffers/".insteadOf "https://google.golang.org/protobuf" 2>/dev/null || true + git config --global url."${GITHUB_PROXY}/https://github.com/protocolbuffers/".insteadOf "https://google.golang.org/protobuf" 2>/dev/null || true + + # 设置环境变量,让 Go 通过代理访问这些域名 + # 注意:这需要 Go 支持 HTTP_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}已配置 golang.org 和 google.golang.org 通过 GitHub 代理访问${NC}" + echo -e "${BLUE}已配置 Git 和 Go 使用 GitHub 代理加速${NC}" else echo -e "${YELLOW}⚠ 未找到可用的 GitHub 代理,将直接访问 GitHub${NC}" @@ -825,7 +841,12 @@ build_from_source() { # 禁用 GOSUMDB 以避免连接 proxy.golang.org(在中国大陆通常无法访问) # 如果必须启用校验和,可以使用 GOSUMDB=sum.golang.google.cn,但可能仍有问题 - GO_ENV="$GO_PATH_ENV GOPROXY=${GO_PROXY} GOSUMDB=off GOTIMEOUT=60 GONOPROXY= GONOSUMDB= GOPRIVATE=*" + # 如果配置了 GitHub 代理,添加到环境变量中 + if [ -n "$GITHUB_PROXY" ]; then + GO_ENV="$GO_PATH_ENV GOPROXY=${GO_PROXY} GOSUMDB=off GOTIMEOUT=60 GONOPROXY= GONOSUMDB= GOPRIVATE=* HTTP_PROXY=${GITHUB_PROXY}/ HTTPS_PROXY=${GITHUB_PROXY}/ http_proxy=${GITHUB_PROXY}/ https_proxy=${GITHUB_PROXY}/" + else + GO_ENV="$GO_PATH_ENV GOPROXY=${GO_PROXY} GOSUMDB=off GOTIMEOUT=60 GONOPROXY= GONOSUMDB= GOPRIVATE=*" + fi # 使用 go env -w 永久设置环境变量(避免被其他配置覆盖) echo -e "${BLUE}永久设置 Go 环境变量(避免连接 proxy.golang.org)...${NC}" @@ -965,9 +986,13 @@ build_from_source() { DOWNLOAD_END_TIME=$(date +%s) DOWNLOAD_DURATION=$((DOWNLOAD_END_TIME - DOWNLOAD_START_TIME)) - # 统计下载信息(从输出中统计) - TOTAL_PACKAGES=$(grep -c "go: downloading" "$DOWNLOAD_LOG" 2>/dev/null || echo "0") - SUCCESS_COUNT=$(grep -c "go: downloading" "$DOWNLOAD_LOG" 2>/dev/null || echo "0") + # 统计下载信息(从输出中统计,去除换行符) + TOTAL_PACKAGES=$(grep -c "go: downloading" "$DOWNLOAD_LOG" 2>/dev/null | tr -d '\n' || echo "0") + SUCCESS_COUNT=$(grep -c "go: downloading" "$DOWNLOAD_LOG" 2>/dev/null | tr -d '\n' || echo "0") + + # 确保是数字 + TOTAL_PACKAGES=${TOTAL_PACKAGES:-0} + SUCCESS_COUNT=${SUCCESS_COUNT:-0} echo "" echo -e "${GREEN}✓ 依赖下载完成${NC}" @@ -976,7 +1001,7 @@ build_from_source() { echo -e " 成功下载: ${GREEN}${SUCCESS_COUNT}${NC}" echo -e " 总耗时: ${GREEN}${DOWNLOAD_DURATION}${NC}秒" - if [ "$DOWNLOAD_DURATION" -gt 0 ] && [ "$SUCCESS_COUNT" -gt 0 ]; then + if [ "$DOWNLOAD_DURATION" -gt 0 ] && [ "$SUCCESS_COUNT" -gt 0 ] 2>/dev/null; then AVG_SPEED=$(echo "scale=2; $SUCCESS_COUNT / $DOWNLOAD_DURATION" | bc 2>/dev/null || echo "0") echo -e " 平均速度: ${GREEN}${AVG_SPEED}${NC} 包/秒" fi @@ -1000,8 +1025,9 @@ build_from_source() { DOWNLOAD_END_TIME=$(date +%s) DOWNLOAD_DURATION=$((DOWNLOAD_END_TIME - DOWNLOAD_START_TIME)) - # 统计已下载的包 - DOWNLOADED_COUNT=$(grep -c "go: downloading" "$DOWNLOAD_LOG" 2>/dev/null || echo "0") + # 统计已下载的包(去除换行符) + DOWNLOADED_COUNT=$(grep -c "go: downloading" "$DOWNLOAD_LOG" 2>/dev/null | tr -d '\n' || echo "0") + DOWNLOADED_COUNT=${DOWNLOADED_COUNT:-0} if [ "$DOWNLOAD_EXIT_CODE" = "124" ]; then echo "" @@ -1116,18 +1142,23 @@ build_from_source() { kill "$PROGRESS_PID2" 2>/dev/null || true wait "$PROGRESS_PID2" 2>/dev/null || true rm -f "$PIPE_FILE" 2>/dev/null || true - # 停止进度显示进程 - touch "$DOWNLOAD_PROGRESS_LOG.done2" - sleep 1 - kill "$PROGRESS_PID2" 2>/dev/null || true - wait "$PROGRESS_PID2" 2>/dev/null || true DOWNLOAD_END_TIME=$(date +%s) DOWNLOAD_DURATION=$((DOWNLOAD_END_TIME - DOWNLOAD_START_TIME)) - # 统计下载信息 - TOTAL_PACKAGES=$(grep -c '"Path":' "$DOWNLOAD_LOG" 2>/dev/null || echo "0") - SUCCESS_COUNT=$(grep -c '"Version":' "$DOWNLOAD_LOG" 2>/dev/null || echo "0") + # 统计下载信息(去除换行符) + TOTAL_PACKAGES=$(grep -c '"Path":' "$DOWNLOAD_LOG" 2>/dev/null | tr -d '\n' || echo "0") + SUCCESS_COUNT=$(grep -c '"Version":' "$DOWNLOAD_LOG" 2>/dev/null | tr -d '\n' || echo "0") + + # 如果没有 JSON 格式,尝试从普通输出统计 + if [ "$TOTAL_PACKAGES" = "0" ] || [ -z "$TOTAL_PACKAGES" ]; then + TOTAL_PACKAGES=$(grep -c "go: downloading" "$DOWNLOAD_LOG" 2>/dev/null | tr -d '\n' || echo "0") + SUCCESS_COUNT=$TOTAL_PACKAGES + fi + + # 确保是数字 + TOTAL_PACKAGES=${TOTAL_PACKAGES:-0} + SUCCESS_COUNT=${SUCCESS_COUNT:-0} echo "" echo -e "${GREEN}✓ 依赖下载完成${NC}" @@ -1136,7 +1167,7 @@ build_from_source() { echo -e " 成功下载: ${GREEN}${SUCCESS_COUNT}${NC}" echo -e " 总耗时: ${GREEN}${DOWNLOAD_DURATION}${NC}秒" - if [ "$DOWNLOAD_DURATION" -gt 0 ] && [ "$SUCCESS_COUNT" -gt 0 ]; then + if [ "$DOWNLOAD_DURATION" -gt 0 ] && [ "$SUCCESS_COUNT" -gt 0 ] 2>/dev/null; then AVG_SPEED=$(echo "scale=2; $SUCCESS_COUNT / $DOWNLOAD_DURATION" | bc 2>/dev/null || echo "0") echo -e " 平均速度: ${GREEN}${AVG_SPEED}${NC} 包/秒" fi