mir3c/squashfs-root/usr/sbin/checkupgrade.lua
2018-05-25 14:19:31 +05:30

127 lines
3.9 KiB
Lua
Executable File

local config = require("xiaoqiang.common.XQConfigs")
local func = require("xiaoqiang.common.XQFunction")
local preference = require("xiaoqiang.XQPreference")
local log = require("xiaoqiang.XQLog")
local net = require("xiaoqiang.util.XQNetUtil")
local sys = require("xiaoqiang.util.XQSysUtil")
local downloader = require("xiaoqiang.util.XQDownloadUtil")
local util = require("luci.util")
local fs = require("luci.fs")
local TIME_LIMIT = 300
function _(text)
return text
end
sys.updateUpgradeStatus(1)
preference.set(config.PREF_ROM_FULLSIZE, nil)
preference.set(config.PREF_ROM_DOWNLOAD_URL, nil)
preference.set(config.PREF_ROM_DOWNLOAD_ID, nil)
local uci = require("luci.model.uci").cursor()
local flashpermission = tonumber(uci:get("misc", "hardware", "flash_per")) == 1 and 1 or 0
local usbmodecheck = tonumber(uci:get("misc", "hardware", "usbmode")) == 1 and 1 or 0
local check = {}
if #arg == 3 then
check["needUpdate"] = 1
check["downloadUrl"] = arg[1]
check["fullHash"] = arg[2]
check["fileSize"] = tonumber(arg[3])
else
check = net.checkUpgrade()
end
log.log(6,"Upgrade:check upgrade",check)
if check and check.needUpdate == 1 then
sys.updateUpgradeStatus(2)
local downloadUrl = check.downloadUrl
local fullhash = check.fullHash
if downloadUrl and fullhash then
sys.updateUpgradeStatus(3)
preference.set(config.PREF_ROM_FULLSIZE,check.fileSize)
preference.set(config.PREF_ROM_DOWNLOAD_URL,downloadUrl)
log.log(6,"Upgrade:downloading ...")
local usbmode
if usbmodecheck == 1 then
usbmode = sys.usbMode()
if usbmode then
os.execute("/etc/init.d/usb_deploy_init_script.sh stop >/dev/null 2>/dev/null; echo 3 > /proc/sys/vm/drop_caches")
end
end
local hash, path = downloader.syncDownload(downloadUrl)
log.log(6,"Hash and path:", hash, path)
if hash == fullhash and path then
log.log(6,"Upgrade:download success")
if not sys.verifyImage(path) then
sys.updateUpgradeStatus(9)
if path and fs.access(path) then
fs.unlink(path)
end
if usbmode then
os.execute("/etc/init.d/usb_deploy_init_script.sh start >/dev/null 2>/dev/null")
end
return
end
sys.updateUpgradeStatus(5)
local limit = 0
while not sys.getFlashPermission() do
limit = limit + 2
if limit >= TIME_LIMIT then
break
end
os.execute("sleep 2")
end
local result = os.execute("flash.sh '"..path.."'")
if result == 0 then
if flashpermission == 0 then
os.execute(config.NVRAM_SET_UPGRADED)
end
sys.updateUpgradeStatus(11)
else
sys.updateUpgradeStatus(10)
if path and fs.access(path) then
fs.unlink(path)
end
if usbmode then
os.execute("/etc/init.d/usb_deploy_init_script.sh start >/dev/null 2>/dev/null")
end
end
log.log(6,"Upgrade:result "..tostring(result))
else
if path then
fs.unlink(path)
end
if usbmode then
os.execute("/etc/init.d/usb_deploy_init_script.sh start >/dev/null 2>/dev/null")
end
sys.updateUpgradeStatus(8)
log.log(3,"Upgrade:download failed")
end
else
sys.updateUpgradeStatus(7)
log.log(3,"Upgrade:No url or fullhash")
end
elseif check and check.needUpdate == 0 then
sys.updateUpgradeStatus(6)
log.log(6,"Upgrade:No update")
else
sys.updateUpgradeStatus(6)
log.log(3,"Upgrade:server unreachable")
end