#!/bin/bash # 测试多平台脚本的基本功能(不构建Docker) set -e # 配置变量 EXPORT_DIR="dms-compliance-multiplatform-test-$(date +%Y%m%d-%H%M%S)" IMAGE_NAME="compliance-dms-multiplatform" ARCHIVE_NAME="$EXPORT_DIR.tar.gz" # 支持的平台列表 - 使用函数替代关联数组以兼容旧版bash get_platform() { case "$1" in 1) echo "linux/amd64" ;; 2) echo "linux/arm64" ;; 3) echo "linux/arm/v7" ;; 4) echo "linux/arm/v6" ;; 5) echo "linux/386" ;; 6) echo "linux/ppc64le" ;; 7) echo "linux/s390x" ;; 8) echo "linux/riscv64" ;; *) echo "" ;; esac } get_platform_name() { case "$1" in "linux/amd64") echo "AMD64 (x86_64) - Intel/AMD 64位" ;; "linux/arm64") echo "ARM64 (aarch64) - Apple M1/M2, ARM 64位" ;; "linux/arm/v7") echo "ARMv7 - 树莓派 3/4, ARM 32位" ;; "linux/arm/v6") echo "ARMv6 - 树莓派 1/Zero, ARM 32位" ;; "linux/386") echo "i386 - Intel/AMD 32位" ;; "linux/ppc64le") echo "PowerPC 64位小端" ;; "linux/s390x") echo "IBM System z" ;; "linux/riscv64") echo "RISC-V 64位" ;; *) echo "未知平台" ;; esac } # 服务架构选择 get_service_arch() { case "$1" in 1) echo "dual" ;; 2) echo "fastapi" ;; 3) echo "flask" ;; *) echo "" ;; esac } get_service_arch_name() { case "$1" in "dual") echo "双服务架构 - API服务器(5050) + 历史查看器(5051)" ;; "fastapi") echo "FastAPI单服务 - 现代异步框架,自动生成API文档(5051)" ;; "flask") echo "Flask单服务 - 轻量级传统框架(5050)" ;; *) echo "未知架构" ;; esac } get_service_ports() { case "$1" in "dual") echo "5050,5051" ;; "fastapi") echo "5051" ;; "flask") echo "5050" ;; *) echo "5050" ;; esac } echo "=== DMS合规性测试工具 跨平台脚本测试 ===" echo "" # 检测当前平台 CURRENT_ARCH=$(uname -m) case "$CURRENT_ARCH" in x86_64|amd64) CURRENT_PLATFORM="linux/amd64" ;; aarch64|arm64) CURRENT_PLATFORM="linux/arm64" ;; armv7l) CURRENT_PLATFORM="linux/arm/v7" ;; armv6l) CURRENT_PLATFORM="linux/arm/v6" ;; i386|i686) CURRENT_PLATFORM="linux/386" ;; *) CURRENT_PLATFORM="linux/amd64" ;; esac echo "[信息] 当前平台: $(get_platform_name "$CURRENT_PLATFORM")" echo "" # 选择服务架构 echo "请选择服务架构:" echo " 1) $(get_service_arch_name "dual")" echo " 2) $(get_service_arch_name "fastapi")" echo " 3) $(get_service_arch_name "flask")" echo "" read -p "请输入选择 (1-3) [默认: 1]: " service_choice service_choice=${service_choice:-1} SELECTED_SERVICE_ARCH=$(get_service_arch "$service_choice") if [[ -z "$SELECTED_SERVICE_ARCH" ]]; then echo "[错误] 无效的服务架构选择" exit 1 fi SELECTED_PORTS=$(get_service_ports "$SELECTED_SERVICE_ARCH") echo "[信息] 选择的架构: $(get_service_arch_name "$SELECTED_SERVICE_ARCH")" echo "[信息] 服务端口: $SELECTED_PORTS" echo "" # 选择目标平台 echo "请选择目标平台架构:" for key in 1 2 3 4 5 6 7 8; do platform=$(get_platform "$key") name=$(get_platform_name "$platform") if [[ "$platform" == "$CURRENT_PLATFORM" ]]; then echo " $key) $name [当前平台]" else echo " $key) $name" fi done echo " 9) 多平台构建 (同时构建多个平台)" echo " 0) 自动检测当前平台" echo "" read -p "请输入选择 (0-9) [默认: 0]: " platform_choice platform_choice=${platform_choice:-0} if [[ "$platform_choice" == "0" ]]; then TARGET_PLATFORM="$CURRENT_PLATFORM" TARGET_PLATFORM_NAME="$(get_platform_name "$CURRENT_PLATFORM") [自动检测]" MULTI_PLATFORM=false elif [[ "$platform_choice" == "9" ]]; then TARGET_PLATFORM="linux/amd64,linux/arm64" TARGET_PLATFORM_NAME="常用平台 (AMD64 + ARM64)" MULTI_PLATFORM=true else TARGET_PLATFORM=$(get_platform "$platform_choice") if [[ -z "$TARGET_PLATFORM" ]]; then echo "[错误] 无效的平台选择" exit 1 fi TARGET_PLATFORM_NAME=$(get_platform_name "$TARGET_PLATFORM") MULTI_PLATFORM=false fi echo "[信息] 目标平台: $TARGET_PLATFORM_NAME" echo "[信息] 多平台构建: $MULTI_PLATFORM" echo "" # 确认构建 echo "构建配置确认:" echo " 架构: $(get_service_arch_name "$SELECTED_SERVICE_ARCH")" echo " 端口: $SELECTED_PORTS" echo " 平台: $TARGET_PLATFORM_NAME" echo "" read -p "确认开始测试? (y/N): " confirm if [[ ! "$confirm" =~ ^[Yy]$ ]]; then echo "[信息] 测试已取消" exit 0 fi # 更新导出目录名称以包含平台信息 if [[ "$MULTI_PLATFORM" == "true" ]]; then EXPORT_DIR="dms-compliance-${SELECTED_SERVICE_ARCH}-multiplatform-$(date +%Y%m%d-%H%M%S)" else platform_suffix=$(echo "$TARGET_PLATFORM" | sed 's/linux\///g' | sed 's/\//-/g') EXPORT_DIR="dms-compliance-${SELECTED_SERVICE_ARCH}-${platform_suffix}-$(date +%Y%m%d-%H%M%S)" fi ARCHIVE_NAME="$EXPORT_DIR.tar.gz" echo "[信息] 最终输出目录: $EXPORT_DIR" # 创建最终导出目录 rm -rf "$EXPORT_DIR" mkdir -p "$EXPORT_DIR" echo "" echo "[步骤 1/3] 创建测试文件..." # 创建临时构建目录 TEMP_BUILD_DIR=$(mktemp -d) trap "rm -rf $TEMP_BUILD_DIR" EXIT # 创建测试文件 mkdir -p "$TEMP_BUILD_DIR"/{ddms_compliance_suite,custom_stages,templates,static} echo "# Test requirements" > "$TEMP_BUILD_DIR/requirements.txt" echo "# Test API server" > "$TEMP_BUILD_DIR/api_server.py" echo "# Test history viewer" > "$TEMP_BUILD_DIR/history_viewer.py" echo "[步骤 2/3] 创建配置文件..." # 创建测试Dockerfile if [[ "$SELECTED_SERVICE_ARCH" == "dual" ]]; then cat > "$TEMP_BUILD_DIR/Dockerfile" << 'EOF' FROM python:3.11-alpine WORKDIR /app COPY . . EXPOSE 5050 5051 CMD ["echo", "Dual service architecture"] EOF cat > "$TEMP_BUILD_DIR/supervisord.conf" << 'EOF' [supervisord] nodaemon=true [program:api_server] command=python api_server.py [program:history_viewer] command=python history_viewer.py EOF else cat > "$TEMP_BUILD_DIR/Dockerfile" << 'EOF' FROM python:3.11-alpine WORKDIR /app COPY . . EXPOSE 5050 CMD ["echo", "Single service architecture"] EOF fi echo "[步骤 3/3] 复制文件到最终目录..." # 复制构建文件到最终目录 cp -r "$TEMP_BUILD_DIR"/* "$EXPORT_DIR/" # 创建README cat > "$EXPORT_DIR/README.md" << EOF # DMS合规性测试工具 - 测试部署包 ## 配置信息 - **架构**: $(get_service_arch_name "$SELECTED_SERVICE_ARCH") - **端口**: $SELECTED_PORTS - **目标平台**: $TARGET_PLATFORM_NAME - **构建时间**: $(date '+%Y-%m-%d %H:%M:%S') ## 测试成功 这是一个测试部署包,验证了脚本的基本功能。 EOF # 创建压缩包 echo "[信息] 创建压缩包..." tar -czf "$ARCHIVE_NAME" "$EXPORT_DIR" # 显示结果 echo "" echo "=== 测试完成 ===" echo "[成功] 测试部署包已创建: $ARCHIVE_NAME" echo "[信息] 架构: $(get_service_arch_name "$SELECTED_SERVICE_ARCH")" echo "[信息] 端口: $SELECTED_PORTS" echo "[信息] 平台: $TARGET_PLATFORM_NAME" echo "[信息] 文件大小: $(du -h "$ARCHIVE_NAME" | cut -f1)" echo "" echo "测试成功!脚本功能正常。"