您的位置:首页 > 其它

切合OTA升级的版本升级包自动生成脚本

2015-08-10 15:12 477 查看
做OTA升级方面的工作零零散散的时间加起来也不短了,系统升级的流程尚未总结完毕,首先将自己的一套可以自动***升级差分包的脚本做一段记录,以方便查阅,相关同仁需要的,可以参考借鉴。

#!/bin/bash
##############################################################
#  Author: XingShi <dingkongbo@747.cn>
#  Date  : Mar. 20, 2015 
##############################################################

if [ ! $1 ]; then
    echo
    echo "#########################################################"
    echo "#  please add the product name,such as: $0 s2 #"
	echo "#########################################################"
	echo
	exit 0
fi
echo
echo "#####################################################"
echo "###############     FOR PRODUCT $1     ##############"
echo "#####################################################"
echo

dirsum=
DIRNAME=
OLDVERSION=old-version
NEWVERSION=new-version
LASTVERSION=last_version
DIRFLAG=0
LOCALFLAG=0
ONLINEFLAG=0
COMBASE=/home/data/upgrade/$1/source
LOCALIMG=$COMBASE/daily/images/
LVBASE=$COMBASE/daily
ONLINEIMG=$COMBASE/online/release/
OVBASE=$COMBASE/online
LOVFILE=$LVBASE/$OLDVERSION
LVBFILE=$OVBASE/$LASTVERSION
LNVFILE=$LVBASE/$NEWVERSION
OOVFILE=$OVBASE/$OLDVERSION
ONVFILE=$OVBASE/$NEWVERSION
MAKEBASE="./updatemk --platform=kitkat --product=$1 --oem=xxx"
ZIPBASE=/home/data/upgrade/$1/target/
DLFILE=$ZIPBASE\daily/version
RVFILE=$ZIPBASE\user_release/version
LOCAL=daily
ONLINE=online
USRLINE=user_release
MKDIR=mkdir

function hourlySleep () {

    while (!([ "$minute" = "00" ] && [ "$second" = "00" ]))
	do
    date=`date`
	time=`echo $date | cut -d " " -f5`
	hour=`echo $time | cut -d ":" -f1`
	minute=`echo $time | cut -d ":" -f2`
	second=`echo $time | cut -d ":" -f3`
	done

} 

function resultHandle () {
    len=0
	LOGFILE=${2}"/results.txt"
	if [ ! -f "$1" ]; then
        if [ ! -f "$LOGFILE" ]; then
			echo $ZIPNAME >> $LOGFILE
			chmod a+x $LOGFILE
		else
		line=`sed -n '$=' $LOGFILE`
		LOGSTR=`cat $LOGFILE`
        for (( len = 0; len < line; len++ ))
		{
		    LOGBUF[$len]=`echo $LOGSTR | cut -d " " -f$[len + 1]`
		}

		for (( index = 0; index < line; index++))
		{
			temp=${LOGBUF[$index]}
			echo $ZIPNAME
			if [ $ZIPNAME = ${LOGBUF[$index]} ]; then
				index=$[line + 1]
			fi
		}
#		echo ================  line: $line ==================
#		echo ================  index: $index ==================
		if [ $index -eq $line ]; then
			echo $ZIPNAME >> $LOGFILE
		fi
		fi
    fi
}

function makeOtaZip () {
#    echo "============= making zip now ============" 
#	echo $DIRFLAG
	SUCCESS=1
	for (( i = 0; $i < ($array_size - 1); i++))
	{
	    echo "$i times"
#ZIPINSTALL=$ZIPBASE${ZIPDIR[$[i+1]]}"-"${ZIPDIR[0]}
		ZIPINSTALL=$ZIPBASE${1}
		ZIPNAME=${ZIPDIR[$[i+1]]}"-"${ZIPDIR[0]}".zip"
	    if [ ! -d "$ZIPINSTALL" ]; then
            $MKDIR $ZIPINSTALL
	    fi
#EXIST=`ls -a $ZIPINSTALL | wc -l`
        OUTPUT=$ZIPINSTALL"/"$ZIPNAME
		if [ ! -f $OUTPUT ]; then
            echo "$OUTPUT is not exist"
		 ###########start to make update.zip##########
		    $MAKEBASE --zipfile=${SRCDIR[0]} --incremental=${SRCDIR[$[i+1]]} --output=$ZIPINSTALL"/"$ZIPNAME
         #############   Add failed make log   #######
			RESFILE=$ZIPINSTALL"/"$ZIPNAME
			resultHandle $RESFILE $ZIPINSTALL
	    fi
	}
}

