ARM40-A5应用——从服务器更新ARM40上的APP应用程序(ARM40-APP-OTA)

ARM40-A5应用——从服务器更新ARM40上的APP应用程序(ARM40-APP-OTA)

2018.8.15

    ARM40部署提要:
    (1)根据第5节建立各个文件;
    (2)按3.5节测试;

    在应用程序升级以后,希望ARM40能够自动远程从服务器下载并安装新版本的应用程序。
    本文提供一种远程更新应用程序的方法,并采用知行合一的方式,边讲解,边实验,以利即学即用。

一、远程更新应用程序的整体策略

   远程更新应用程序的整体策略,主要分两步:第一是怎么知道有新版本,第二是怎么升级到新版本。
   假定:ARM40端rdace_app需要将 /opt/rdace11 需要更新为 /opt/rdace12。

  怎么知道有新版本?

  1. ARM40设备定期(例如每24小时)运行一次远程更新脚本rdace_update_manager.sh;
  2. 远程更新脚本从服务器下载版本号文件,若发现与ARM40本地的版本号文件不同,则需要更新;
  3. ARM40下载服务器上的脚本文件rdace_update.sh,然后执行该脚本文件,由该脚本文件完成后续的更新;

  怎么升级到新版本?(以下为rdace_update.sh 的任务)

  4. rdace_update.sh脚本文件从服务器下载需要更新的文件;例如:
  ① 将 /opt/rdace11 目录拷贝为 /tmp/rdace12 目录;(假定当前版本为/opt/rdace11)
  ② 使用rsync下载服务器 /opt/idc/rdace-manager/rdace.md5 文件到 /tmp/rdace-manager/ 中;
  ③ 使用rsync下载服务器 /opt/idc/rdace12/ 目录的文件到 /tmp/rdace12 中;(rsync为增量下载,流量少)
  ④ 下载完毕后,检查各文件的MD5校验;
  5. 关闭正在运行的应用程序(根据实际需要);
  6. 替换应用程序的相关文件;
  ① 将/tmp/rdace12 目录拷贝为 /opt/rdace12目录;
  ② 查看/opt/rdace10目录是否存在,如果存在则删除;
  ③ 替换其他需要更新的文件;(不建议四处安放app相关文件,会增加更新的复杂程度)
  ④ 将 rdace_app 的软连接指向 /opt/rdace12 目录中的rdace_app12;
  7. 生成一个标识升级成功的文件 $ARM_ID_VER_TIME,上传到服务器,以便服务器知晓该设备已更新到某版本;
  8. 更新ARM40本地版本号文件;
  9. 重启ARM40板卡(根据应用程序的需要),完成更新。
  要点:
  ① 远程更新的相关操作,主要在临时文件夹中完成,避免磨损存储器;
  ② 各文件名不要包含空格、中文字符等Linux不推荐的字符;
  ③ 更新过程中尽量不要断电;
  ④ 主要使用rsync命令完成具体文件的上传与下载,该命令见《ARM40-A5应用——使用rsync与Linux服务器的远程数据同步》。
  ⑤ APP升级工具与APP安装工具有相似之处,可以结合使用。

二、ARM40端远程更新脚本rdace_update_manager.sh

2.1、ARM40端远程更新脚本rdace_update_manager.sh详解

  远程更新脚本rdace_update_manager.sh的流程图示如下:(为便于理解下文的代码,此处引用代码中的名称)
这里写图片描述
  (1)在ARM40上建立 rdace_update_manager.sh 文件,
  touch /opt/rdace-manager/rdace_update_manager.sh
  chmod 755 /opt/rdace-manager/rdace_update_manager.sh
  其内容如下:

