下载速度显示
This commit is contained in:
164
install.sh
164
install.sh
@@ -811,7 +811,7 @@ build_from_source() {
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 下载依赖(显示详细进度)
|
# 下载依赖(显示详细进度和速度)
|
||||||
echo -e "${BLUE}开始下载 Go 依赖包(这可能需要一些时间)...${NC}"
|
echo -e "${BLUE}开始下载 Go 依赖包(这可能需要一些时间)...${NC}"
|
||||||
echo -e "${YELLOW}提示: 如果下载速度慢,请检查网络连接和代理设置${NC}"
|
echo -e "${YELLOW}提示: 如果下载速度慢,请检查网络连接和代理设置${NC}"
|
||||||
echo ""
|
echo ""
|
||||||
@@ -819,33 +819,119 @@ build_from_source() {
|
|||||||
# 设置更长的超时时间和启用详细输出
|
# 设置更长的超时时间和启用详细输出
|
||||||
DOWNLOAD_START_TIME=$(date +%s)
|
DOWNLOAD_START_TIME=$(date +%s)
|
||||||
DOWNLOAD_LOG="/tmp/go_download_$$.log"
|
DOWNLOAD_LOG="/tmp/go_download_$$.log"
|
||||||
|
DOWNLOAD_PROGRESS_LOG="/tmp/go_progress_$$.log"
|
||||||
|
|
||||||
# 使用 -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 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 GOPRIVATE=*" 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
|
# 使用后台进程显示实时进度
|
||||||
|
(
|
||||||
|
DOWNLOADED_COUNT=0
|
||||||
|
LAST_UPDATE_TIME=$(date +%s)
|
||||||
|
LAST_COUNT=0
|
||||||
|
LAST_PACKAGE=""
|
||||||
|
|
||||||
|
while [ ! -f "${DOWNLOAD_PROGRESS_LOG}.done" ]; do
|
||||||
|
sleep 1
|
||||||
|
|
||||||
|
# 统计已下载的包数量(从日志中统计)
|
||||||
|
if [ -f "$DOWNLOAD_LOG" ]; then
|
||||||
|
CURRENT_COUNT=$(grep -c "go: downloading" "$DOWNLOAD_LOG" 2>/dev/null || echo "0")
|
||||||
|
else
|
||||||
|
CURRENT_COUNT=0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$CURRENT_COUNT" -gt "$LAST_COUNT" ]; then
|
||||||
|
DOWNLOADED_COUNT=$CURRENT_COUNT
|
||||||
|
CURRENT_TIME=$(date +%s)
|
||||||
|
ELAPSED=$((CURRENT_TIME - DOWNLOAD_START_TIME))
|
||||||
|
|
||||||
|
# 计算速度(每秒下载的包数)
|
||||||
|
if [ "$ELAPSED" -gt 0 ]; then
|
||||||
|
SPEED=$(echo "scale=2; $DOWNLOADED_COUNT / $ELAPSED" | bc 2>/dev/null || echo "0")
|
||||||
|
echo -ne "\r${BLUE}进度: 已下载 ${GREEN}${DOWNLOADED_COUNT}${NC} 个包 | 耗时: ${ELAPSED}秒 | 速度: ${GREEN}${SPEED}${NC} 包/秒"
|
||||||
|
fi
|
||||||
|
|
||||||
|
LAST_COUNT=$CURRENT_COUNT
|
||||||
|
LAST_UPDATE_TIME=$CURRENT_TIME
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 显示当前正在下载的包
|
||||||
|
if [ -f "$DOWNLOAD_LOG" ]; then
|
||||||
|
CURRENT_PACKAGE=$(grep "go: downloading" "$DOWNLOAD_LOG" 2>/dev/null | tail -1 | sed 's/go: downloading //' | cut -d' ' -f1)
|
||||||
|
if [ -n "$CURRENT_PACKAGE" ] && [ "$CURRENT_PACKAGE" != "$LAST_PACKAGE" ]; then
|
||||||
|
echo ""
|
||||||
|
echo -e "${BLUE} → 正在下载: ${GREEN}${CURRENT_PACKAGE}${NC}"
|
||||||
|
LAST_PACKAGE=$CURRENT_PACKAGE
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
) &
|
||||||
|
PROGRESS_PID=$!
|
||||||
|
|
||||||
|
# 使用 -json 格式下载,便于解析进度(同时输出到终端和文件)
|
||||||
|
if sudo bash -c "cd '$SOURCE_DIR' && $GO_ENV && timeout 600 go mod download -json" 2>&1 | tee "$DOWNLOAD_LOG"; then
|
||||||
|
# 停止进度显示进程
|
||||||
|
touch "${DOWNLOAD_PROGRESS_LOG}.done"
|
||||||
|
sleep 1
|
||||||
|
kill "$PROGRESS_PID" 2>/dev/null || true
|
||||||
|
wait "$PROGRESS_PID" 2>/dev/null || true
|
||||||
|
|
||||||
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))
|
||||||
echo -e "${GREEN}✓ 依赖下载完成 (耗时: ${DOWNLOAD_DURATION}秒)${NC}"
|
|
||||||
# 显示下载摘要
|
# 统计下载信息(从 JSON 输出中解析)
|
||||||
echo -e "${BLUE}下载摘要:${NC}"
|
TOTAL_PACKAGES=$(grep -c '"Path":' "$DOWNLOAD_LOG" 2>/dev/null || echo "0")
|
||||||
grep -E "(downloading|get|found)" "$DOWNLOAD_LOG" | tail -20 | while IFS= read -r line; do
|
SUCCESS_COUNT=$(grep -c '"Version":' "$DOWNLOAD_LOG" 2>/dev/null || echo "0")
|
||||||
|
|
||||||
|
# 如果没有 JSON 格式,尝试从普通输出统计
|
||||||
|
if [ "$TOTAL_PACKAGES" = "0" ]; then
|
||||||
|
TOTAL_PACKAGES=$(grep -c "go: downloading" "$DOWNLOAD_LOG" 2>/dev/null || echo "0")
|
||||||
|
SUCCESS_COUNT=$TOTAL_PACKAGES
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo -e "${GREEN}✓ 依赖下载完成${NC}"
|
||||||
|
echo -e "${BLUE}下载统计:${NC}"
|
||||||
|
echo -e " 总包数: ${GREEN}${TOTAL_PACKAGES}${NC}"
|
||||||
|
echo -e " 成功下载: ${GREEN}${SUCCESS_COUNT}${NC}"
|
||||||
|
echo -e " 总耗时: ${GREEN}${DOWNLOAD_DURATION}${NC}秒"
|
||||||
|
|
||||||
|
if [ "$DOWNLOAD_DURATION" -gt 0 ] && [ "$SUCCESS_COUNT" -gt 0 ]; then
|
||||||
|
AVG_SPEED=$(echo "scale=2; $SUCCESS_COUNT / $DOWNLOAD_DURATION" | bc 2>/dev/null || echo "0")
|
||||||
|
echo -e " 平均速度: ${GREEN}${AVG_SPEED}${NC} 包/秒"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 显示最后下载的几个包
|
||||||
|
echo -e "${BLUE}最后下载的包:${NC}"
|
||||||
|
grep '"Path":' "$DOWNLOAD_LOG" | tail -10 | sed 's/.*"Path": "\([^"]*\)".*/ ✓ \1/' | while IFS= read -r line; do
|
||||||
echo "$line"
|
echo "$line"
|
||||||
done || true
|
done || true
|
||||||
else
|
else
|
||||||
|
# 停止进度显示进程
|
||||||
|
touch "${DOWNLOAD_PROGRESS_LOG}.done"
|
||||||
|
sleep 1
|
||||||
|
kill "$PROGRESS_PID" 2>/dev/null || true
|
||||||
|
wait "$PROGRESS_PID" 2>/dev/null || true
|
||||||
|
|
||||||
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))
|
||||||
|
|
||||||
|
# 统计已下载的包
|
||||||
|
DOWNLOADED_COUNT=$(grep -c "go: downloading" "$DOWNLOAD_LOG" 2>/dev/null || echo "0")
|
||||||
|
|
||||||
if [ "$DOWNLOAD_EXIT_CODE" = "124" ]; then
|
if [ "$DOWNLOAD_EXIT_CODE" = "124" ]; then
|
||||||
echo -e "${YELLOW}⚠ 下载超时 (${DOWNLOAD_DURATION}秒),但可能已下载部分依赖${NC}"
|
echo ""
|
||||||
|
echo -e "${YELLOW}⚠ 下载超时 (${DOWNLOAD_DURATION}秒)${NC}"
|
||||||
|
echo -e "${BLUE}已下载: ${GREEN}${DOWNLOADED_COUNT}${NC} 个包"
|
||||||
echo -e "${YELLOW}继续尝试编译,如果失败请检查网络连接${NC}"
|
echo -e "${YELLOW}继续尝试编译,如果失败请检查网络连接${NC}"
|
||||||
else
|
else
|
||||||
|
echo ""
|
||||||
echo -e "${YELLOW}⚠ 使用国内镜像下载失败 (耗时: ${DOWNLOAD_DURATION}秒,退出码: ${DOWNLOAD_EXIT_CODE})${NC}"
|
echo -e "${YELLOW}⚠ 使用国内镜像下载失败 (耗时: ${DOWNLOAD_DURATION}秒,退出码: ${DOWNLOAD_EXIT_CODE})${NC}"
|
||||||
|
echo -e "${BLUE}已下载: ${GREEN}${DOWNLOADED_COUNT}${NC} 个包"
|
||||||
echo -e "${YELLOW}最后30行日志:${NC}"
|
echo -e "${YELLOW}最后30行日志:${NC}"
|
||||||
tail -30 "$DOWNLOAD_LOG" 2>/dev/null || true
|
tail -30 "$DOWNLOAD_LOG" 2>/dev/null || true
|
||||||
echo ""
|
echo ""
|
||||||
@@ -853,11 +939,67 @@ build_from_source() {
|
|||||||
# 如果失败,尝试使用 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=300"
|
||||||
|
|
||||||
|
# 重新启动进度显示
|
||||||
|
(
|
||||||
|
DOWNLOADED_COUNT=0
|
||||||
|
LAST_UPDATE_TIME=$(date +%s)
|
||||||
|
LAST_COUNT=0
|
||||||
|
|
||||||
|
while [ ! -f "$DOWNLOAD_PROGRESS_LOG.done2" ]; do
|
||||||
|
sleep 1
|
||||||
|
|
||||||
|
CURRENT_COUNT=$(grep -c "go: downloading" "$DOWNLOAD_LOG" 2>/dev/null || echo "0")
|
||||||
|
|
||||||
|
if [ "$CURRENT_COUNT" -gt "$LAST_COUNT" ]; then
|
||||||
|
DOWNLOADED_COUNT=$CURRENT_COUNT
|
||||||
|
CURRENT_TIME=$(date +%s)
|
||||||
|
ELAPSED=$((CURRENT_TIME - DOWNLOAD_START_TIME))
|
||||||
|
|
||||||
|
if [ "$ELAPSED" -gt 0 ]; then
|
||||||
|
SPEED=$(echo "scale=2; $DOWNLOADED_COUNT / $ELAPSED" | bc 2>/dev/null || echo "0")
|
||||||
|
echo -ne "\r${BLUE}进度: 已下载 ${GREEN}${DOWNLOADED_COUNT}${NC} 个包 | 耗时: ${ELAPSED}秒 | 速度: ${GREEN}${SPEED}${NC} 包/秒"
|
||||||
|
fi
|
||||||
|
|
||||||
|
LAST_COUNT=$CURRENT_COUNT
|
||||||
|
fi
|
||||||
|
|
||||||
|
CURRENT_PACKAGE=$(grep "go: downloading" "$DOWNLOAD_LOG" | tail -1 | sed 's/go: downloading //' | cut -d' ' -f1)
|
||||||
|
if [ -n "$CURRENT_PACKAGE" ] && [ "$CURRENT_PACKAGE" != "$LAST_PACKAGE" ]; then
|
||||||
|
echo ""
|
||||||
|
echo -e "${BLUE} → 正在下载: ${GREEN}${CURRENT_PACKAGE}${NC}"
|
||||||
|
LAST_PACKAGE=$CURRENT_PACKAGE
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
) &
|
||||||
|
PROGRESS_PID2=$!
|
||||||
|
|
||||||
DOWNLOAD_START_TIME=$(date +%s)
|
DOWNLOAD_START_TIME=$(date +%s)
|
||||||
if sudo bash -c "cd '$SOURCE_DIR' && $GO_ENV && timeout 600 go mod download -x" > "$DOWNLOAD_LOG" 2>&1; then
|
if sudo bash -c "cd '$SOURCE_DIR' && $GO_ENV && timeout 600 go mod download -json" > "$DOWNLOAD_LOG" 2>&1; then
|
||||||
|
# 停止进度显示进程
|
||||||
|
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_END_TIME=$(date +%s)
|
||||||
DOWNLOAD_DURATION=$((DOWNLOAD_END_TIME - DOWNLOAD_START_TIME))
|
DOWNLOAD_DURATION=$((DOWNLOAD_END_TIME - DOWNLOAD_START_TIME))
|
||||||
echo -e "${GREEN}✓ 依赖下载完成 (耗时: ${DOWNLOAD_DURATION}秒)${NC}"
|
|
||||||
|
# 统计下载信息
|
||||||
|
TOTAL_PACKAGES=$(grep -c '"Path":' "$DOWNLOAD_LOG" 2>/dev/null || echo "0")
|
||||||
|
SUCCESS_COUNT=$(grep -c '"Version":' "$DOWNLOAD_LOG" 2>/dev/null || echo "0")
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo -e "${GREEN}✓ 依赖下载完成${NC}"
|
||||||
|
echo -e "${BLUE}下载统计:${NC}"
|
||||||
|
echo -e " 总包数: ${GREEN}${TOTAL_PACKAGES}${NC}"
|
||||||
|
echo -e " 成功下载: ${GREEN}${SUCCESS_COUNT}${NC}"
|
||||||
|
echo -e " 总耗时: ${GREEN}${DOWNLOAD_DURATION}${NC}秒"
|
||||||
|
|
||||||
|
if [ "$DOWNLOAD_DURATION" -gt 0 ] && [ "$SUCCESS_COUNT" -gt 0 ]; then
|
||||||
|
AVG_SPEED=$(echo "scale=2; $SUCCESS_COUNT / $DOWNLOAD_DURATION" | bc 2>/dev/null || echo "0")
|
||||||
|
echo -e " 平均速度: ${GREEN}${AVG_SPEED}${NC} 包/秒"
|
||||||
|
fi
|
||||||
else
|
else
|
||||||
echo -e "${RED}下载依赖失败,最后100行日志:${NC}"
|
echo -e "${RED}下载依赖失败,最后100行日志:${NC}"
|
||||||
tail -100 "$DOWNLOAD_LOG" 2>/dev/null || true
|
tail -100 "$DOWNLOAD_LOG" 2>/dev/null || true
|
||||||
|
|||||||
Reference in New Issue
Block a user