NFCcreate-web/deploy_arm.sh
2025-09-25 19:04:00 +08:00

227 lines
6.1 KiB
Bash

#!/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"