#!/bin/sh
#filename:rdace_update_manager.sh, this scripts is store in ARM40
#as /opt/rdace-manager/rdace_update_manager.sh
#Usage:chmod 777 /opt/rdace-manager/rdace_update_manager.sh
#sh /opt/rdace-manager/rdace_update_manager.sh
echo "hello ARM40_IDC"
cd `dirname $0`                                         #get pwd 
PWD_DIR=`pwd`                                           #/opt/rdace-manager
TMP_DIR=/tmp/rdace-manager
SERVER_IDC=ARM40-A5@47.98.140.167::ARM40_IDC
VERSION_SERVER=$SERVER_IDC/rdace-manager/rdace.version  #the version file in server
VERSION_SERVER_CC=$TMP_DIR/rdace.version.server         #copy to ARM40
VERSION_LOCAL=$PWD_DIR/rdace.version                    #version file in ARM40
VERSION_LOCAL_CC=$TMP_DIR/rdace.version.tmp             #the carboncopy of version file in ARM40
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
if [ ! -d $TMP_DIR ]; then                              #if /tmp/radce-manager not exist
        mkdir -p $TMP_DIR
fi
#tmpfile used as manager work
if [ ! -e $VERSION_LOCAL_CC ]; then
        cp $VERSION_LOCAL $VERSION_LOCAL_CC             #build the carboncopy of version file in ARM40
fi                                                                               

#[email protected]::ARM40_IDC/rdace-manager/rdace.version                    
# --> /tmp/rdace-manager/rdace.version.server                                           
rsync -avz --timeout=60 --password-file=/etc/rsync.passwd       \                       
        $VERSION_SERVER $VERSION_SERVER_CC              #copy the version file in server to ARM40
if [ "$?" != "0" ]; then                                #if rsync return error, game over
        exit 1                     
fi                                                                                                    

#diff "the carboncopy of version file in ARM40" and the version file in server                        
diff -a $VERSION_SERVER_CC $VERSION_LOCAL_CC                        
if [ "$?" == "0" ]; then                                # it's same, game over
        exit 1                                                      
fi                                                                                               

#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)在ARM40上建立 rdace.version 文件,
  touch /opt/rdace-manager/rdace.version #内容为空
  chmod 777 /opt/rdace-manager/rdace.version
  (3)服务器上的版本号文件VERSION_SERVER=$SERVER_IDC/rdace-manager/rdace.version,内容如下:(修改该文件,包括空格、注释等,都会被ARM40认为与本地版本号文件有差异)
  DEVTYPE=RDACE01
  VERSION=V0.01
  DATE=2018.08.15
  第1行:设备类型;
  第2行:软件版本;
  第3行:日期;

2.2、ARM40端远程更新脚本rdace_update_manager.sh实验

  我们实验整体策略的第2步和第3步,即:
  2. 远程更新脚本(rdace_update_manager.sh)从服务器下载版本号文件(rdace.version),若发现与ARM40本地的版本号文件不同,则需要更新;
  3. ARM40下载服务器上的脚本文件rdace_update.sh,然后执行该脚本文件,由该脚本文件完成后续的更新;
  试验步骤如下:
  (1)在ARM40上新建目录与文件
  touch /opt/rdace-manager/rdace_update_manager.sh #文件内容见2.1节的代码清单1
  chmod 755 /opt/rdace-manager/rdace_update_manager.sh
  touch /opt/rdace-manager/rdace.version #文件内容暂时为空
  chmod 777 /opt/rdace-manager/rdace.version
  (2)在服务器上新建目录与文件
  touch /opt/idc/rdace-manager/rdace_update.sh #
  touch /opt/idc/rdace-manager/rdace.version #文件内容见2.1节的(3)
  mkdir -p /opt/idc/rdace12
  mkdir -p /opt/idc/rdace-manager/logs/ #该目录存放升级成功后文件
  其中 /opt/idc/rdace-manager/rdace_update.sh 文件的内容为:

#!/bin/sh
#rdace_update.sh
echo "hello ARM40"

  继续,在ARM40上实验。
  (3)首先检查 rsync 命令是否能够正确执行:(参考《ARM40-A5应用——使用rsync与Linux服务器的远程数据同步》)

