luci.i18n.loadc("admin-core")
local i18n = luci.i18n.translate
- entry({"admin", "system"}, template("admin_system/index"), i18n("system"), 30)
+ entry({"admin", "system"}, alias("admin", "system", "system"), i18n("system"), 30)
+ entry({"admin", "system", "system"}, cbi("admin_system/system"), i18n("system"), 1)
entry({"admin", "system", "packages"}, call("action_packages"), i18n("a_s_packages"), 10)
- entry({"admin", "system", "packages", "ipkg"}, call("action_ipkg"), i18n("a_s_p_ipkg"))
- entry({"admin", "system", "passwd"}, call("action_passwd"), i18n("a_s_changepw"), 20)
+ entry({"admin", "system", "packages", "ipkg"}, form("admin_system/ipkg"), i18n("a_s_p_ipkg"))
+ entry({"admin", "system", "passwd"}, form("admin_system/passwd"), i18n("a_s_changepw"), 20)
entry({"admin", "system", "sshkeys"}, form("admin_system/sshkeys"), i18n("a_s_sshkeys"), 30)
- entry({"admin", "system", "system"}, cbi("admin_system/system"), i18n("system"), 40)
+ entry({"admin", "system", "processes"}, form("admin_system/processes"), i18n("process_head"), 45)
entry({"admin", "system", "fstab"}, cbi("admin_system/fstab"), i18n("a_s_fstab"), 50)
entry({"admin", "system", "leds"}, cbi("admin_system/leds"), i18n("leds", "LEDs"), 60)
entry({"admin", "system", "backup"}, call("action_backup"), i18n("a_s_backup"), 70)
entry({"admin", "system", "reboot"}, call("action_reboot"), i18n("reboot"), 90)
end
-function action_editor()
- local file = luci.http.formvalue("file", "")
- local data = luci.http.formvalue("data")
- local err = nil
- local msg = nil
- local stat = true
-
- if file and data then
- stat, err = luci.fs.writefile(file, data)
- end
-
- if not stat then
- err = luci.util.split(err, " ")
- table.remove(err, 1)
- msg = table.concat(err, " ")
- end
-
- local cnt, err = luci.fs.readfile(file)
- if cnt then
- cnt = luci.util.pcdata(cnt)
- end
- luci.template.render("admin_system/editor", {fn=file, cnt=cnt, msg=msg})
-end
-
-function action_ipkg()
- local file = "/etc/ipkg.conf"
- local data = luci.http.formvalue("data")
- local stat = nil
- local err = nil
-
- if data then
- stat, err = luci.fs.writefile(file, data)
- end
-
- local cnt = luci.fs.readfile(file)
- if cnt then
- cnt = luci.util.pcdata(cnt)
- end
-
- luci.template.render("admin_system/ipkg", {cnt=cnt, msg=err})
-end
-
function action_packages()
local ipkg = require("luci.model.ipkg")
local void = nil
-- Package info
- local info = luci.model.ipkg.info(query)
+ local info = luci.model.ipkg.info(query and "*"..query.."*")
info = info or {}
local pkgs = {}
function action_upgrade()
require("luci.model.uci")
+ local mtdow = require "luci.sys.mtdow"
+ local writer = mtdow.native_writer()
+ local blocks = writer and writer.blocks
+ local ltn12 = require "luci.ltn12"
+ local uploads = {}
+ local flash = {}
- local ret = nil
- local plat = luci.fs.mtime("/lib/upgrade/platform.sh")
- local tmpfile = "/tmp/firmware.img"
-
- local keep_avail = true
+ local ret
+ local filepat = "/tmp/mtdblock.%s"
+ local kfile = "/tmp/mtdappend.tgz"
+
+ local keep_avail = false
+ if blocks then
+ for k, block in pairs(blocks) do
+ if block.write == mtdow.WRITE_COMBINED
+ or block.write == mtdow.WRITE_EMULATED then
+ keep_avail = true
+ end
+ end
+ end
- local file
luci.http.setfilehandler(
function(meta, chunk, eof)
- if not file then
- file = io.open(tmpfile, "w")
+ if not meta or not blocks or not blocks[meta.name] then
+ return
+ end
+ if not uploads[meta.name] then
+ uploads[meta.name] = io.open(filepat % meta.name, "w")
end
if chunk then
- file:write(chunk)
+ uploads[meta.name]:write(chunk)
end
if eof then
- file:close()
+ uploads[meta.name]:close()
+ uploads[meta.name] = filepat % meta.name
end
end
)
- local fname = luci.http.formvalue("image")
+ luci.http.formvalue() -- Parse uploads
local keepcfg = keep_avail and luci.http.formvalue("keepcfg")
-
- if plat and fname then
- ret = luci.sys.flash(tmpfile, keepcfg and _keep_pattern())
+
+ local function _kfile()
+ luci.fs.unlink(kfile)
+
+ local kpattern = ""
+ local files = luci.model.uci.cursor():get_all("luci", "flash_keep")
+ if files then
+ kpattern = ""
+ for k, v in pairs(files) do
+ if k:sub(1,1) ~= "." and luci.fs.glob(v) then
+ kpattern = kpattern .. " '" .. v .. "'"
+ end
+ end
+ end
+
+ local stat = os.execute("tar czf '%s' %s >/dev/null 2>&1" % {kfile, kpattern})
+ return stat == 0 and kfile
end
- luci.template.render("admin_system/upgrade", {sysupgrade=plat, ret=ret, keep_avail=keep_avail})
-end
+ for name, file in pairs(uploads) do
+ flash[name] = function()
+ local imgstream = ltn12.source.file(io.open(file))
+ return pcall(writer.write_block, writer,
+ name, imgstream, keepcfg and _kfile())
+ end
+ end
+
+ local reboot = {}
-function _keep_pattern()
- local kpattern = ""
- local files = luci.model.uci.get_all("luci", "flash_keep")
- if files then
- kpattern = ""
- for k,v in pairs(files) do
- kpattern = kpattern .. " " .. v
+ luci.template.render("admin_system/upgrade", {blocks=blocks,
+ flash=flash, keep_avail=keep_avail, reboot=reboot})
+ if reboot.exec then
+ local pid = posix.fork()
+ if pid == 0 then
+ os.execute("sleep 1")
+ posix.execp("reboot")
end
end
- return kpattern
-end
\ No newline at end of file
+end