#!/bin/bash # NTAG424 ARM 部署腳本 # 支援動態連結版本的自動部署 set -e TARGET_HOST="$1" TARGET_USER="$2" ARM_ARCH="$3" if [[ -z "$TARGET_HOST" || -z "$TARGET_USER" || -z "$ARM_ARCH" ]]; then echo "🚀 NTAG424 ARM 部署腳本" echo "========================" echo "" echo "用法: ./deploy_arm.sh <主機> <使用者> <架構>" echo "" echo "架構選項:" echo " arm64 - ARM 64-bit (aarch64)" echo " arm32 - ARM 32-bit (armhf)" echo " armel - ARM 軟浮點" echo "" echo "範例:" echo " ./deploy_arm.sh 192.168.1.100 pi arm64" echo " ./deploy_arm.sh raspberry.local user arm32" exit 1 fi echo "🚀 NTAG424 ARM 部署腳本" echo "========================" echo "" echo "目標主機: $TARGET_HOST" echo "使用者: $TARGET_USER" echo "架構: $ARM_ARCH" echo "" # 設定函式庫目錄和發布目錄 case "$ARM_ARCH" in "arm64") LIB_DIR="ufr-lib/linux/aarch64" RELEASE_DIR="${ARM_ARCH}_release" LIB_NAME="libuFCoder-aarch64.so" ;; "arm32") LIB_DIR="ufr-lib/linux/arm-hf" RELEASE_DIR="${ARM_ARCH}_release" LIB_NAME="libuFCoder-armhf.so" ;; "armel") LIB_DIR="ufr-lib/linux/arm-el" RELEASE_DIR="${ARM_ARCH}_release" LIB_NAME="libuFCoder-armel.so" ;; *) echo "❌ 不支援的架構: $ARM_ARCH" echo "支援的架構: arm64, arm32, armel" exit 1 ;; esac # 檢查本地檔案 echo "📋 檢查本地檔案..." if [[ ! -d "$LIB_DIR" ]]; then echo "❌ 函式庫目錄不存在: $LIB_DIR" exit 1 fi if [[ ! -f "$LIB_DIR/$LIB_NAME" ]]; then echo "❌ 函式庫檔案不存在: $LIB_DIR/$LIB_NAME" exit 1 fi if [[ ! -d "$RELEASE_DIR" ]]; then echo "⚠️ 發布目錄不存在: $RELEASE_DIR" echo "正在編譯 $ARM_ARCH 版本..." make $ARM_ARCH fi if [[ ! -f "$RELEASE_DIR/nt4h_c_example" ]]; then echo "❌ 執行檔不存在: $RELEASE_DIR/nt4h_c_example" echo "請先編譯: make $ARM_ARCH" exit 1 fi echo "✅ 本地檔案檢查完成" echo "" # 檢查目標主機連接 echo "🔗 檢查目標主機連接..." if ! ssh -o ConnectTimeout=5 ${TARGET_USER}@${TARGET_HOST} 'echo "連接成功"' >/dev/null 2>&1; then echo "❌ 無法連接到 ${TARGET_USER}@${TARGET_HOST}" echo "請檢查:" echo "• 主機名稱或 IP 是否正確" echo "• SSH 金鑰是否已設定" echo "• 目標設備是否開機並連接網路" exit 1 fi echo "✅ 目標主機連接正常" echo "" # 檢查目標架構 echo "🎯 檢查目標設備架構..." TARGET_ARCH=$(ssh ${TARGET_USER}@${TARGET_HOST} 'uname -m') echo "目標設備架構: $TARGET_ARCH" case "$ARM_ARCH" in "arm64") if [[ "$TARGET_ARCH" != "aarch64" ]]; then echo "⚠️ 架構不匹配!編譯目標 $ARM_ARCH,但設備是 $TARGET_ARCH" read -p "是否繼續部署? [y/N]: " continue_deploy if [[ "$continue_deploy" != "y" && "$continue_deploy" != "Y" ]]; then echo "取消部署" exit 1 fi fi ;; "arm32") if [[ "$TARGET_ARCH" != "armv7l" && "$TARGET_ARCH" != "armv6l" ]]; then echo "⚠️ 架構不匹配!編譯目標 $ARM_ARCH,但設備是 $TARGET_ARCH" read -p "是否繼續部署? [y/N]: " continue_deploy if [[ "$continue_deploy" != "y" && "$continue_deploy" != "Y" ]]; then echo "取消部署" exit 1 fi fi ;; esac echo "" # 部署檔案 echo "📦 部署檔案到目標設備..." echo "• 上傳執行檔..." scp ${RELEASE_DIR}/nt4h_c_example ${TARGET_USER}@${TARGET_HOST}:/home/${TARGET_USER}/ echo "• 上傳函式庫..." ssh ${TARGET_USER}@${TARGET_HOST} 'mkdir -p ufr-lib' scp -r ${LIB_DIR}/* ${TARGET_USER}@${TARGET_HOST}:/home/${TARGET_USER}/ufr-lib/ echo "• 上傳配置檔案..." if [[ -f "keys.txt" ]]; then scp keys.txt ${TARGET_USER}@${TARGET_HOST}:/home/${TARGET_USER}/ echo " ✅ keys.txt" else echo " ⚠️ keys.txt 不存在,跳過" fi if [[ -f "urls.txt" ]]; then scp urls.txt ${TARGET_USER}@${TARGET_HOST}:/home/${TARGET_USER}/ echo " ✅ urls.txt" else echo " ⚠️ urls.txt 不存在,跳過" fi echo "" # 建立啟動腳本 echo "📝 建立啟動腳本..." ssh ${TARGET_USER}@${TARGET_HOST} 'cat > run_ntag424.sh << "EOF" #!/bin/bash # NTAG424 啟動腳本 - 自動設定函式庫路徑 SCRIPT_DIR="$(dirname "$(readlink -f "$0")")" export LD_LIBRARY_PATH="$SCRIPT_DIR/ufr-lib:$LD_LIBRARY_PATH" # 檢查函式庫 if [[ ! -f "$SCRIPT_DIR/ufr-lib/libuFCoder-"*".so" ]]; then echo "❌ 找不到 uFCoder 函式庫" echo "請確認 ufr-lib 目錄存在並包含正確的 .so 檔案" exit 1 fi # 執行主程式 "$SCRIPT_DIR/nt4h_c_example" "$@" EOF' echo "✅ 啟動腳本建立完成" echo "" # 設定權限 echo "🔐 設定執行權限..." ssh ${TARGET_USER}@${TARGET_HOST} 'chmod +x nt4h_c_example run_ntag424.sh' echo "✅ 權限設定完成" echo "" # 測試部署 echo "🧪 測試部署..." echo "執行測試命令: ./run_ntag424.sh help" echo "" if ssh ${TARGET_USER}@${TARGET_HOST} './run_ntag424.sh help' 2>/dev/null; then echo "" echo "🎉 部署成功!" echo "" echo "📋 部署總結:" echo "• 執行檔: ~/nt4h_c_example" echo "• 函式庫: ~/ufr-lib/" echo "• 啟動腳本: ~/run_ntag424.sh (推薦使用)" echo "• 配置檔案: ~/keys.txt, ~/urls.txt" echo "" echo "🚀 使用方法:" echo "ssh ${TARGET_USER}@${TARGET_HOST}" echo "./run_ntag424.sh help" echo "./run_ntag424.sh verify" echo "./run_ntag424.sh setsdm" echo "" else echo "" echo "⚠️ 測試執行失敗,但檔案已部署" echo "" echo "可能的問題:" echo "• 架構不相容" echo "• 缺少依賴函式庫" echo "• 權限問題" echo "" echo "手動測試:" echo "ssh ${TARGET_USER}@${TARGET_HOST}" echo "export LD_LIBRARY_PATH=~/ufr-lib:\$LD_LIBRARY_PATH" echo "./nt4h_c_example help" fi echo "" echo "📞 如需技術支援,請參考 ARM_BUILD_GUIDE.md"