rsync -avz ARM40-A5@47.98.140.167::ARM40_IDC/rdace-manager/rdace.version /tmp/rdace-manager/ --password-file=/etc/rsync.passwd 
This rsync lacks old-style --compress due to its external zlib. Try -zz.
Continuing without compression.
receiving incremental file list
rdace.version
sent 43 bytes received 155 bytes 132.00 bytes/sec
total size is 49 speedup is 0.25
cat /tmp/rdace-manager/rdace.version
DEVTYPE=RDACE01
VERSION=V0.01
DATE=2018.08.15

  (4)在ARM40上执行远程更新脚本rdace_update_manager.sh
  sh /opt/rdace-manager/rdace_update_manager.sh

hello ARM40_IDC //rdace_update_manager.sh脚本中给出的打印
//......中间的打印省略        
hello ARM40     //服务器/opt/idc/rdace-manager/rdace_update.sh脚本中给出的打印    
cat /tmp/rdace-manager/rdace.version.server
DEVTYPE=RDACE01
VERSION=V0.01
DATE=2018.08.15

  可见,能够从服务器下载脚本rdace_update.sh并运行该脚本。

三、服务器端脚本rdace_update.sh

3.1、服务器端脚本rdace_update.sh详解

  服务器端脚本rdace_update.sh被下载到ARM40后,即在ARM40上运行。该脚本的任务,是执行整体策略的第4步~第9步,即:
  4. rdace_update.sh脚本文件从服务器下载需要更新的文件;例如:
  ① 将 /opt/rdace11 目录拷贝为 /tmp/rdace12 目录;(假定当前版本为/opt/rdace11)
  ② 使用rsync下载服务器 /opt/idc/rdace-manager/rdace.md5 文件到 /tmp/rdace-manager/ 中;
  ③ 使用rsync下载服务器 /opt/idc/rdace12/ 目录的文件到 /tmp/rdace12 中;(rsync为增量下载,流量少)
  ④ 下载完毕后,检查各文件的MD5校验;
  5. 关闭正在运行的应用程序(根据实际需要);
  6. 替换应用程序的相关文件;
  ① 将/tmp/rdace12 目录拷贝为 /opt/rdace12目录;
  ② 查看/opt/rdace10目录是否存在,如果存在则删除;
  ③ 替换其他需要更新的文件;(不建议四处安放app相关文件,会增加更新的复杂程度)
  ④ 将 rdace_app 的软连接指向 /opt/rdace12 目录中的rdace_app12;
  7. 生成一个标识升级成功的文件 $ARM_ID_VER_TIME,上传到服务器,以便服务器知晓该设备已更新到某版本;
  8. 更新ARM40本地版本号文件;
  9. 重启ARM40板卡(根据应用程序的需要),完成更新。
  参考代码见附(1)的rdace_update.sh 文件。

3.2、服务器端md5生成脚本rdace-md5-make.sh

  (1)在服务器上的建立 /opt/idc/rdace-manager/rdace-md5-make.sh文件:
  touch /opt/idc/rdace-manager/rdace-md5-make.sh
  chmod 777 /opt/idc/rdace-manager/rdace-md5-make.sh
  添加内容:

cd `dirname $0`
cd ../rdace12/
find ./ -type f -print0 | xargs -0 md5sum > ../rdace-manager/rdace.md5

  也可以用echo逐行添加:

echo "cd \`dirname \$0\`" > /opt/idc/rdace-manager/rdace-md5-make.sh
echo "cd ../rdace12/" >> /opt/idc/rdace-manager/rdace-md5-make.sh
echo "find ./ -type f -print0 | xargs -0 md5sum > ../rdace-manager/rdace.md5" >> /opt/idc/rdace-manager/rdace-md5-make.sh

  执行该脚本文件:
  sh /opt/idc/rdace-manager/rdace-md5-make.sh
   会生成/opt/idc/rdace-manager/rdace.md5文件:
  ls -l /opt/idc/rdace-manager/rdace.md5

3.3、ARM40端文件 $ARM_ID_VER_TIME

  建立生成$AR_ID_VER_TIME文件的脚本:
  touch /opt/rdace-manager/rdace-idvertime-make.sh
  chmod 777 /opt/rdace-manager/rdace-idvertime-make.sh
  内容为:

