ARM40-A5应用——ARM40文件的半自动远程更新(ARM40-SEMIAUTO-OTA)
2018.9.21
在应用程序升级以后,希望ARM40能够从远程服务器下载并安装新版本的应用程序。
本文提供一种应用程序的手动远程更新的参考方法。
一、半自动远程更新的步骤
1.1、准备服务器端文件
服务器端涉及到的目录和文件如下:
/home/ARM40-A5/ARM40-A5-projects/noise_rdace/APP_20180917/rdace-manager #目录,存在管理文件
/home/ARM40-A5/ARM40-A5-projects/noise_rdace/APP_20180917/RELEASE #目录,存放下载到ARM40的文件
/home/ARM40-A5/ARM40-A5-projects/noise_rdace/APP_20180917/rdace-manager/rdace_update_manager.sh #脚本文件
/home/ARM40-A5/ARM40-A5-projects/noise_rdace/APP_20180917/rdace-manager/rdace_update.sh #脚本文件
1.2、ARM40上的操作
(1)首先将服务器上rdace_update_manager.sh文件下载到ARM40的临时文件夹中:
/tmp/rdace_update_manager.sh
(2)执行/tmp/rdace_update_manager.sh,该程序会从服务器上下载 rdace_update.sh文件,然后运行该文件。
rdace_update.sh将 “需要部署到ARM40的文件” 都rsync到ARM40的相应位置,并chmod各个文件。
(3)最后reboot重启ARM40,检查并测试。
详情见下文各部分。
二、准备服务器端文件
本示例中,服务器47.98.140.167上rsync的RDACE_IDC模块的地址为:
/home/ARM40-A5/ARM40-A5-projects/noise_rdace/APP_20180917
含 RELEASE和rdace-manager两个目录。
rdace-manager 目录中存放rdace_update_manager.sh和rdace_update.sh 脚本,内容见附(1)(2)。
2.1、rdace_update.sh
脚本 rdace_update.sh依次把 BATCH_FILES 中罗列的文件拷贝到ARM40相应的位置,然后修改各文件的chmod。
我们注释一下 BATCH_FILES 中的各文件:
BATCH_FILES="etc/ppp/peers/M26-gprs #M26
etc/ppp/peers/M26-chat-connect #M26
etc/ppp/peers/M26-chat-disconnect #M26
etc/ppp/ip-up #M26
etc/ppp/pon-M26-auto.sh #M26
etc/ppp/ppp-off #M26
usr/bin/holer #holer
etc/ssh/sshd_config #holer
opt/user/date_update.sh #time
opt/user/cron_user.sh #cron
etc/network/if-public-network.sh #route
opt/rdace10/ #APP
tmp/sqlite3.tar #QT
tmp/tslib.tar #QT
tmp/qte4.8.7.tar #QT
tmp/libstdc++.so.tar #QT
etc/pointercal" #触摸屏校准文件
2.2、rdace_update_manager.sh
rdace_update_manager.sh 则负责从服务器拷贝rdace_update.sh到ARM40的/tmp文件夹,然后执行rdace_update.sh完成各文件的部署。
三、 ARM40上的操作
3.1、rdace_update_manager.sh 脚本
将服务器上的 rdace_update_manager.sh 下载到ARM40-A5的/tmp/中:
rsync -avz \
--timeout=60 \
--password-file=/etc/rsync.passwd \
[email protected]:/home/ARM40-A5/ARM40-A5-projects/noise_rdace/APP_20180917/rdace-manager/rdace_update_manager.sh \
/tmp/
然后执行该脚本:
sh /tmp/rdace_update_manager.sh
脚本 rdace_update_manager.sh 的执行示例(删去了部分rsync的log):
root@ARM40:/tmp# ./rdace_update_manager.sh
hello RDACE_IDC
receiving incremental file list
rdace_update.sh
hello ARM40
/etc/ppp/peers/M26-gprs OK
/etc/ppp/peers/M26-chat-connect OK
/etc/ppp/peers/M26-chat-disconnect OK
/etc/ppp/ip-up OK
/etc/ppp/pon-M26-auto.sh OK
/etc/ppp/ppp-off OK
/usr/bin/holer OK
/etc/ssh/sshd_config OK
/opt/user/date_update.sh OK
/opt/user/cron_user.sh OK
/etc/network/if-public-network.sh OK
/etc/pointercal OK
batch_files OK
3.2、注意事项
- 1、ARM40设备每台都有唯一的MAC地址,ID号等信息,这些信息更新后需逐一修改相关的信息。
- 2、holer的HOLER_ACCESS_KEY,每台都不相同,需修改。
- 3、更新后需reboot重启ARM40.
参考文章:
ARM40-A5应用——使用rsync与Linux服务器的远程数据同步
ARM40-A5应用——ARM40文件的自动远程更新(ARM40-AUTO-OTA)
嵌入式Linux固件升级
https://blog.csdn.net/jsfzdd/article/details/6158258
Linux下远程升级脚本
https://blog.csdn.net/sdvch/article/details/14109997
Android应用增量更新 - Smart App Updates
https://github.com/cundong/SmartAppUpdates
荟聚计划:共商 共建 共享 Grant
附:
(1)脚本 rdace_update_manager.sh 的内容如下:
#!/bin/sh
echo "hello RDACE_IDC"
cd `dirname $0` #get pwd
TMP_DIR=/tmp
[email protected]::RDACE_IDC
UPDATE_BATCH_SERVER=$SERVER_IDC/rdace-manager/rdace_update.sh #the batch script in server
UPDATE_BATCH_LOCAL=$TMP_DIR/rdace_update.sh #copy to ARM40
#copy the batch script file in server to ARM40
rsync -avz --timeout=60 --password-file=/etc/rsync.passwd $UPDATE_BATCH_SERVER $UPDATE_BATCH_LOCAL
if [ "$?" != "0" ]; then #if rsync return error, game over
exit 1
fi
chmod 777 $UPDATE_BATCH_LOCAL
sh $UPDATE_BATCH_LOCAL #do the batch script file
(2)脚本rdace_update.sh 的内容如下:
#!/bin/sh
#rdace_update.sh
echo "hello ARM40"
cp_file_to_ARM40()
{
rsync -a [email protected]::RDACE_IDC/RELEASE/$1 /$1
if [ "$?" != "0" ]; then # rsync is not OK, game over
return 1
fi
echo "/$1 OK"
return 0
}
BATCH_FILES="etc/ppp/peers/M26-gprs
etc/ppp/peers/M26-chat-connect
etc/ppp/peers/M26-chat-disconnect
etc/ppp/ip-up
etc/ppp/pon-M26-auto.sh
etc/ppp/ppp-off
usr/bin/holer
etc/ssh/sshd_config
opt/user/date_update.sh
opt/user/cron_user.sh
etc/network/if-public-network.sh
opt/rdace10/
tmp/sqlite3.tar
tmp/tslib.tar
tmp/qte4.8.7.tar
tmp/libstdc++.so.tar
etc/pointercal"
batch_files()
{
for batch in $BATCH_FILES
do
cp_file_to_ARM40 $batch
if [ "$?" != "0" ]; then
return 1
fi
done
echo "batch_files OK"
return 0
}
if [ ! -d /opt/rdace-manager ]; then
mkdir -p /opt/rdace-manager
fi
batch_files
chmod 755 /etc/ppp/peers/M26-gprs
chmod 755 /etc/ppp/peers/M26-chat-connect
chmod 755 /etc/ppp/peers/M26-chat-disconnect
chmod 755 /etc/ppp/ip-up
chmod 755 /etc/ppp/pon-M26-auto.sh
chmod 755 /etc/ppp/ppp-off
chmod 644 /etc/ssh/sshd_config
chmod 755 /opt/user/date_update.sh
chmod 755 /opt/user/cron_user.sh
chmod 755 /etc/network/if-public-network.sh
tar xvf /tmp/sqlite3.tar -C /opt/
tar xvf /tmp/tslib.tar -C /opt/
tar xvf /tmp/qte4.8.7.tar -C /opt/
tar xvf /tmp/libstdc++.so.tar -C /lib/
chmod 644 /pointercal