forked from buzzhub/lsyupdate
217 lines
5.8 KiB
Bash
217 lines
5.8 KiB
Bash
|
|
#!/bin/bash
|
|||
|
|
|
|||
|
|
|
|||
|
|
#### version接口
|
|||
|
|
# {
|
|||
|
|
# "version": "1.2.3",
|
|||
|
|
# "path": "http://192.168.200.128:5212/versionFile?filename=app1.2.3",
|
|||
|
|
# "sign": "2d28d9af69d48c964abafaff97f6e9958ecf40a9ca6d62a7ae69e00b279c22f2"
|
|||
|
|
# }
|
|||
|
|
|
|||
|
|
mkdir -p "/data"
|
|||
|
|
|
|||
|
|
logFile="/data/lsyudpate.log"
|
|||
|
|
maxLogSize=$((1024*1024*3))
|
|||
|
|
url="http://192.168.200.128:5212/version"
|
|||
|
|
versionLocal="1.0.1"
|
|||
|
|
|
|||
|
|
pkgUrl=""
|
|||
|
|
pkgVersion=""
|
|||
|
|
pkgSign=""
|
|||
|
|
outPath="out.deb"
|
|||
|
|
|
|||
|
|
|
|||
|
|
function initLog() {
|
|||
|
|
[ ! -e "$logFile" ] && return
|
|||
|
|
local size=`ls -al "$logFile" |awk '{print $5}'`
|
|||
|
|
echo $size
|
|||
|
|
[ $size -gt $maxLogSize ] && rm -rf "$logFile"
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function freshNow() {
|
|||
|
|
nowtime=`date +"%Y-%m-%d %H:%M:%S"`
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function get_json_value() {
|
|||
|
|
awk -v json="$1" -v key="$2" -v defaultValue="$3" 'BEGIN{
|
|||
|
|
foundKeyCount = 0
|
|||
|
|
while (length(json) > 0) {
|
|||
|
|
# pos = index(json, "\""key"\""); ## 这行更快一些,但是如果有value是字符串,且刚好与要查找的key相同,会被误认为是key而导致值获取错误
|
|||
|
|
pos = match(json, "\""key"\"[ \\t]*?:[ \\t]*");
|
|||
|
|
if (pos == 0) {if (foundKeyCount == 0) {print defaultValue;} exit 0;}
|
|||
|
|
|
|||
|
|
++foundKeyCount;
|
|||
|
|
start = 0; stop = 0; layer = 0;
|
|||
|
|
for (i = pos + length(key) + 1; i <= length(json); ++i) {
|
|||
|
|
lastChar = substr(json, i - 1, 1)
|
|||
|
|
currChar = substr(json, i, 1)
|
|||
|
|
|
|||
|
|
if (start <= 0) {
|
|||
|
|
if (lastChar == ":") {
|
|||
|
|
start = currChar == " " ? i + 1: i;
|
|||
|
|
if (currChar == "{" || currChar == "[") {
|
|||
|
|
layer = 1;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
if (currChar == "{" || currChar == "[") {
|
|||
|
|
++layer;
|
|||
|
|
}
|
|||
|
|
if (currChar == "}" || currChar == "]") {
|
|||
|
|
--layer;
|
|||
|
|
}
|
|||
|
|
if ((currChar == "," || currChar == "}" || currChar == "]") && layer <= 0) {
|
|||
|
|
stop = currChar == "," ? i : i + 1 + layer;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (start <= 0 || stop <= 0 || start > length(json) || stop > length(json) || start >= stop) {
|
|||
|
|
if (foundKeyCount == 0) {print defaultValue;} exit 0;
|
|||
|
|
} else {
|
|||
|
|
print substr(json, start, stop - start);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
json = substr(json, stop + 1, length(json) - stop)
|
|||
|
|
}
|
|||
|
|
}'
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# split_str "${tmp_data}" "|"
|
|||
|
|
split_str_return_list=()
|
|||
|
|
function split_str() {
|
|||
|
|
local str_data=$1
|
|||
|
|
local str_pattern=$2
|
|||
|
|
|
|||
|
|
str=$str_data
|
|||
|
|
delimiter=$str_pattern
|
|||
|
|
|
|||
|
|
array=()
|
|||
|
|
while [ "$str" ]; do
|
|||
|
|
substring="${str%%"$delimiter"*}"
|
|||
|
|
[ -z "$substring" ] && str="${str#"$delimiter"}" && continue
|
|||
|
|
array+=( "$substring" )
|
|||
|
|
str="${str:${#substring}}"
|
|||
|
|
[ "$str" == "$delimiter" ] && break
|
|||
|
|
done
|
|||
|
|
#declare -p array
|
|||
|
|
|
|||
|
|
split_str_return_list=()
|
|||
|
|
for var in "${array[@]}"; do
|
|||
|
|
#echo "[v]=${var}"
|
|||
|
|
split_str_return_list+=( "${var}" )
|
|||
|
|
done
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function trimL() {
|
|||
|
|
local str=$1
|
|||
|
|
local toTrim=$2
|
|||
|
|
local dst=${str#$toTrim}
|
|||
|
|
echo $dst
|
|||
|
|
}
|
|||
|
|
function trimR() {
|
|||
|
|
local str=$1
|
|||
|
|
local toTrim=$2
|
|||
|
|
local dst=${str%$toTrim}
|
|||
|
|
echo $dst
|
|||
|
|
}
|
|||
|
|
function trim() {
|
|||
|
|
local str=$1
|
|||
|
|
local toTrim=$2
|
|||
|
|
str=${str#$toTrim}
|
|||
|
|
local dst=${str%$toTrim}
|
|||
|
|
echo $dst
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
function hasVersion() {
|
|||
|
|
nowtime=`date +"%Y-%m-%d %H:%M:%S"`
|
|||
|
|
echo "[$nowtime] hasVersion start" >> $logFile
|
|||
|
|
|
|||
|
|
local str_ack=$(
|
|||
|
|
curl --request GET \
|
|||
|
|
--url "$url" \
|
|||
|
|
--header 'content-type: application/json' \
|
|||
|
|
--data ""
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
nowtime=`date +"%Y-%m-%d %H:%M:%S"`
|
|||
|
|
echo "[$nowtime] hasVersion done,$str_ack" >> $logFile
|
|||
|
|
|
|||
|
|
local version=$(get_json_value "$str_ack" "version" "-1")
|
|||
|
|
version=$(trim "$version" "\"")
|
|||
|
|
split_str "${version}" "."
|
|||
|
|
len=${#split_str_return_list[@]}
|
|||
|
|
if [ ! $len -eq 3 ];then
|
|||
|
|
return 0
|
|||
|
|
fi
|
|||
|
|
local v1=${split_str_return_list[0]}
|
|||
|
|
local v2=${split_str_return_list[1]}
|
|||
|
|
local v3=${split_str_return_list[2]}
|
|||
|
|
|
|||
|
|
split_str "${versionLocal}" "."
|
|||
|
|
local lv1=${split_str_return_list[0]}
|
|||
|
|
local lv2=${split_str_return_list[1]}
|
|||
|
|
local lv3=${split_str_return_list[2]}
|
|||
|
|
|
|||
|
|
pkgUrl=$(get_json_value "$str_ack" "path" "")
|
|||
|
|
pkgVersion=$version
|
|||
|
|
pkgSign=$(get_json_value "$str_ack" "sign" "")
|
|||
|
|
|
|||
|
|
pkgUrl=$(trim "$pkgUrl" "\"")
|
|||
|
|
pkgSign=$(trim "$pkgSign" "\"")
|
|||
|
|
|
|||
|
|
echo "[$nowtime] pkgVersion=$pkgVersion" >> $logFile
|
|||
|
|
echo "[$nowtime] pkgUrl=$pkgUrl" >> $logFile
|
|||
|
|
echo "[$nowtime] pkgSign=$pkgSign" >> $logFile
|
|||
|
|
|
|||
|
|
[ -z "$pkgUrl" ] && echo "[$nowtime] pkgurl empty skip" >> $logFile && return 0
|
|||
|
|
[ -z "$pkgSign" ] && echo "[$nowtime] pkgSign empty skip" >> $logFile && return 0
|
|||
|
|
|
|||
|
|
echo "[$nowtime] v=$v1.$v2.$v3" >> $logFile
|
|||
|
|
echo "[$nowtime] lv=$lv1.$lv2.$lv3" >> $logFile
|
|||
|
|
|
|||
|
|
[ $v1 -gt $lv1 ] && return 1
|
|||
|
|
[ $v2 -gt $lv2 ] && return 1
|
|||
|
|
[ $v3 -gt $lv3 ] && return 1
|
|||
|
|
|
|||
|
|
return 0
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function main() {
|
|||
|
|
initLog
|
|||
|
|
|
|||
|
|
nowtime=`date +"%Y-%m-%d %H:%M:%S"`
|
|||
|
|
echo "[$nowtime] start..." >> $logFile
|
|||
|
|
|
|||
|
|
hasVersion
|
|||
|
|
local bUpdate=$?
|
|||
|
|
if [ $bUpdate -eq 0 ]; then
|
|||
|
|
nowtime=`date +"%Y-%m-%d %H:%M:%S"`
|
|||
|
|
echo "[$nowtime] no need to update" >> $logFile
|
|||
|
|
return
|
|||
|
|
fi
|
|||
|
|
echo "[$nowtime] need update" >> $logFile
|
|||
|
|
|
|||
|
|
freshNow
|
|||
|
|
rm -rf "$outPath"
|
|||
|
|
str_ack=`wget -O "$outPath" $pkgUrl`
|
|||
|
|
[ ! -e "$outPath" ] && echo "[$nowtime] $outPath not exist" >> $logFile && return
|
|||
|
|
|
|||
|
|
freshNow
|
|||
|
|
local fileSign=`sha256sum "$outPath"|awk '{print $1}'`
|
|||
|
|
echo "[$nowtime] get sign,fileSign=$fileSign,$outPath" >> $logFile
|
|||
|
|
|
|||
|
|
[ "$fileSign" != "$pkgSign" ] && echo "[$nowtime] $fileSign!=$pkgSign,$outPath skip" >> $logFile && return
|
|||
|
|
|
|||
|
|
chmod +x "$outPath"
|
|||
|
|
echo "[$nowtime] start run $outPath" >> $logFile
|
|||
|
|
bash -c "./$outPath" >> $logFile
|
|||
|
|
rm -rf "$outPath"
|
|||
|
|
|
|||
|
|
freshNow
|
|||
|
|
echo "[$nowtime] finish" >> $logFile
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
main
|