#!/bin/sh
RDACE_ID=null
RDACE_VER=null
RDACE_TIME=null
VERSION_SERVER_CC=/tmp/rdace-manager/rdace.version.server
if [ -e $VERSION_SERVER_CC ]; then
        RDACE_ID=`awk '/RDACE_ID/ {print $1}' /opt/rdace-manager/rdace.info |cut -d '=' -f 2`
        RDACE_VER=`awk '/VERSION/ {print $1}' $VERSION_SERVER_CC |cut -d '=' -f 2`
        RDACE_TIME=`awk '/DATE/ {print $1}' $VERSION_SERVER_CC |cut -d '=' -f 2`
fi
touch /tmp/rdace-manager/$RDACE_ID-$RDACE_TIME-$RDACE_VER.info        #$ARM_ID_VER_TIME file
chmod 777 /tmp/rdace-manager/$RDACE_ID-$RDACE_TIME-$RDACE_VER.info

3.4、ARM40端文件 rdace.info文件

  建立/opt/rdace-manager/rdace.info文件,见附(2),其内容至少含RDACE_ID这一项,例如 RDACE_ID=A5A1880001

3.5、服务器端脚本rdace_update.sh实验

  更新服务器上的 /opt/idc/rdace-manager/rdace.version 文件,然后在ARM40上运行:
  sh /opt/rdace-manager/rdace_update_manager.sh
  打印见附(1)。

四、定时更新

  ARM40设备定期(例如每24小时)运行一次远程更新脚本rdace_update_manager.sh。
  可以通过crontab排程解决,参考《ARM40-A5应用——与网络时间的同步》中crontab相关的内容。摘录如下:
  为与网络时间同步,在 /etc/profile 文件中,开机会运行 /opt/user/cron_user.sh

export TZ='CST-8'                       # CST-8, Beijing time
logintty=$(tty|grep -c "console")
if [ $logintty -eq 1 ]; then            # ssh,telnet can't get into this line
        /opt/user/date_update.sh &      # when startup,update date
        /opt/user/cron_user.sh &        # cron
fi

  其中 /opt/user/cron_user.sh 的内容为:

#!/bin/sh

if [ ! -d /var/spool/cron/crontabs ]; then
        mkdir -p /var/spool/cron/crontabs
fi
crontab /etc/cron.arm40 # cron
crond

  每24小时运行一次远程更新脚本rdace_update_manager.sh,则需要将 /etc/cron.arm40 修改为:
  0 1 * * * (rdate -s 129.6.15.28) && (hwclock -w --utc) &>/dev/null 2>&1
  0 2 * * * /opt/rdace-manager/rdace_update_manager.sh &>/dev/null 2>&1
  每天的凌晨1点 rdate 从时间服务器获取网络时间,更新系统时间,并存入到 hardware clock 中。
  每天的凌晨2点运行一次 rdace_update_manager.sh。

五、部署文件的流程

  上面的部分介绍了各个整体策略和各个关键环节,本节将流程汇总一下:

5.1、ARM40端的部署

  (1)建立 rdace_update_manager.sh 文件,内容见2.1节。
  touch /opt/rdace-manager/rdace_update_manager.sh
  chmod 755 /opt/rdace-manager/rdace_update_manager.sh
  (2)建立 rdace.version 文件,
  touch /opt/rdace-manager/rdace.version #内容为空或与服务器端的相同
  chmod 777 /opt/rdace-manager/rdace.version
  (3)建立/opt/rdace-manager/rdace.info文件,见附(2),其内容至少含RDACE_ID这一项,例如 RDACE_ID=A5A1880001
  (4)建立 rdace-idvertime-make.sh文件,
  touch /opt/rdace-manager/rdace-idvertime-make.sh
  chmod 777 /opt/rdace-manager/rdace-idvertime-make.sh
  其内容见3.2节。

