2022-03-17 20:35:15 +08:00
|
|
|
module("luci.model.cbi.gpsysupgrade.sysupgrade", package.seeall)
|
|
|
|
local fs = require "nixio.fs"
|
|
|
|
local sys = require "luci.sys"
|
|
|
|
local util = require "luci.util"
|
|
|
|
local i18n = require "luci.i18n"
|
|
|
|
local api = require "luci.model.cbi.gpsysupgrade.api"
|
|
|
|
|
|
|
|
function get_system_version()
|
|
|
|
local system_version = luci.sys.exec("[ -f '/etc/openwrt_version' ] && echo -n `cat /etc/openwrt_version`")
|
|
|
|
return system_version
|
|
|
|
end
|
|
|
|
|
|
|
|
function check_update()
|
|
|
|
needs_update, notice, md5 = false, false, false
|
|
|
|
remote_version = luci.sys.exec("curl -skfL https://op.dllkids.xyz/firmware/" ..model.. "/version.txt")
|
|
|
|
updatelogs = luci.sys.exec("curl -skfL https://op.dllkids.xyz/firmware/" ..model.. "/updatelogs.txt")
|
|
|
|
remoteformat = luci.sys.exec("date -d $(echo \"" ..remote_version.. "\" | tr '\r\n' ',' | awk -F, '{printf $1}' | awk -F. '{printf $3\"-\"$1\"-\"$2}') +%s")
|
|
|
|
fnotice = luci.sys.exec("echo \"" ..remote_version.. "\" | tr '\r\n' ',' | awk -F, '{printf $(NF-1)}'")
|
|
|
|
md5 = luci.sys.exec("echo \"" ..remote_version.. "\" | tr '\r\n' ',' | awk -F, '{printf $2}'")
|
|
|
|
remote_version = luci.sys.exec("echo \"" ..remote_version.. "\" | tr '\r\n' ',' | awk -F, '{printf $1}' | awk -F. '{printf $1\".\"$2\".\"$3}'")
|
|
|
|
if remoteformat > sysverformat then
|
|
|
|
needs_update = true
|
|
|
|
if currentTimeStamp > remoteformat or fnotice == "1" then
|
|
|
|
notice = true
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
function to_check()
|
|
|
|
if not model or model == "" then model = api.auto_get_model() end
|
|
|
|
sysverformat = luci.sys.exec("date -d $(echo " ..get_system_version().. " | awk -F. '{printf $3\"-\"$1\"-\"$2}') +%s")
|
|
|
|
currentTimeStamp = luci.sys.exec("expr $(date -d \"$(date '+%Y-%m-%d %H:%M:%S')\" +%s) - 172800")
|
|
|
|
if model == "x86_64" then
|
|
|
|
check_update()
|
|
|
|
if fs.access("/sys/firmware/efi") then
|
|
|
|
download_url = "https://op.dllkids.xyz/firmware/" ..model.. "/" ..remote_version.. "-openwrt-x86-64-generic-squashfs-combined-efi.img.gz"
|
|
|
|
else
|
|
|
|
download_url = "https://op.dllkids.xyz/firmware/" ..model.. "/" ..remote_version.. "-openwrt-x86-64-generic-squashfs-combined.img.gz"
|
|
|
|
md5 = ""
|
|
|
|
end
|
|
|
|
elseif model:match(".*R2S.*") then
|
|
|
|
model = "nanopi-r2s"
|
|
|
|
check_update()
|
|
|
|
download_url = "https://op.dllkids.xyz/firmware/" ..model.. "/" ..remote_version.. "-openwrt-rockchip-armv8-nanopi-r2s-squashfs-sysupgrade.img.gz"
|
|
|
|
elseif model:match(".*R4S.*") then
|
|
|
|
model = "nanopi-r4s"
|
|
|
|
check_update()
|
|
|
|
download_url = "https://op.dllkids.xyz/firmware/" ..model.. "/" ..remote_version.. "-openwrt-rockchip-armv8-nanopi-r4s-squashfs-sysupgrade.img.gz"
|
|
|
|
elseif model:match(".*R2C.*") then
|
|
|
|
model = "nanopi-r2c"
|
|
|
|
check_update()
|
|
|
|
download_url = "https://op.dllkids.xyz/firmware/" ..model.. "/" ..remote_version.. "-openwrt-rockchip-armv8-nanopi-r2c-squashfs-sysupgrade.img.gz"
|
|
|
|
elseif model:match(".*Pi 4 Model B.*") then
|
|
|
|
model = "Rpi-4B"
|
|
|
|
check_update()
|
|
|
|
download_url = "https://op.dllkids.xyz/firmware/" ..model.. "/" ..remote_version.. "-openwrt-bcm27xx-bcm2711-rpi-4-squashfs-sysupgrade.img.gz"
|
|
|
|
else
|
|
|
|
local needs_update = false
|
|
|
|
return {
|
|
|
|
code = 1,
|
|
|
|
error = i18n.translate("Can't determine MODEL, or MODEL not supported.")
|
|
|
|
}
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
if needs_update and not download_url then
|
|
|
|
return {
|
|
|
|
code = 1,
|
|
|
|
now_version = get_system_version(),
|
|
|
|
version = remote_version,
|
|
|
|
error = i18n.translate(
|
|
|
|
"New version found, but failed to get new version download url.")
|
|
|
|
}
|
|
|
|
end
|
|
|
|
|
|
|
|
return {
|
|
|
|
code = 0,
|
|
|
|
update = needs_update,
|
|
|
|
notice = notice,
|
|
|
|
now_version = get_system_version(),
|
|
|
|
version = remote_version,
|
|
|
|
md5 = md5,
|
|
|
|
logs = updatelogs,
|
|
|
|
url = download_url
|
|
|
|
}
|
|
|
|
end
|
|
|
|
|
|
|
|
function to_download(url,md5)
|
|
|
|
if not url or url == "" then
|
|
|
|
return {code = 1, error = i18n.translate("Download url is required.")}
|
|
|
|
end
|
|
|
|
|
|
|
|
sys.call("/bin/rm -f /tmp/firmware_download.*")
|
|
|
|
|
|
|
|
local tmp_file = util.trim(util.exec("mktemp -u -t firmware_download.XXXXXX"))
|
|
|
|
|
|
|
|
local result = api.exec(api.wget, {api._unpack(api.wget_args), "-O", tmp_file, url}, nil, api.command_timeout) == 0
|
|
|
|
|
|
|
|
if not result then
|
|
|
|
api.exec("/bin/rm", {"-f", tmp_file})
|
|
|
|
return {
|
|
|
|
code = 1,
|
|
|
|
error = i18n.translatef("File download failed or timed out: %s", url)
|
|
|
|
}
|
|
|
|
end
|
|
|
|
|
|
|
|
local md5local = sys.exec("echo -n $(md5sum " .. tmp_file .. " | awk '{print $1}')")
|
|
|
|
|
|
|
|
if md5 ~= "" and md5local ~= md5 then
|
|
|
|
api.exec("/bin/rm", {"-f", tmp_file})
|
|
|
|
return {
|
|
|
|
code = 1,
|
|
|
|
error = i18n.translatef("Md5 check failed: %s", url)
|
|
|
|
}
|
|
|
|
end
|
|
|
|
|
|
|
|
return {code = 0, file = tmp_file}
|
|
|
|
end
|
|
|
|
|
|
|
|
function to_flash(file,retain)
|
|
|
|
if not file or file == "" or not fs.access(file) then
|
|
|
|
return {code = 1, error = i18n.translate("Firmware file is required.")}
|
|
|
|
end
|
|
|
|
sys.call("/sbin/sysupgrade " ..retain.. " " ..file.. "")
|
|
|
|
|
|
|
|
return {code = 0}
|
|
|
|
end
|