go依赖镜像换国内
This commit is contained in:
73
install.sh
73
install.sh
@@ -432,8 +432,18 @@ install_go_from_official() {
|
|||||||
echo 'export PATH=$PATH:/usr/local/go/bin' | sudo tee -a /etc/profile > /dev/null
|
echo 'export PATH=$PATH:/usr/local/go/bin' | sudo tee -a /etc/profile > /dev/null
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 设置当前会话的 PATH
|
# 配置 Go 代理(使用国内镜像)
|
||||||
|
if ! grep -q "GOPROXY" /etc/profile 2>/dev/null; then
|
||||||
|
echo '' | sudo tee -a /etc/profile > /dev/null
|
||||||
|
echo '# Go 代理配置(使用国内镜像加速)' | sudo tee -a /etc/profile > /dev/null
|
||||||
|
echo 'export GOPROXY=https://goproxy.cn,direct' | sudo tee -a /etc/profile > /dev/null
|
||||||
|
echo 'export GOSUMDB=sum.golang.google.cn' | sudo tee -a /etc/profile > /dev/null
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 设置当前会话的 PATH 和 GOPROXY
|
||||||
export PATH=$PATH:/usr/local/go/bin
|
export PATH=$PATH:/usr/local/go/bin
|
||||||
|
export GOPROXY=https://goproxy.cn,direct
|
||||||
|
export GOSUMDB=sum.golang.google.cn
|
||||||
|
|
||||||
# 验证安装
|
# 验证安装
|
||||||
if command -v go > /dev/null 2>&1; then
|
if command -v go > /dev/null 2>&1; then
|
||||||
@@ -489,6 +499,19 @@ install_go() {
|
|||||||
if [ "$install_success" = true ] && command -v go > /dev/null 2>&1; then
|
if [ "$install_success" = true ] && command -v go > /dev/null 2>&1; then
|
||||||
GO_VERSION=$(go version 2>/dev/null | head -1)
|
GO_VERSION=$(go version 2>/dev/null | head -1)
|
||||||
echo -e "${GREEN}✓ Go 安装完成: ${GO_VERSION}${NC}"
|
echo -e "${GREEN}✓ Go 安装完成: ${GO_VERSION}${NC}"
|
||||||
|
|
||||||
|
# 配置 Go 代理(使用国内镜像)
|
||||||
|
if ! grep -q "GOPROXY" /etc/profile 2>/dev/null; then
|
||||||
|
echo '' | sudo tee -a /etc/profile > /dev/null
|
||||||
|
echo '# Go 代理配置(使用国内镜像加速)' | sudo tee -a /etc/profile > /dev/null
|
||||||
|
echo 'export GOPROXY=https://goproxy.cn,direct' | sudo tee -a /etc/profile > /dev/null
|
||||||
|
echo 'export GOSUMDB=sum.golang.google.cn' | sudo tee -a /etc/profile > /dev/null
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 设置当前会话的 GOPROXY
|
||||||
|
export GOPROXY=https://goproxy.cn,direct
|
||||||
|
export GOSUMDB=sum.golang.google.cn
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -649,26 +672,64 @@ 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
|
||||||
|
|
||||||
# 下载依赖(使用 sudo 以 root 用户执行,确保 PATH 包含 Go)
|
# 配置 Go 代理(使用国内镜像)
|
||||||
|
echo -e "${BLUE}配置 Go 代理(使用国内镜像)...${NC}"
|
||||||
|
# Go 代理镜像列表(按优先级排序)
|
||||||
|
GO_PROXY_MIRRORS=(
|
||||||
|
"https://goproxy.cn,direct"
|
||||||
|
"https://goproxy.io,direct"
|
||||||
|
"https://mirrors.aliyun.com/go-proxy/,direct"
|
||||||
|
"https://proxy.golang.org,direct"
|
||||||
|
)
|
||||||
|
|
||||||
|
# 测试并选择最快的 Go 代理
|
||||||
|
GO_PROXY=""
|
||||||
|
for proxy in "${GO_PROXY_MIRRORS[@]}"; do
|
||||||
|
proxy_url=$(echo "$proxy" | cut -d',' -f1)
|
||||||
|
echo -n " 测试 ${proxy_url}... "
|
||||||
|
if curl -sf --connect-timeout 2 "${proxy_url}" > /dev/null 2>&1; then
|
||||||
|
GO_PROXY="$proxy"
|
||||||
|
echo -e "${GREEN}可用${NC}"
|
||||||
|
break
|
||||||
|
else
|
||||||
|
echo -e "${RED}不可用${NC}"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# 如果所有镜像都不可用,使用默认配置
|
||||||
|
if [ -z "$GO_PROXY" ]; then
|
||||||
|
GO_PROXY="https://proxy.golang.org,direct"
|
||||||
|
echo -e "${YELLOW}⚠ 所有国内镜像不可用,使用默认代理${NC}"
|
||||||
|
else
|
||||||
|
echo -e "${GREEN}✓ 使用 Go 代理: ${GO_PROXY}${NC}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 下载依赖(使用 sudo 以 root 用户执行,确保 PATH 包含 Go,并设置 GOPROXY)
|
||||||
echo -e "${BLUE}下载 Go 依赖...${NC}"
|
echo -e "${BLUE}下载 Go 依赖...${NC}"
|
||||||
# 构建包含 Go PATH 的环境变量
|
# 构建包含 Go PATH 和 GOPROXY 的环境变量
|
||||||
GO_PATH_ENV="PATH=\$PATH:/usr/local/go/bin"
|
GO_PATH_ENV="PATH=\$PATH:/usr/local/go/bin"
|
||||||
if [ -d "/usr/local/go/bin" ]; then
|
if [ -d "/usr/local/go/bin" ]; then
|
||||||
GO_PATH_ENV="PATH=/usr/local/go/bin:\$PATH"
|
GO_PATH_ENV="PATH=/usr/local/go/bin:\$PATH"
|
||||||
fi
|
fi
|
||||||
if ! sudo bash -c "cd '$SOURCE_DIR' && $GO_PATH_ENV && go mod download" 2>&1; then
|
GO_ENV="$GO_PATH_ENV GOPROXY=${GO_PROXY} GOSUMDB=sum.golang.google.cn"
|
||||||
|
if ! sudo bash -c "cd '$SOURCE_DIR' && $GO_ENV && go mod download" 2>&1; then
|
||||||
|
echo -e "${YELLOW}⚠ 使用国内镜像下载失败,尝试使用官方源...${NC}"
|
||||||
|
# 如果失败,尝试使用官方源
|
||||||
|
GO_ENV="$GO_PATH_ENV GOPROXY=https://proxy.golang.org,direct"
|
||||||
|
if ! sudo bash -c "cd '$SOURCE_DIR' && $GO_ENV && go mod download" 2>&1; then
|
||||||
echo -e "${RED}下载依赖失败${NC}"
|
echo -e "${RED}下载依赖失败${NC}"
|
||||||
show_build_alternatives
|
show_build_alternatives
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
# 编译到临时文件(在用户有权限的目录),然后移动到目标位置
|
# 编译到临时文件(在用户有权限的目录),然后移动到目标位置
|
||||||
echo -e "${BLUE}编译二进制文件...${NC}"
|
echo -e "${BLUE}编译二进制文件...${NC}"
|
||||||
TEMP_BINARY=$(mktemp)
|
TEMP_BINARY=$(mktemp)
|
||||||
BINARY_PATH="$SOURCE_DIR/agent"
|
BINARY_PATH="$SOURCE_DIR/agent"
|
||||||
|
|
||||||
# 使用 sudo 以 root 用户编译,直接输出到目标位置,确保 PATH 包含 Go
|
# 使用 sudo 以 root 用户编译,直接输出到目标位置,确保 PATH 包含 Go,并设置 GOPROXY
|
||||||
if sudo bash -c "cd '$SOURCE_DIR' && $GO_PATH_ENV && GOOS=linux GOARCH=${ARCH} CGO_ENABLED=0 go build -buildvcs=false -ldflags='-w -s' -o '$BINARY_PATH' ./cmd/agent" 2>&1; then
|
if sudo bash -c "cd '$SOURCE_DIR' && $GO_ENV && GOOS=linux GOARCH=${ARCH} CGO_ENABLED=0 go build -buildvcs=false -ldflags='-w -s' -o '$BINARY_PATH' ./cmd/agent" 2>&1; then
|
||||||
if [ -f "$BINARY_PATH" ] && [ -s "$BINARY_PATH" ]; then
|
if [ -f "$BINARY_PATH" ] && [ -s "$BINARY_PATH" ]; then
|
||||||
sudo chmod +x "$BINARY_PATH"
|
sudo chmod +x "$BINARY_PATH"
|
||||||
echo -e "${GREEN}✓ 编译成功${NC}"
|
echo -e "${GREEN}✓ 编译成功${NC}"
|
||||||
|
|||||||
36
run.sh
36
run.sh
@@ -68,13 +68,47 @@ update_and_build() {
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# 配置 Go 代理(使用国内镜像)
|
||||||
|
if [ -z "$GOPROXY" ]; then
|
||||||
|
# 测试并选择最快的 Go 代理
|
||||||
|
GO_PROXY_MIRRORS=(
|
||||||
|
"https://goproxy.cn,direct"
|
||||||
|
"https://goproxy.io,direct"
|
||||||
|
"https://mirrors.aliyun.com/go-proxy/,direct"
|
||||||
|
)
|
||||||
|
|
||||||
|
for proxy in "${GO_PROXY_MIRRORS[@]}"; do
|
||||||
|
proxy_url=$(echo "$proxy" | cut -d',' -f1)
|
||||||
|
if curl -sf --connect-timeout 2 "${proxy_url}" > /dev/null 2>&1; then
|
||||||
|
export GOPROXY="$proxy"
|
||||||
|
export GOSUMDB=sum.golang.google.cn
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# 如果所有镜像都不可用,使用默认配置
|
||||||
|
if [ -z "$GOPROXY" ]; then
|
||||||
|
export GOPROXY="https://proxy.golang.org,direct"
|
||||||
|
export GOSUMDB=sum.golang.google.cn
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
# 更新依赖
|
# 更新依赖
|
||||||
echo -e "${BLUE}更新 Go 依赖...${NC}"
|
echo -e "${BLUE}更新 Go 依赖(使用代理: ${GOPROXY})...${NC}"
|
||||||
if ! go mod download 2>&1; then
|
if ! go mod download 2>&1; then
|
||||||
|
echo -e "${YELLOW}警告: 依赖更新失败,尝试使用官方源...${NC}"
|
||||||
|
# 如果失败,尝试使用官方源
|
||||||
|
OLD_GOPROXY="$GOPROXY"
|
||||||
|
export GOPROXY="https://proxy.golang.org,direct"
|
||||||
|
if ! go mod download 2>&1; then
|
||||||
|
export GOPROXY="$OLD_GOPROXY"
|
||||||
echo -e "${YELLOW}警告: 依赖更新失败,尝试继续编译${NC}"
|
echo -e "${YELLOW}警告: 依赖更新失败,尝试继续编译${NC}"
|
||||||
else
|
else
|
||||||
echo -e "${GREEN}✓ 依赖更新完成${NC}"
|
echo -e "${GREEN}✓ 依赖更新完成${NC}"
|
||||||
fi
|
fi
|
||||||
|
else
|
||||||
|
echo -e "${GREEN}✓ 依赖更新完成${NC}"
|
||||||
|
fi
|
||||||
|
|
||||||
# 编译
|
# 编译
|
||||||
echo -e "${BLUE}编译二进制文件...${NC}"
|
echo -e "${BLUE}编译二进制文件...${NC}"
|
||||||
|
|||||||
Reference in New Issue
Block a user