5.2、服务器端的部署

  (1)根据《ARM40-A5应用——使用rsync与Linux服务器的远程数据同步》建立服务器端的IDC。
  (2)新建如下目录与文件
  touch /opt/idc/rdace-manager/rdace_update.sh #见附(1)
  touch /opt/idc/rdace-manager/rdace.version #文件内容见2.1节的(3)
  mkdir -p /opt/idc/rdace12
  mkdir -p /opt/idc/rdace-manager/logs/ #该目录存放升级成功后文件
  (3)在[email protected]::ARM40_IDC 目录中新建rdace-manager/rdace_make_md5.sh文件:
  touch /opt/idc/rdace-manager/rdace_make_md5.sh
  chmod 777 /opt/idc/rdace-manager/rdace_make_md5.sh
  其内容见3.2节。

5.3、服务器端生成md5文件

  sh /opt/idc/rdace-manager/rdace_make_md5.sh
  ls -l /opt/idc/rdace-manager/rdace.md5

5.4、ARM40端手动更新测试

  在ARM40上运行:
  sh /opt/rdace-manager/rdace_update_manager.sh
  如果服务端的/opt/idc/rdace-manager/rdace.version版本号文件较新,则能够更新,打印内容见附(1)。
  并且在服务器端能够看到更新成功的文件,例如:
  ls -l /opt/idc/rdace-manager/logs/A5A1880001-2018.08.18-V0.01.info

4.5、定时更新

  ARM40设备定期(例如每24小时)运行一次远程更新脚本rdace_update_manager.sh。
  在 /etc/cron.arm40 中增加一行:
  0 2 * * * /opt/rdace-manager/rdace_update_manager.sh &>/dev/null 2>&1
  每天的凌晨2点运行一次 rdace_update_manager.sh。

六、发布及alpha版测试

6.1、发布流程

  在服务器端发布新版本,流程为:
  (1)将需要更新的文件存在到服务器 /opt/idc/rdace12 目录中;
  (2)修改 /opt/idc/rdace-manager/rdace_update.sh 脚本文件;
  (3)更新 /opt/idc/rdace-manager/rdace.version 文件。
  ARM40设备端检测到服务器上的rdace.version文件与本地的版本号文件不同以后,就会下载服务器上的 /opt/idc/rdace-manager/rdace_update.sh 脚本文件,然后执行该脚本文件,完成更新。

6.2、alpha版测试

  在正式发布新版本之前,往往需要先用少量的ARM40设备进行内测,流程(1)(2)与正式发布版本时的步骤相同(否则测试会不够真实),后续步骤为:
  (3) 增加供内测用的 alpha 版本号文件 rdace.version.alpha,内容与正式发布时的 rdace.version 文件完全相同。
  (4) 在内测的ARM40设备上,将 rdace_update_manager.sh 文件中的
  文件VERSION_SERVER=$SERVER_IDC/rdace-manager/rdace.version 改名为:
  VERSION_SERVER=$SERVER_IDC/rdace-manager/rdace.version.alpha
  其它步骤与正式发布时的步骤相同。
  (5) 测试完毕后在服务器上 cp rdace.version.alpha rdace.version 即可。

七、文件清单

  本文提到的文件有点多,为便于理解,我们给出树形文件清单,示例如下。
  ARM40的/opt目录的文件:
这里写图片描述
  ARM40的/tmp目录的文件:
这里写图片描述
  服务器 /opt/idc 目录的文件:
这里写图片描述

常见问题:

参考文章:

  ARM40-A5应用——使用rsync与Linux服务器的远程数据同步
  嵌入式Linux固件升级
  https://blog.csdn.net/jsfzdd/article/details/6158258
  Linux下远程升级脚本
  https://blog.csdn.net/sdvch/article/details/14109997
  ARM40-A5应用——与网络时间的同步
  Android应用增量更新 - Smart App Updates
  https://github.com/cundong/SmartAppUpdates
  荟聚计划:共商 共建 共享 Grant

附:

(1)rdace_update.sh 文件

#!/bin/sh
#update_rdace.tag
echo "hello ARM40"

