227 lines
6.1 KiB
Bash
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" |