79 lines
2.2 KiB
Lua
79 lines
2.2 KiB
Lua
module("luci.model.cbi.gpsysupgrade.api", package.seeall)
|
|
local fs = require "nixio.fs"
|
|
local sys = require "luci.sys"
|
|
local uci = require"luci.model.uci".cursor()
|
|
local util = require "luci.util"
|
|
|
|
appname = "gpsysupgrade"
|
|
curl = "/usr/bin/curl"
|
|
curl_args = {"-skfL", "--connect-timeout 3", "--retry 3"}
|
|
wget = "/usr/bin/wget"
|
|
wget_args = {"--no-check-certificate", "--quiet", "--timeout=100", "--tries=3"}
|
|
command_timeout = 40
|
|
LEDE_BOARD = nil
|
|
DISTRIB_TARGET = nil
|
|
|
|
function _unpack(t, i)
|
|
i = i or 1
|
|
if t[i] ~= nil then return t[i], _unpack(t, i + 1) end
|
|
end
|
|
|
|
function exec(cmd, args, writer, timeout)
|
|
local os = require "os"
|
|
local nixio = require "nixio"
|
|
|
|
local fdi, fdo = nixio.pipe()
|
|
local pid = nixio.fork()
|
|
|
|
if pid > 0 then
|
|
fdo:close()
|
|
|
|
if writer or timeout then
|
|
local starttime = os.time()
|
|
while true do
|
|
if timeout and os.difftime(os.time(), starttime) >= timeout then
|
|
nixio.kill(pid, nixio.const.SIGTERM)
|
|
return 1
|
|
end
|
|
|
|
if writer then
|
|
local buffer = fdi:read(2048)
|
|
if buffer and #buffer > 0 then
|
|
writer(buffer)
|
|
end
|
|
end
|
|
|
|
local wpid, stat, code = nixio.waitpid(pid, "nohang")
|
|
|
|
if wpid and stat == "exited" then return code end
|
|
|
|
if not writer and timeout then nixio.nanosleep(1) end
|
|
end
|
|
else
|
|
local wpid, stat, code = nixio.waitpid(pid)
|
|
return wpid and stat == "exited" and code
|
|
end
|
|
elseif pid == 0 then
|
|
nixio.dup(fdo, nixio.stdout)
|
|
fdi:close()
|
|
fdo:close()
|
|
nixio.exece(cmd, args, nil)
|
|
nixio.stdout:close()
|
|
os.exit(1)
|
|
end
|
|
end
|
|
|
|
function auto_get_model()
|
|
local arch = nixio.uname().machine or ""
|
|
if fs.access("/etc/openwrt_release") then
|
|
if arch == "x86_64" then
|
|
model = "x86_64"
|
|
else
|
|
local boardinfo = luci.util.ubus("system", "board") or { }
|
|
model = boardinfo.model
|
|
end
|
|
end
|
|
return util.trim(model)
|
|
end
|
|
|