SERVER_IDC=ARM40-A5@47.98.140.167::ARM40_IDC
SERVER_IDC_LOGS=$SERVER_IDC/rdace-manager/logs
SERVER_RECUIT_DIR=$SERVER_IDC/rdace12

SERVER_RECUIT_DIR_MD5=$SERVER_IDC/rdace-manager/rdace.md5
RECUIT_TMP_DIR_MD5=/tmp/rdace-manager/rdace.md5

RECUIT_DIR=/opt/rdace12
ACTIVE_DUTY_DIR=/opt/rdace11
RETIRED_DIR=/opt/rdace10
RECUIT_TMP_DIR=/tmp/rdace12
ACTIVE_DUTY_TMP_DIR=/tmp/rdace11
RETIRED_TMP_DIR=/tmp/rdace10

IDVERTIME_INFO=/tmp/rdace-manager/*.info        ###*/###
MAKE_IDVERTIME_BATCH=/opt/rdace-manager/rdace-idvertime-make.sh
APP_BATCH=/opt/rdace-manager/rdace.sh
RECUIT_BATCH=/opt/rdace12/rdace.sh

VERSION_SERVER_CC=/tmp/rdace-manager/rdace.version.server
VERSION_LOCAL=/opt/rdace-manager/rdace.version
VERSION_LOCAL_CC=/tmp/rdace-manager/rdace.version.tmp

#rsync /opt/rdace11 /tmp/rdace12
prepare_active_duty_files()
{
        rsync -a $ACTIVE_DUTY_DIR $RECUIT_TMP_DIR
        if [ "$?" != "0" ]; then                # rsync isn't OK, game over
                return 1
        fi
        echo "prepare_active_duty_files OK"
        return 0
}

#rsync rdace/rdace-manager/rdace.md5 /tmp/rdace-manager/rdace.md5
download_server_recruit_files_md5()
{
        rsync -avz --timeout=60 --password-file=/etc/rsync.passwd       \
                        $SERVER_RECUIT_DIR_MD5 $RECUIT_TMP_DIR_MD5
        if [ "$?" != "0" ]; then                # rsync isn't OK, game over
                return 1
        fi
        echo "download_server_recruit_files_md5 OK"
        return 0
}

#rsync rdace/rdace12 /tmp/rdace12
download_server_recruit_files()
{
        rsync -avz --timeout=60 --password-file=/etc/rsync.passwd       \
                        $SERVER_RECUIT_DIR/ $RECUIT_TMP_DIR
        if [ "$?" != "0" ]; then                # rsync isn't OK, game over
                return 1
        fi
        echo "download_server_recruit_files OK"
        return 0
}

#cd /tmp/rdace12
#md5sum -c /tmp/rdace-manager/rdace.md5
check_md5()
{
        cd $RECUIT_TMP_DIR
        md5sum -c $RECUIT_TMP_DIR_MD5
        if [ "$?" != "0" ]; then                # rsync isn't OK, game over
                return 1
        fi
        echo "check_md5 OK"
        return 0
}

close_app(){
        #killall app
        echo "close_app OK"
        return 0
}

#rsync /tmp/rdace12 /opt/rdace12
replace_local_files()
{
        rsync -a $RECUIT_TMP_DIR/ $RECUIT_DIR
        if [ "$?" != "0" ]; then
                return 1
        fi
        echo "replace_local_files OK"
        return 0
}

#rm -rf /opt/rdace10
#rm -rf /tmp/rdace10
delete_retired_files()
{
        if [ ! -d $RETIRED_DIR ]; then
                rm -rf $RETIRED_DIR
        fi
        if [ ! -d $RETIRED_TMP_DIR ]; then
                rm -rf $RETIRED_TMP_DIR
        fi
        echo "delete_retired_files OK"
        return 0
}

update_app_softlink_files()
{
        #ln -s $APP_BATCH $RECUIT_BATCH
        echo "update_app_softlink_files OK"
        return 0
}

