From e2ff6a6ed3ba455d5cf0acaa2d129a4be3a67758 Mon Sep 17 00:00:00 2001
From: Nils Schneider
Date: Thu, 28 Aug 2014 12:53:51 +0200
Subject: [PATCH] gluon-luci-admin: restructure firmware upgrades
---
.../lib/lua/luci/controller/admin/upgrade.lua | 118 ++++++++----------
.../usr/lib/lua/luci/view/admin/upgrade.htm | 116 +++++------------
.../lua/luci/view/admin/upgrade_confirm.htm | 67 ++++++++++
.../lua/luci/view/admin/upgrade_reboot.htm | 21 ++++
4 files changed, 170 insertions(+), 152 deletions(-)
create mode 100644 package/gluon-luci-admin/files/usr/lib/lua/luci/view/admin/upgrade_confirm.htm
create mode 100644 package/gluon-luci-admin/files/usr/lib/lua/luci/view/admin/upgrade_reboot.htm
diff --git a/package/gluon-luci-admin/files/usr/lib/lua/luci/controller/admin/upgrade.lua b/package/gluon-luci-admin/files/usr/lib/lua/luci/controller/admin/upgrade.lua
index ff248bfa..868c2bbd 100644
--- a/package/gluon-luci-admin/files/usr/lib/lua/luci/controller/admin/upgrade.lua
+++ b/package/gluon-luci-admin/files/usr/lib/lua/luci/controller/admin/upgrade.lua
@@ -16,51 +16,16 @@ $Id$
module("luci.controller.admin.upgrade", package.seeall)
function index()
- entry({"admin", "upgrade"}, call("action_upgrade"), "Firmware aktualisieren", 90)
+ local has_platform = nixio.fs.access("/lib/upgrade/platform.sh")
+ if has_platform then
+ entry({"admin", "upgrade"}, call("action_upgrade"), "Firmware aktualisieren", 90)
+ entry({"admin", "upgrade", "reboot"}, template("admin/upgrade_reboot"), nil, nil)
+ end
end
function action_upgrade()
- require("luci.model.uci")
-
local tmpfile = "/tmp/firmware.img"
- local function image_supported()
- -- XXX: yay...
- return ( 0 == os.execute(
- ". /lib/functions.sh; " ..
- "include /lib/upgrade; " ..
- "platform_check_image %q >/dev/null"
- % tmpfile
- ) )
- end
-
- local function image_checksum()
- return (luci.sys.exec("md5sum %q" % tmpfile):match("^([^%s]+)"))
- end
-
- local function storage_size()
- local size = 0
- if nixio.fs.access("/proc/mtd") then
- for l in io.lines("/proc/mtd") do
- local d, s, e, n = l:match('^([^%s]+)%s+([^%s]+)%s+([^%s]+)%s+"([^%s]+)"')
- if n == "linux" then
- size = tonumber(s, 16)
- break
- end
- end
- elseif nixio.fs.access("/proc/partitions") then
- for l in io.lines("/proc/partitions") do
- local x, y, b, n = l:match('^%s*(%d+)%s+(%d+)%s+([^%s]+)%s+([^%s]+)')
- if b and n and not n:match('[0-9]') then
- size = tonumber(b) * 1024
- break
- end
- end
- end
- return size
- end
-
-
-- Install upload handler
local file
luci.http.setfilehandler(
@@ -77,19 +42,10 @@ function action_upgrade()
end
)
-
-- Determine state
- local keep_avail = true
local step = tonumber(luci.http.formvalue("step") or 1)
local has_image = nixio.fs.access(tmpfile)
- local has_support = image_supported()
- local has_platform = nixio.fs.access("/lib/upgrade/platform.sh")
- local has_upload = luci.http.formvalue("image")
-
- --
- -- This is step 1-3, which does the user interaction and
- -- image upload.
- --
+ local has_support = image_supported(tmpfile)
-- Step 1: file upload, error on unsupported image format
if not has_image or not has_support or step == 1 then
@@ -100,33 +56,21 @@ function action_upgrade()
end
luci.template.render("admin/upgrade", {
- step=1,
- bad_image=(has_image and not has_support or false),
- keepavail=keep_avail,
- supported=has_platform
+ bad_image=(has_image and not has_support or false)
} )
-- Step 2: present uploaded file, show checksum, confirmation
elseif step == 2 then
- luci.template.render("admin/upgrade", {
- step=2,
- checksum=image_checksum(),
+ luci.template.render("admin/upgrade_confirm", {
+ checksum=image_checksum(tmpfile),
filesize=nixio.fs.stat(tmpfile).size,
flashsize=storage_size(),
- keepconfig=(keep_avail and luci.http.formvalue("keepcfg") == "1")
+ keepconfig=luci.http.formvalue("keepcfg") == "1"
} )
-
- -- Step 3: load iframe which calls the actual flash procedure
elseif step == 3 then
- -- invoke sysupgrade
- local keepcfg = keep_avail and luci.http.formvalue("keepcfg") == "1"
- fork_exec("/sbin/sysupgrade %s %q" %
- { keepcfg and "" or "-n"
- , tmpfile
- }
- )
-
- luci.template.render("admin/upgrade", { step=3 } )
+ local keepcfg = luci.http.formvalue("keepcfg") == "1"
+ fork_exec("/sbin/sysupgrade %s %q" % { keepcfg and "" or "-n", tmpfile })
+ luci.http.redirect(luci.dispatcher.build_url("admin", "upgrade", "reboot"))
end
end
@@ -153,3 +97,39 @@ function fork_exec(command)
nixio.exec("/bin/sh", "-c", command)
end
end
+
+function image_supported(tmpfile)
+ -- XXX: yay...
+ return ( 0 == os.execute(
+ ". /lib/functions.sh; " ..
+ "include /lib/upgrade; " ..
+ "platform_check_image %q >/dev/null"
+ % tmpfile
+ ) )
+end
+
+function storage_size()
+ local size = 0
+ if nixio.fs.access("/proc/mtd") then
+ for l in io.lines("/proc/mtd") do
+ local d, s, e, n = l:match('^([^%s]+)%s+([^%s]+)%s+([^%s]+)%s+"([^%s]+)"')
+ if n == "linux" then
+ size = tonumber(s, 16)
+ break
+ end
+ end
+ elseif nixio.fs.access("/proc/partitions") then
+ for l in io.lines("/proc/partitions") do
+ local x, y, b, n = l:match('^%s*(%d+)%s+(%d+)%s+([^%s]+)%s+([^%s]+)')
+ if b and n and not n:match('[0-9]') then
+ size = tonumber(b) * 1024
+ break
+ end
+ end
+ end
+ return size
+end
+
+function image_checksum(tmpfile)
+ return (luci.sys.exec("md5sum %q" % tmpfile):match("^([^%s]+)"))
+end
diff --git a/package/gluon-luci-admin/files/usr/lib/lua/luci/view/admin/upgrade.htm b/package/gluon-luci-admin/files/usr/lib/lua/luci/view/admin/upgrade.htm
index 8c9ea4f5..343ed495 100644
--- a/package/gluon-luci-admin/files/usr/lib/lua/luci/view/admin/upgrade.htm
+++ b/package/gluon-luci-admin/files/usr/lib/lua/luci/view/admin/upgrade.htm
@@ -17,89 +17,39 @@ $Id$
Firmware aktualisieren
-<% if step == 1 then %>
- <% if supported then %>
-
- <% else %>
-
Auf diesem Gerät kann kein Upgrade durchgeführt werden.
- Bitte führe das Upgrade manuell durch.
- <% end %>
-<% elseif step == 2 then %>
-
- Die Firmwaredatei wurde übermittelt. Bitte vergleiche MD5-Checksumme
- und Dateigröße und klicke anschließend auf "Fortfahren".
-
-
- <% if flashsize > 0 and filesize > flashsize then %>
-
Die Firmware passt nicht in den Speicher des Gerätes.
- <% end %>
-
-
-
-
md5sum: <%=checksum%>
-
Größe: <%
- function byte_format(byte)
- local suff = {"B", "KB", "MB", "GB", "TB"}
- for i=1, 5 do
- if byte > 1024 and i < 5 then
- byte = byte / 1024
- else
- return string.format("%.2f %s", byte, suff[i])
- end
- end
- end
-
- write(byte_format(filesize))
-
- if flashsize > 0 then
- write(luci.i18n.translatef(
- " (%s available)",
- w.byte_format(flashsize)
- ))
- end
- %>
-
-
-
-
-
-
-<% elseif step == 3 then %>
-
- Die Firmware wird jetzt aktualisiert.
- UNTERBRICH AUF KEINEN FALL DIE STROMVERSORGUNG!
- Dieser Vorgang wird einige Minuten dauern. Anschließend startet
- das Gerät automatisch neu.
-
+
<%+footer%>
diff --git a/package/gluon-luci-admin/files/usr/lib/lua/luci/view/admin/upgrade_confirm.htm b/package/gluon-luci-admin/files/usr/lib/lua/luci/view/admin/upgrade_confirm.htm
new file mode 100644
index 00000000..ac375761
--- /dev/null
+++ b/package/gluon-luci-admin/files/usr/lib/lua/luci/view/admin/upgrade_confirm.htm
@@ -0,0 +1,67 @@
+<%#
+LuCI - Lua Configuration Interface
+Copyright 2008 Steven Barth
+Copyright 2008-2009 Jo-Philipp Wich
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+$Id$
+
+-%>
+
+<%+header%>
+
+
Firmware aktualisieren
+
+ Die Firmwaredatei wurde übermittelt. Bitte vergleiche MD5-Checksumme
+ und Dateigröße und klicke anschließend auf "Fortfahren".
+
+
+<% if flashsize > 0 and filesize > flashsize then %>
+
Die Firmware passt nicht in den Speicher des Gerätes.
+<% end %>
+
+
+
+
md5sum: <%=checksum%>
+
Größe: <%
+ function byte_format(byte)
+ local suff = {"B", "KB", "MB", "GB", "TB"}
+ for i=1, 5 do
+ if byte > 1024 and i < 5 then
+ byte = byte / 1024
+ else
+ return string.format("%.2f %s", byte, suff[i])
+ end
+ end
+ end
+
+ write(byte_format(filesize))
+
+ if flashsize > 0 then
+ write(luci.i18n.translatef(
+ " (%s available)",
+ w.byte_format(flashsize)
+ ))
+ end
+ %>
+ Die Firmware wird jetzt aktualisiert.
+ UNTERBRICH AUF KEINEN FALL DIE STROMVERSORGUNG!
+ Dieser Vorgang wird einige Minuten dauern.
+ Anschließend startet das Gerät automatisch neu.
+