function clearArray () {
    echo "========    clear   ========"
	if [ $LOCALFLAG -gt $ONLINEFLAG ]; then
		LENGTH=$LOCALFLAG
	else
		LENGTH=$ONLINEFLAG
	fi

	for (( i = 0; i < $LENGTH; i++ ))
	do
		unset ZIPDIR[$i]
	done
}

function versionCheck () {

    clearArray
	dirsum=`du -h $1* | wc -l`
#	echo "dirsum :$dirsum"
#		echo "DIRFLAG :$DIRFLAG"
    DIRFLAG=$2
#    if [ ! $dirsum -eq $DIRFLAG ] ; then
#	if [ $DIRFLAG -eq 0 ] ; then
            DIRFLAG=$dirsum
#		fi
		DIRNAME=`ls -t $1 | head -n $dirsum`
#	    if [ $dirsum -lt $DIRFLAG ] ; then
#	        array_size=${#ZIPDIR[@]}
#       	echo "before unset array_size: $array_size"
#		    for (( i = $dirsum; i < $DIRFLAG; i++ ))
#				do
#				    unset ZIPDIR[$i]
#				done
#	        array_size=${#ZIPDIR[@]}
#       	echo "after unset array_size: $array_size"
#		fi
			DIRFLAG=$dirsum
        for (( i = 0 ; $i < $DIRFLAG; i++ ))
        {
			index=$[i + 1]
            SRCDIR[$i]=`echo $DIRNAME | cut -d " " -f$index`
#            ZIPDIR[$i]=`echo ${SRCDIR[$i]} | cut -d "." -f1`
            ZIPDIR[$i]=`echo ${SRCDIR[$i]%.*}`
			SRCDIR[$i]=${1}${SRCDIR[$i]}
		}

	array_size=${#ZIPDIR[@]}
	echo "array_size: $array_size"
    for (( i = 0; i < array_size ; i++ ))
    do
        for (( j = $i; j < array_size; j++ ))
        do  
          temp_i=`echo ${ZIPDIR[$i]} | awk '{ print $1 }'`
          temp_j=`echo ${ZIPDIR[$j]} | awk '{ print $1 }'`
          if [ $temp_i \< $temp_j ]; then
              t=${ZIPDIR[$i]}
              ZIPDIR[$i]=${ZIPDIR[$j]}
              ZIPDIR[$j]=$t
          fi
        done
    done
#
# Print the sorted number
# 
    echo -e "\nSorted Numbers in Ascending Order:"
    for (( i=0; i < array_size; i++ ))
    do
        echo ${ZIPDIR[$i]}
    done
#	fi

	if [ $1 = $LOCALIMG ]; then
	    LOCALFLAG=$DIRFLAG
	else
		ONLINEFLAG=$DIRFLAG
	fi
	echo "LOCALFLAG: $LOCALFLAG"
	echo "ONLINEFLAG: $ONLINEFLAG"
}

while true
do
	if [ $# = 2 ]; then
            if [ $2 = "-h" ]; then
	        hourlySleep
	    else
	        sleep 5
	    fi
        else
            sleep 5
        fi
    LOV=`cat $LOVFILE`
    echo $LOV
	LNV=`cat $LNVFILE`
    echo $LNV
	OOV=`cat $OOVFILE`
    echo $OOV
    ONV=`cat $ONVFILE`
    echo $ONV
   
    if [ ! -f "$LVBFILE" ]; then
        echo $OOV > $LVBFILE
        chmod a+x $LVBFILE
    fi
 
    if [ $LNV \> $LOV ]; then
	    versionCheck $LOCALIMG $LOCALFLAG
	    makeOtaZip $LOCAL
		echo $LNV > $LOVFILE
		echo $LNV > $DLFILE
	fi
    if [ $ONV \> $OOV ]; then
        versionCheck $ONLINEIMG $ONLINEFLAG
        makeOtaZip $USRLINE
                echo $OOV > $LVBFILE
		echo $ONV > $OOVFILE
		echo $ONV > $RVFILE
	fi
#	sleep 5
done


我们的升级系统版本走两条线,一条dailybuild;一条正式发布版本。脚本默认会每隔5S扫描一次两条线的source包目录,每个源整包目录下都有记录最新版本和之前版本的文件,脚本读取最新版本文件记录,如果不同于之前版本文件的记录则开始扫描源包目录并且按时间顺序排序放至一个升级包数组中,再依次按数组元素名称,取源整包做差分升级包。其中具体做的时候用到了一个updatemk脚本,该脚本直接调用系统做升级包的工具和脚本最终生成差分包,该脚本的具体内容,后续博文会有所体现。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: