#!/usr/bin/env bash # ============================================================================= # 一键构建离线部署包(在【能联网】的打包机上跑) # # setup_server.sh(装环境) → make_portable.sh(自包含) → pack.sh(打包) 三步合一 # # 用法: # bash build_bundle.sh cpu # CPU 版包:johnvansickle ffmpeg,老 glibc 也能跑 # bash build_bundle.sh gpu # GPU 版包:BtbN cuda ffmpeg,目标机需 glibc>=2.28 # bash build_bundle.sh gpu --whisper-gpu # GPU 版 + 把 CUDA 库打进包(目标机无系统 CUDA 也能 whisper GPU) # # 产物: /tmp/ocr_offline_bundle.tar.gz # 拷到目标机后: bash deploy.sh /tmp/ocr_offline_bundle.tar.gz /opt # ============================================================================= set -euo pipefail cd "$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" VARIANT="${1:-cpu}" # cpu | gpu WHISPER_GPU_FLAG=0 [ "${2:-}" = "--whisper-gpu" ] && WHISPER_GPU_FLAG=1 log() { echo -e "\n\033[1;36m##### $* #####\033[0m"; } case "$VARIANT" in cpu) FFV=cpu ;; gpu) FFV=gpu ;; *) echo "用法: bash build_bundle.sh [cpu|gpu] [--whisper-gpu]"; exit 1 ;; esac SD="$(cd "$(dirname "$0")" && pwd)" log "构建 $VARIANT 版离线包 (whisper_gpu=$WHISPER_GPU_FLAG)" # 1) 装基础环境(已装过会跳过大部分) log "1/3 setup_server.sh(装 gcc/uv/python/依赖)" bash "$SD/setup_server.sh" # 2) 转自包含(python+模型+ffmpeg 进项目) log "2/3 make_portable.sh(FFMPEG_VARIANT=$FFV)" FFMPEG_VARIANT="$FFV" WHISPER_GPU="$WHISPER_GPU_FLAG" bash "$SD/make_portable.sh" # 3) 打包(按变体命名,cpu/gpu 两个包不会互相覆盖) OUT="/tmp/ocr_bundle_${VARIANT}.tar.gz" log "3/3 pack.sh(打成 tar → $OUT)" bash "$SD/pack.sh" "$OUT" echo echo "✅ 完成。产物: $OUT" echo " 拷到目标机后: bash $SD/deploy.sh $OUT /opt"