代理增加
This commit is contained in:
102
install.sh
102
install.sh
@@ -712,6 +712,71 @@ build_from_source() {
|
|||||||
sudo git config --global --add safe.directory "$SOURCE_DIR" 2>/dev/null || true
|
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 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 代理(使用国内镜像)
|
# 配置 Go 代理(使用国内镜像)
|
||||||
echo -e "${BLUE}配置 Go 代理(使用国内镜像加速)...${NC}"
|
echo -e "${BLUE}配置 Go 代理(使用国内镜像加速)...${NC}"
|
||||||
# Go 代理镜像列表(按优先级排序,使用多个镜像以提高成功率)
|
# Go 代理镜像列表(按优先级排序,使用多个镜像以提高成功率)
|
||||||
@@ -760,7 +825,7 @@ build_from_source() {
|
|||||||
|
|
||||||
# 禁用 GOSUMDB 以避免连接 proxy.golang.org(在中国大陆通常无法访问)
|
# 禁用 GOSUMDB 以避免连接 proxy.golang.org(在中国大陆通常无法访问)
|
||||||
# 如果必须启用校验和,可以使用 GOSUMDB=sum.golang.google.cn,但可能仍有问题
|
# 如果必须启用校验和,可以使用 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 永久设置环境变量(避免被其他配置覆盖)
|
# 使用 go env -w 永久设置环境变量(避免被其他配置覆盖)
|
||||||
echo -e "${BLUE}永久设置 Go 环境变量(避免连接 proxy.golang.org)...${NC}"
|
echo -e "${BLUE}永久设置 Go 环境变量(避免连接 proxy.golang.org)...${NC}"
|
||||||
@@ -783,7 +848,7 @@ build_from_source() {
|
|||||||
echo -e "${YELLOW}正在强制移除 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')
|
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_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
|
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}"
|
echo -e "${GREEN}✓ 已更新 GOPROXY: ${GO_PROXY}${NC}"
|
||||||
fi
|
fi
|
||||||
@@ -819,10 +884,13 @@ build_from_source() {
|
|||||||
DOWNLOAD_LOG="/tmp/go_download_$$.log"
|
DOWNLOAD_LOG="/tmp/go_download_$$.log"
|
||||||
DOWNLOAD_PROGRESS_LOG="/tmp/go_progress_$$.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 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 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 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_$$"
|
PIPE_FILE="/tmp/go_download_pipe_$$"
|
||||||
@@ -875,7 +943,16 @@ build_from_source() {
|
|||||||
PROGRESS_PID=$!
|
PROGRESS_PID=$!
|
||||||
|
|
||||||
# 使用 -x 标志下载,显示详细输出,同时写入日志和管道
|
# 使用 -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"
|
touch "${DOWNLOAD_PROGRESS_LOG}.done"
|
||||||
sleep 2
|
sleep 2
|
||||||
@@ -919,7 +996,7 @@ build_from_source() {
|
|||||||
# 清理管道文件
|
# 清理管道文件
|
||||||
rm -f "$PIPE_FILE" 2>/dev/null || true
|
rm -f "$PIPE_FILE" 2>/dev/null || true
|
||||||
|
|
||||||
DOWNLOAD_EXIT_CODE=$?
|
DOWNLOAD_EXIT_CODE=${DOWNLOAD_EXIT_CODE:-$?}
|
||||||
DOWNLOAD_END_TIME=$(date +%s)
|
DOWNLOAD_END_TIME=$(date +%s)
|
||||||
DOWNLOAD_DURATION=$((DOWNLOAD_END_TIME - DOWNLOAD_START_TIME))
|
DOWNLOAD_DURATION=$((DOWNLOAD_END_TIME - DOWNLOAD_START_TIME))
|
||||||
|
|
||||||
@@ -941,7 +1018,20 @@ build_from_source() {
|
|||||||
echo -e "${YELLOW}尝试使用 direct 模式(直接从 GitHub/GitLab 等下载)...${NC}"
|
echo -e "${YELLOW}尝试使用 direct 模式(直接从 GitHub/GitLab 等下载)...${NC}"
|
||||||
# 如果失败,尝试使用 direct 模式,直接从源码仓库下载
|
# 如果失败,尝试使用 direct 模式,直接从源码仓库下载
|
||||||
# 注意:不使用 proxy.golang.org,因为在中国大陆无法访问
|
# 注意:不使用 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
|
||||||
|
|
||||||
# 重新启动进度显示
|
# 重新启动进度显示
|
||||||
(
|
(
|
||||||
|
|||||||
Reference in New Issue
Block a user