You've already forked DataMate
Some checks failed
- 在 build-offline.sh 脚本中添加 --pull=false 参数并改进错误处理 - 为 Makefile.offline.mk 中的各个服务构建任务添加 --pull=false 参数 - 新增 build-offline-classic.sh 脚本,提供不使用 BuildKit 的传统构建方式 - 新增 build-offline-v2.sh 脚本,提供增强版 BuildKit 离线构建功能 - 新增 diagnose.sh 脚本,用于诊断离线构建环境状态 - 在 Makefile 中添加 offline-build-classic 和 offline-diagnose
152 lines
4.0 KiB
Bash
152 lines
4.0 KiB
Bash
#!/bin/bash
|
|
# 离线构建诊断脚本
|
|
# Usage: ./diagnose.sh [cache-dir]
|
|
|
|
set -e
|
|
|
|
CACHE_DIR="${1:-./build-cache}"
|
|
|
|
echo "======================================"
|
|
echo "离线构建环境诊断"
|
|
echo "======================================"
|
|
echo ""
|
|
|
|
# 1. 检查 Docker
|
|
echo "1. Docker 版本:"
|
|
docker version --format '{{.Server.Version}}' 2>/dev/null || echo " 无法获取版本"
|
|
echo ""
|
|
|
|
# 2. 检查 BuildKit
|
|
echo "2. BuildKit 状态:"
|
|
if docker buildx version > /dev/null 2>&1; then
|
|
docker buildx version
|
|
echo ""
|
|
echo "可用的构建器:"
|
|
docker buildx ls
|
|
else
|
|
echo " BuildKit 不可用"
|
|
fi
|
|
echo ""
|
|
|
|
# 3. 检查缓存目录
|
|
echo "3. 缓存目录检查 ($CACHE_DIR):"
|
|
if [ -d "$CACHE_DIR" ]; then
|
|
echo " ✓ 缓存目录存在"
|
|
|
|
# 检查子目录
|
|
for subdir in buildkit images resources; do
|
|
if [ -d "$CACHE_DIR/$subdir" ]; then
|
|
echo " ✓ $subdir/ 存在"
|
|
count=$(find "$CACHE_DIR/$subdir" -type d | wc -l)
|
|
echo " 子目录数量: $count"
|
|
else
|
|
echo " ✗ $subdir/ 不存在"
|
|
fi
|
|
done
|
|
else
|
|
echo " ✗ 缓存目录不存在"
|
|
fi
|
|
echo ""
|
|
|
|
# 4. 检查基础镜像
|
|
echo "4. 基础镜像检查:"
|
|
required_images=(
|
|
"maven:3-eclipse-temurin-21"
|
|
"maven:3-eclipse-temurin-8"
|
|
"eclipse-temurin:21-jdk"
|
|
"mysql:8"
|
|
"node:20-alpine"
|
|
"nginx:1.29"
|
|
"ghcr.nju.edu.cn/astral-sh/uv:python3.11-bookworm"
|
|
"python:3.12-slim"
|
|
"gcr.io/distroless/nodejs20-debian12"
|
|
)
|
|
|
|
missing_images=()
|
|
for img in "${required_images[@]}"; do
|
|
if docker inspect "$img" > /dev/null 2>&1; then
|
|
size=$(docker images --format "{{.Size}}" "$img" | head -1)
|
|
echo " ✓ $img ($size)"
|
|
else
|
|
echo " ✗ $img (缺失)"
|
|
missing_images+=("$img")
|
|
fi
|
|
done
|
|
echo ""
|
|
|
|
# 5. 检查 BuildKit 缓存
|
|
echo "5. BuildKit 缓存检查:"
|
|
if [ -d "$CACHE_DIR/buildkit" ]; then
|
|
for cache_dir in "$CACHE_DIR/buildkit"/*-cache; do
|
|
if [ -d "$cache_dir" ]; then
|
|
name=$(basename "$cache_dir")
|
|
size=$(du -sh "$cache_dir" 2>/dev/null | cut -f1)
|
|
echo " ✓ $name ($size)"
|
|
fi
|
|
done
|
|
else
|
|
echo " ✗ 缓存目录不存在"
|
|
fi
|
|
echo ""
|
|
|
|
# 6. 检查资源文件
|
|
echo "6. 外部资源检查:"
|
|
if [ -d "$CACHE_DIR/resources" ]; then
|
|
if [ -f "$CACHE_DIR/resources/models/ch_ppocr_mobile_v2.0_cls_infer.tar" ]; then
|
|
size=$(du -sh "$CACHE_DIR/resources/models/ch_ppocr_mobile_v2.0_cls_infer.tar" | cut -f1)
|
|
echo " ✓ PaddleOCR 模型 ($size)"
|
|
else
|
|
echo " ✗ PaddleOCR 模型缺失"
|
|
fi
|
|
|
|
if [ -f "$CACHE_DIR/resources/models/zh_core_web_sm-3.8.0-py3-none-any.whl" ]; then
|
|
size=$(du -sh "$CACHE_DIR/resources/models/zh_core_web_sm-3.8.0-py3-none-any.whl" | cut -f1)
|
|
echo " ✓ spaCy 模型 ($size)"
|
|
else
|
|
echo " ✗ spaCy 模型缺失"
|
|
fi
|
|
|
|
if [ -d "$CACHE_DIR/resources/DataX" ]; then
|
|
echo " ✓ DataX 源码"
|
|
else
|
|
echo " ✗ DataX 源码缺失"
|
|
fi
|
|
|
|
if [ -d "$CACHE_DIR/resources/deer-flow" ]; then
|
|
echo " ✓ deer-flow 源码"
|
|
else
|
|
echo " ✗ deer-flow 源码缺失"
|
|
fi
|
|
else
|
|
echo " ✗ 资源目录不存在"
|
|
fi
|
|
echo ""
|
|
|
|
# 7. 网络检查
|
|
echo "7. 网络检查:"
|
|
if ping -c 1 8.8.8.8 > /dev/null 2>&1; then
|
|
echo " ⚠ 网络可用(离线构建环境通常不需要)"
|
|
else
|
|
echo " ✓ 网络不可达(符合离线环境)"
|
|
fi
|
|
echo ""
|
|
|
|
# 8. 总结
|
|
echo "======================================"
|
|
echo "诊断总结"
|
|
echo "======================================"
|
|
|
|
if [ ${#missing_images[@]} -eq 0 ]; then
|
|
echo "✓ 所有基础镜像已就绪"
|
|
else
|
|
echo "✗ 缺少 ${#missing_images[@]} 个基础镜像:"
|
|
printf ' - %s\n' "${missing_images[@]}"
|
|
echo ""
|
|
echo "修复方法:"
|
|
if [ -f "$CACHE_DIR/images/base-images.tar" ]; then
|
|
echo " docker load -i $CACHE_DIR/images/base-images.tar"
|
|
else
|
|
echo " 请确保有网环境导出时包含所有基础镜像"
|
|
fi
|
|
fi
|