RK3566 SDK 打包脚本
打包脚本使用方法
打开脚本,设置SDK源目录【SDK_DIR】和打包的输出目录【OUTPUT_BASE_DIR】,完成后在命令行执行即可。例如我将打包脚本命名为 complete_sdk_package.sh ,运行则执行:
一键打包脚本内容
#!/bin/bash
# complete_sdk_package.sh - 完整的RK3566 SDK打包脚本(修复版)
# 版本: 3.1
# 修复了日志文件路径问题
set -e
# ================================
# 用户配置区 - 请根据实际情况修改
# ================================
SDK_DIR="/home/liguoyi/buildroot-tspi-qt5" # 源SDK目录(必须修改)
OUTPUT_BASE_DIR="/home/liguoyi/rk3566_sdk_package" # 输出基目录(必须修改)
SDK_NAME="rk3566_linux_sdk" # SDK名称
SDK_VERSION="v1.0" # SDK版本
# 压缩参数配置(通常无需修改)
CHUNK_SIZE="2G" # 分卷大小(1G/2G/4G)
COMPRESSION_LEVEL=3 # 压缩级别(1-9)
MAX_MEMORY="4G" # 最大内存使用量
MAX_THREADS=2 # 最大压缩线程数
# ================================
# 初始化设置
# ================================
SCRIPT_VERSION="3.1"
CURRENT_DATE=$(date +%Y%m%d)
CURRENT_TIME=$(date +%H%M%S)
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 临时日志函数(在OUTPUT_DIR创建前使用)
temp_log() {
echo -e "${GREEN}[$(date '+%Y-%m-%d %H:%M:%S')]${NC} $1"
}
temp_warn() {
echo -e "${YELLOW}[$(date '+%Y-%m-%d %H:%M:%S')] WARN:${NC} $1"
}
temp_error() {
echo -e "${RED}[$(date '+%Y-%m-%d %H:%M:%S')] ERROR:${NC} $1"
exit 1
}
# ================================
# 环境检测和参数调整
# ================================
detect_system_resources() {
temp_log "1. 检测系统资源..."
# 创建输出目录
OUTPUT_DIR="$OUTPUT_BASE_DIR/${SDK_NAME}_package_${CURRENT_DATE}_${CURRENT_TIME}"
TEMP_DIR="$OUTPUT_DIR/temp"
LOG_FILE="$OUTPUT_DIR/packaging.log"
# 创建输出目录
mkdir -p "$OUTPUT_DIR"
mkdir -p "$TEMP_DIR"
# 重新定义日志函数(使用实际的LOG_FILE)
log() {
echo -e "${GREEN}[$(date '+%Y-%m-%d %H:%M:%S')]${NC} $1" | tee -a "$LOG_FILE"
}
warn() {
echo -e "${YELLOW}[$(date '+%Y-%m-%d %H:%M:%S')] WARN:${NC} $1" | tee -a "$LOG_FILE"
}
error() {
echo -e "${RED}[$(date '+%Y-%m-%d %H:%M:%S')] ERROR:${NC} $1" | tee -a "$LOG_FILE"
exit 1
}
# 从这一步开始使用新的日志函数
log "输出目录: $OUTPUT_DIR"
# 检测内存
if command -v free >/dev/null 2>&1; then
TOTAL_MEM=$(free -g | awk 'NR==2{print $2}')
AVAILABLE_MEM=$(free -g | awk 'NR==2{print $7}')
log " 总内存: ${TOTAL_MEM}GB"
log " 可用内存: ${AVAILABLE_MEM}GB"
# 根据内存调整参数
if [ "$AVAILABLE_MEM" -lt 2 ]; then
warn "内存严重不足,使用最低配置"
COMPRESSION_LEVEL=1
MAX_MEMORY="1G"
MAX_THREADS=1
CHUNK_SIZE="1G"
elif [ "$AVAILABLE_MEM" -lt 4 ]; then
warn "内存较少,使用保守配置"
COMPRESSION_LEVEL=2
MAX_MEMORY="2G"
MAX_THREADS=1
elif [ "$AVAILABLE_MEM" -lt 8 ]; then
log "使用中等配置"
COMPRESSION_LEVEL=3
MAX_MEMORY="3G"
MAX_THREADS=2
else
log "使用标准配置"
COMPRESSION_LEVEL=4
MAX_MEMORY="4G"
MAX_THREADS=2
fi
else
warn "无法检测内存,使用保守配置"
COMPRESSION_LEVEL=2
MAX_MEMORY="2G"
MAX_THREADS=1
fi
# 检测磁盘空间
if [ -d "$SDK_DIR" ]; then
SDK_SIZE=$(du -sh "$SDK_DIR" 2>/dev/null | cut -f1 || echo "未知")
log " SDK大小: $SDK_SIZE"
fi
# 检查输出目录空间
if command -v df >/dev/null 2>&1; then
AVAILABLE_SPACE=$(df "$OUTPUT_DIR" | awk 'NR==2 {print $4}')
AVAILABLE_SPACE_GB=$((AVAILABLE_SPACE / 1024 / 1024))
log " 输出目录可用空间: ${AVAILABLE_SPACE_GB}GB"
if [ "$AVAILABLE_SPACE_GB" -lt 10 ]; then
warn "输出目录空间可能不足"
fi
fi
}
# ================================
# 前置检查
# ================================
pre_checks() {
log "2. 执行前置检查..."
# 检查SDK目录
if [ ! -d "$SDK_DIR" ]; then
error "SDK目录不存在: $SDK_DIR"
fi
# 检查必要工具
for cmd in tar xz split md5sum sha256sum; do
if ! command -v $cmd >/dev/null 2>&1; then
error "未找到命令: $cmd,请安装: sudo apt install xz-utils coreutils"
fi
done
log " 所有检查通过"
}
# ================================
# 清理SDK目录
# ================================
clean_sdk_directory() {
log "3. 清理SDK目录..."
cd "$SDK_DIR"
# 清理编译中间文件
# find . -name "*.o" -delete 2>/dev/null || true
# find . -name "*.a" -delete 2>/dev/null || true
# find . -name "*.ko" -delete 2>/dev/null || true
# find . -name "*.tmp" -delete 2>/dev/null || true
# find . -name "*.cmd" -delete 2>/dev/null || true
log " 取消清理"
}
# ================================
# 生成文件校验信息
# ================================
generate_file_checksums() {
log "4. 生成文件校验信息..."
cd "$SDK_DIR"
# 生成详细的文件列表
log " 生成文件列表..."
find . -type f > "$OUTPUT_DIR/file_list.txt" 2>/dev/null || true
# 生成SHA256校验
log " 生成SHA256校验(这可能需要一些时间)..."
find . -type f -print0 | xargs -0 sha256sum > "$OUTPUT_DIR/file_checksums.sha256" 2>/dev/null || {
warn "使用备用方法生成校验..."
find . -type f -exec sha256sum {} \; > "$OUTPUT_DIR/file_checksums.sha256" 2>/dev/null
}
FILE_COUNT=$(wc -l < "$OUTPUT_DIR/file_list.txt" 2>/dev/null || echo "未知")
log " 共 $FILE_COUNT 个文件,校验信息已生成"
}
# ================================
# 创建完整tar包并验证
# ================================
create_and_verify_tar() {
log "5. 创建完整tar包..."
cd "$SDK_DIR"
# 创建tar包
tar -cf "$TEMP_DIR/full.tar" . 2>&1 | tee -a "$LOG_FILE"
# 验证tar包完整性
log " 验证tar包完整性..."
if ! tar -tf "$TEMP_DIR/full.tar" >/dev/null 2>&1; then
error "tar包创建失败或已损坏"
fi
TAR_SIZE=$(du -h "$TEMP_DIR/full.tar" | cut -f1)
log " tar包创建成功,大小: $TAR_SIZE"
}
# ================================
# 压缩tar包
# ================================
compress_tar() {
log "6. 压缩tar包..."
cd "$TEMP_DIR"
log " 使用xz压缩(级别: $COMPRESSION_LEVEL, 线程: $MAX_THREADS, 内存限制: $MAX_MEMORY)..."
if ! xz -${COMPRESSION_LEVEL} \
-T${MAX_THREADS} \
--memlimit-compress=${MAX_MEMORY} \
"full.tar" 2>&1 | tee -a "$LOG_FILE"; then
error "压缩失败,请检查内存或磁盘空间"
fi
# 验证压缩文件
log " 验证压缩文件..."
if ! xz -t "full.tar.xz" 2>&1 | tee -a "$LOG_FILE"; then
error "压缩文件损坏"
fi
COMPRESSED_SIZE=$(du -h "full.tar.xz" | cut -f1)
log " 压缩完成,大小: $COMPRESSED_SIZE"
}
# ================================
# 分卷处理
# ================================
split_into_chunks() {
log "7. 分卷处理..."
cd "$TEMP_DIR"
log " 将压缩包分割为 $CHUNK_SIZE 的分卷..."
split -d -b $CHUNK_SIZE "full.tar.xz" "${SDK_NAME}_${CURRENT_DATE}.tar.xz.part."
# 移动分卷到输出目录
mv "${SDK_NAME}_${CURRENT_DATE}.tar.xz.part."* "$OUTPUT_DIR/"
PART_COUNT=$(ls "$OUTPUT_DIR/${SDK_NAME}_${CURRENT_DATE}.tar.xz.part."* 2>/dev/null | wc -l)
if [ "$PART_COUNT" -eq 0 ]; then
error "分卷创建失败"
fi
log " 创建了 $PART_COUNT 个分卷"
}
# ================================
# 生成校验文件
# ================================
generate_checksum_files() {
log "8. 生成分卷校验文件..."
cd "$OUTPUT_DIR"
if ls ${SDK_NAME}_${CURRENT_DATE}.tar.xz.part.* >/dev/null 2>&1; then
TOTAL_FILES=$(ls ${SDK_NAME}_${CURRENT_DATE}.tar.xz.part.* | wc -l)
# 生成MD5和SHA256校验
md5sum ${SDK_NAME}_${CURRENT_DATE}.tar.xz.part.* > sdk_parts_checksums.md5
sha256sum ${SDK_NAME}_${CURRENT_DATE}.tar.xz.part.* > sdk_parts_checksums.sha256
log " 生成校验文件,共 $TOTAL_FILES 个分卷"
# 验证校验文件
log " 验证校验文件..."
if sha256sum -c sdk_parts_checksums.sha256 >/dev/null 2>&1; then
log " ✅ 所有分卷校验通过"
else
warn "部分分卷校验失败"
fi
else
error "未找到分卷文件"
fi
}
# ================================
# 创建解压工具
# ================================
create_extraction_tools() {
log "9. 创建解压工具..."
cd "$OUTPUT_DIR"
# 创建智能解压脚本
cat > extract_sdk.sh << 'EOF'
#!/bin/bash
# RK3566 SDK 智能解压工具
# 自动验证完整性并解压
set -e
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
# 默认输出目录
OUTPUT_DIR="${1:-./extracted_sdk}"
SDK_PATTERN="rk3566_linux_sdk_*.tar.xz.part.*"
echo -e "${GREEN}RK3566 SDK 解压工具${NC}"
echo "================================"
# 检查文件是否存在
check_files_exist() {
if ! ls $SDK_PATTERN >/dev/null 2>&1; then
echo -e "${RED}错误: 未找到SDK分卷文件${NC}"
echo "请确保以下文件存在:"
echo " - rk3566_linux_sdk_YYYYMMDD.tar.xz.part.* (分卷)"
exit 1
fi
return 0
}
# 验证文件完整性
verify_integrity() {
echo -e "${YELLOW}[1/4] 验证文件完整性...${NC}"
if [ -f "sdk_parts_checksums.sha256" ]; then
echo "使用SHA256验证分卷文件..."
if sha256sum -c sdk_parts_checksums.sha256; then
echo -e "${GREEN}✓ 所有分卷验证通过${NC}"
else
echo -e "${RED}✗ 分卷文件损坏,请重新下载${NC}"
exit 1
fi
else
echo -e "${YELLOW}⚠ 未找到校验文件,跳过完整性验证${NC}"
fi
}
# 检查磁盘空间
check_disk_space() {
echo -e "${YELLOW}[2/4] 检查磁盘空间...${NC}"
local total_size=0
for f in $SDK_PATTERN; do
if [ -f "$f" ]; then
size=$(stat -c%s "$f" 2>/dev/null || du -b "$f" | cut -f1)
total_size=$((total_size + size))
fi
done
local required_space=$((total_size * 3)) # 解压需要2-3倍空间
local available_space=$(df . | awk 'NR==2 {print $4 * 1024}')
if [ "$available_space" -lt "$required_space" ]; then
echo -e "${RED}✗ 磁盘空间不足${NC}"
echo "需要: $(echo "scale=2; $required_space/1024/1024/1024" | bc) GB"
echo "可用: $(echo "scale=2; $available_space/1024/1024/1024" | bc) GB"
exit 1
fi
echo -e "${GREEN}✓ 磁盘空间充足${NC}"
}
# 解压文件
extract_files() {
echo -e "${YELLOW}[3/4] 解压SDK...${NC}"
# 创建输出目录
mkdir -p "$OUTPUT_DIR"
echo "合并分卷文件..."
cat $SDK_PATTERN > "$OUTPUT_DIR/combined.tar.xz"
echo "解压xz压缩包..."
cd "$OUTPUT_DIR"
xz -d combined.tar.xz
echo "解压tar包..."
tar -xf combined.tar
rm -f combined.tar
cd ..
echo -e "${GREEN}✓ 解压完成${NC}"
}
# 验证解压结果
verify_extraction() {
echo -e "${YELLOW}[4/4] 验证解压结果...${NC}"
if [ -f "file_checksums.sha256" ]; then
echo "验证解压文件完整性..."
cd "$OUTPUT_DIR"
if sha256sum -c ../file_checksums.sha256; then
echo -e "${GREEN}✓ 所有文件验证通过${NC}"
else
echo -e "${YELLOW}⚠ 部分文件验证失败${NC}"
fi
cd ..
else
echo -e "${YELLOW}⚠ 未找到文件校验信息,跳过验证${NC}"
fi
}
# 主流程
main() {
echo -e "${BLUE}输出目录: $OUTPUT_DIR${NC}"
check_files_exist
verify_integrity
check_disk_space
extract_files
verify_extraction
echo ""
echo -e "${GREEN}================================"
echo "SDK安装完成!"
echo "解压位置: $OUTPUT_DIR"
echo "================================"
echo -e "${NC}"
}
main "$@"
EOF
chmod +x extract_sdk.sh
log " 解压工具创建完成"
}
# ================================
# 创建说明文档
# ================================
create_documentation() {
log "10. 创建说明文档..."
cd "$OUTPUT_DIR"
TOTAL_FILES=$(ls ${SDK_NAME}_${CURRENT_DATE}.tar.xz.part.* 2>/dev/null | wc -l)
TOTAL_SIZE=$(du -sh . | cut -f1)
cat > README.md << EOF
# RK3566 SDK 分发包
## 包信息
- **打包时间**: $(date)
- **SDK版本**: $SDK_VERSION
- **打包脚本版本**: $SCRIPT_VERSION
- **分卷数量**: $TOTAL_FILES
- **分卷大小**: $CHUNK_SIZE
- **总大小**: $TOTAL_SIZE
- **压缩级别**: $COMPRESSION_LEVEL
## 文件清单
\`\`\`
$(ls -la ${SDK_NAME}_${CURRENT_DATE}.tar.xz.part.* 2>/dev/null || echo "无分卷文件")
\`\`\`
## 快速开始
### 方法一:自动解压(推荐)
\`\`\`bash
# 在当前目录解压
./extract_sdk.sh
# 指定输出目录
./extract_sdk.sh /path/to/target
\`\`\`
### 方法二:手动解压
\`\`\`bash
# 合并所有分卷
cat rk3566_linux_sdk_*.tar.xz.part.* > combined.tar.xz
# 解压
xz -d combined.tar.xz
tar -xf combined.tar
# 清理
rm combined.tar
\`\`\`
## 完整性验证
\`\`\`bash
# 验证分卷完整性
sha256sum -c sdk_parts_checksums.sha256
# 验证解压后文件完整性
sha256sum -c file_checksums.sha256
\`\`\`
## 系统要求
- **操作系统**: Linux (Ubuntu/CentOS等)
- **磁盘空间**: 至少 ${TOTAL_SIZE} 的2-3倍
- **内存**: 4GB 或以上
- **依赖工具**: tar, xz, sha256sum
## 重要提示
1. **不要**在打包文件所在目录直接解压!建议在空目录中运行解压脚本
2. 解压前请验证文件完整性
3. 确保有足够的磁盘空间
## 技术支持
如有问题请检查打包日志: $LOG_FILE
---
*由自动打包工具生成*
EOF
# 创建简明的使用说明
cat > QUICK_START.txt << EOF
快速开始:
1. 将所有文件复制到目标机器
2. 运行: ./extract_sdk.sh
3. SDK将被解压到 ./extracted_sdk/ 目录
验证完整性:
./extract_sdk.sh 会自动验证文件完整性
如需指定输出目录:
./extract_sdk.sh /path/to/your/target
EOF
log " 文档创建完成"
}
# ================================
# 最终验证
# ================================
final_verification() {
log "11. 最终验证..."
cd "$OUTPUT_DIR"
# 测试解压脚本
log " 测试解压脚本..."
if ! ./extract_sdk.sh "$TEMP_DIR/test_extract" >/dev/null 2>&1; then
warn "解压测试失败,但继续完成打包"
else
log " ✅ 解压测试成功"
# 清理测试目录
rm -rf "$TEMP_DIR/test_extract"
fi
# 生成最终报告
log " 生成最终报告..."
cat > PACKAGE_REPORT.txt << EOF
打包报告
=========
打包状态: 成功
打包时间: $(date)
SDK名称: $SDK_NAME
版本: $SDK_VERSION
分卷数量: $(ls ${SDK_NAME}_${CURRENT_DATE}.tar.xz.part.* 2>/dev/null | wc -l)
总大小: $(du -sh . | cut -f1)
文件列表:
$(ls -l ${SDK_NAME}_${CURRENT_DATE}.tar.xz.part.* 2>/dev/null | awk '{print $5, $9}')
校验信息:
$(cat sdk_parts_checksums.sha256 2>/dev/null | head -5)
...
下一步:
1. 验证: sha256sum -c sdk_parts_checksums.sha256
2. 测试: ./extract_sdk.sh test_dir
3. 分发: 将整个目录分发给用户
EOF
}
# ================================
# 完成报告
# ================================
generate_report() {
echo ""
echo -e "${GREEN}========================================${NC}"
echo -e "${GREEN} 🎉 打包完成!${NC}"
echo -e "${GREEN}========================================${NC}"
echo -e "${BLUE}输出目录:${NC} $OUTPUT_DIR"
echo -e "${BLUE}分卷数量:${NC} $(ls ${SDK_NAME}_${CURRENT_DATE}.tar.xz.part.* 2>/dev/null | wc -l)"
echo -e "${BLUE}总大小:${NC} $(du -sh $OUTPUT_DIR | cut -f1)"
echo -e "${BLUE}日志文件:${NC} $LOG_FILE"
echo ""
echo -e "${BLUE}生成的文件:${NC}"
echo -e "${GREEN}----------------------------------------${NC}"
ls -la "$OUTPUT_DIR" | tail -n +2
echo -e "${GREEN}----------------------------------------${NC}"
echo ""
echo -e "${BLUE}下一步:${NC}"
echo "1. 验证分卷完整性: cd $OUTPUT_DIR && sha256sum -c sdk_parts_checksums.sha256"
echo "2. 测试解压: cd $OUTPUT_DIR && ./extract_sdk.sh ./test_dir"
echo "3. 确认无误后分发给客户"
echo -e "${GREEN}========================================${NC}"
}
# ================================
# 清理函数
# ================================
cleanup() {
if [ -d "$TEMP_DIR" ]; then
log "清理临时目录..."
rm -rf "$TEMP_DIR"
fi
}
# 确保退出时清理
trap cleanup EXIT
# ================================
# 主执行流程
# ================================
main() {
echo -e "${GREEN}========================================${NC}"
echo -e "${GREEN} RK3566 SDK 完整打包工具${NC}"
echo -e "${GREEN} 版本: $SCRIPT_VERSION${NC}"
echo -e "${GREEN} 时间: $(date)${NC}"
echo -e "${GREEN}========================================${NC}"
# 环境检测(这会创建OUTPUT_DIR和设置日志函数)
detect_system_resources
# 前置检查
pre_checks
# 清理工作
clean_sdk_directory
# 生成校验信息
generate_file_checksums
# 创建完整tar包
create_and_verify_tar
# 压缩tar包
compress_tar
# 分卷处理
split_into_chunks
# 生成校验文件
generate_checksum_files
# 创建解压工具
create_extraction_tools
# 创建文档
create_documentation
# 最终验证
final_verification
# 完成报告
generate_report
}
# 执行主函数
main "$@"
打包脚本输出结果

文件说明
extract_sdk.sh 是一键解压脚本,使用方法见 QUICK_START.txt 。
README.md 是这个 SDK 压缩包的说明以及使用解压方法。
tar.xz.part.xx 是 SDK 压缩包在分包后的内容,解压时需要再合成解压。
.md5 和 .sha256 文件是校验文件,检测压缩包对不对,如果有错误就需要重新下载压缩包。
QUICK_START.txt 文件是快速开始文件,教你怎么解压。
一键解压脚本
extract_sdk.sh
#!/bin/bash
# RK3566 SDK 智能解压工具
# 自动验证完整性并解压
set -e
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
# 默认输出目录
OUTPUT_DIR="${1:-./extracted_sdk}"
SDK_PATTERN="rk3566_linux_sdk_*.tar.xz.part.*"
echo -e "${GREEN}RK3566 SDK 解压工具${NC}"
echo "================================"
# 检查文件是否存在
check_files_exist() {
if ! ls $SDK_PATTERN >/dev/null 2>&1; then
echo -e "${RED}错误: 未找到SDK分卷文件${NC}"
echo "请确保以下文件存在:"
echo " - rk3566_linux_sdk_YYYYMMDD.tar.xz.part.* (分卷)"
exit 1
fi
return 0
}
# 验证文件完整性
verify_integrity() {
echo -e "${YELLOW}[1/4] 验证文件完整性...${NC}"
if [ -f "sdk_parts_checksums.sha256" ]; then
echo "使用SHA256验证分卷文件..."
if sha256sum -c sdk_parts_checksums.sha256; then
echo -e "${GREEN}✓ 所有分卷验证通过${NC}"
else
echo -e "${RED}✗ 分卷文件损坏,请重新下载${NC}"
exit 1
fi
else
echo -e "${YELLOW}⚠ 未找到校验文件,跳过完整性验证${NC}"
fi
}
# 检查磁盘空间
check_disk_space() {
echo -e "${YELLOW}[2/4] 检查磁盘空间...${NC}"
local total_size=0
for f in $SDK_PATTERN; do
if [ -f "$f" ]; then
size=$(stat -c%s "$f" 2>/dev/null || du -b "$f" | cut -f1)
total_size=$((total_size + size))
fi
done
local required_space=$((total_size * 3)) # 解压需要2-3倍空间
local available_space=$(df . | awk 'NR==2 {print $4 * 1024}')
if [ "$available_space" -lt "$required_space" ]; then
echo -e "${RED}✗ 磁盘空间不足${NC}"
echo "需要: $(echo "scale=2; $required_space/1024/1024/1024" | bc) GB"
echo "可用: $(echo "scale=2; $available_space/1024/1024/1024" | bc) GB"
exit 1
fi
echo -e "${GREEN}✓ 磁盘空间充足${NC}"
}
# 解压文件
extract_files() {
echo -e "${YELLOW}[3/4] 解压SDK...${NC}"
# 创建输出目录
mkdir -p "$OUTPUT_DIR"
echo "合并分卷文件..."
cat $SDK_PATTERN > "$OUTPUT_DIR/combined.tar.xz"
echo "解压xz压缩包..."
cd "$OUTPUT_DIR"
xz -d combined.tar.xz
echo "解压tar包..."
tar -xf combined.tar
rm -f combined.tar
cd ..
echo -e "${GREEN}✓ 解压完成${NC}"
}
# 验证解压结果
verify_extraction() {
echo -e "${YELLOW}[4/4] 验证解压结果...${NC}"
if [ -f "file_checksums.sha256" ]; then
echo "验证解压文件完整性..."
cd "$OUTPUT_DIR"
if sha256sum -c ../file_checksums.sha256; then
echo -e "${GREEN}✓ 所有文件验证通过${NC}"
else
echo -e "${YELLOW}⚠ 部分文件验证失败${NC}"
fi
cd ..
else
echo -e "${YELLOW}⚠ 未找到文件校验信息,跳过验证${NC}"
fi
}
# 主流程
main() {
echo -e "${BLUE}输出目录: $OUTPUT_DIR${NC}"
check_files_exist
verify_integrity
check_disk_space
extract_files
verify_extraction
echo ""
echo -e "${GREEN}================================"
echo "SDK安装完成!"
echo "解压位置: $OUTPUT_DIR"
echo "================================"
echo -e "${NC}"
}
main "$@"


评论