#rm -f /tmp/rdace-manager/*.info
#sh /opt/rdace-manager/rdace-idvertime-make.sh
#rsync /tmp/rdace-manager/*.info rdace/rdace-manager/logs
upload_idvertime_files()
{
        rm -f $IDVERTIME_INFO
        sh $MAKE_IDVERTIME_BATCH
        if [ "$?" != "0" ]; then
                return 1
        fi
        rsync -avz --timeout=60 --password-file=/etc/rsync.passwd       \
                        $IDVERTIME_INFO $SERVER_IDC_LOGS
        if [ "$?" != "0" ]; then                # rsync isn't OK, game over
                return 1
        fi
        echo "upload_idvertime_files OK"
        return 0
}

#cp /tmp/rdace-manager/rdace.version.server /opt/rdace-manager/rdace.version
#cp /tmp/rdace-manager/rdace.version.server /tmp/rdace-manager/rdace.version.tmp
update_version_local_files()
{
        cp $VERSION_SERVER_CC $VERSION_LOCAL
        cp $VERSION_SERVER_CC $VERSION_LOCAL_CC
        echo "update_version_local_files OK"
        return 0
}

reboot_ARM40()
{
        sync
        echo "reboot_ARM40"
#       reboot
        return 0
}

BATCH_FILES="prepare_active_duty_files
        download_server_recruit_files_md5
        download_server_recruit_files
        check_md5
        close_app
        replace_local_files
        delete_retired_files
        update_app_softlink_files
        upload_idvertime_files
        update_version_local_files
        reboot_ARM40"

batch_files()
{
        for batch in $BATCH_FILES
        do
                $batch
                if [ "$?" != "0" ]; then
                        return 1
                fi
        done
        echo "batch_files OK"
        return 0
}
batch_files

  rdace_update.sh 文件简析:
  ① 文件最后的 batch_files 函数会逐一执行字符串BATCH_FILES中罗列的函数;如果返回值为1,则退出;如果返回值为0,则继续执行;
  ② BATCH_FILES中罗列的函数完成本文第1节”远程更新应用程序的整体策略”中第4步到第9步的任务,如下:

prepare_active_duty_files             #将现役 /opt/rdace11 目录拷贝为临时文件夹目录 /tmp/rdace12
download_server_recruit_files_md5     #下载服务器/opt/idc/rdace12目录各文件的md5文件
download_server_recruit_files         #下载服务器/opt/idc/rdace12目录各文件
check_md5                             #检查md5
close_app                             #关闭当前正运行的app
replace_local_files                   #替换现役文件
delete_retired_files                  #删去退役文件
update_app_softlink_files             #更新app的软连接
upload_idvertime_files                #上传id-ver-time文件到服务器/opt/idc/rdace-manager/logs
update_version_local_files            #更新ARM40上的版本号文件和临时版本号文件
reboot_ARM40                          #重启ARM40

  ③ batch_files 函数成功执行的打印为:(省略其中rsync的打印)

hello ARM40
prepare_active_duty_files OK
download_server_recruit_files_md5 OK
download_server_recruit_files OK
check_md5 OK
close_app OK
replace_local_files OK
delete_retired_files OK
update_app_softlink_files OK
upload_idvertime_files OK
update_version_local_files OK
reboot_ARM40
batch_files OK

(2)ARM40端/opt/rdace-manager/rdace.info文件,示例

RDACE_ID=A5A1880001
ETH0_IP=192.168.0.250
ETH0_MAC=C8:1B:5C:05:86:9C
ETH1_IP=192.168.6.6
ETH1_MAC=C8:1B:5C:05:86:9D
GPRS_ID=PPA1880001
GPRS_SIM=null
HOLER_KEY=null
HOLER_ACCESS=null
HOLER_PORT=null
UPS_ID=UPA1880001
MFG_DATE=2018.08.21
MFG_COO=SHANGHAI
FIX_ADDR=SHANGHAI:JINSHAN

  其中,eth0用于调试,eth1用于业务。MFG_DATE为生产日期,MFG_COO为产地。FIX_ADDR为安装地点。

猜你喜欢

转载自blog.csdn.net/vonchn/article/details/82079837