From: Steven Barth Date: Fri, 12 Sep 2008 11:53:08 +0000 (+0000) Subject: Redesigned firmware upgrade process X-Git-Tag: 0.9.0~1341 X-Git-Url: https://git.archive.openwrt.org/?p=project%2Fluci.git;a=commitdiff_plain;h=fade8edd2dfe39ae579256d04220aba9da2ff074 Redesigned firmware upgrade process --- diff --git a/contrib/package/luci-addons/dist/sbin/luci-flash b/contrib/package/luci-addons/dist/sbin/luci-flash index 79bc834b4..07434b507 100755 --- a/contrib/package/luci-addons/dist/sbin/luci-flash +++ b/contrib/package/luci-addons/dist/sbin/luci-flash @@ -85,9 +85,5 @@ done [ -n "$sysupgrade_init_conffiles" ] && do_save_conffiles run_hooks "" $sysupgrade_pre_upgrade -ask_bool() { - false -} - v "Switching to ramdisk..." run_ramfs '. /etc/functions.sh; include /lib/upgrade; do_upgrade' diff --git a/i18n/english/luasrc/i18n/admin-core.en.lua b/i18n/english/luasrc/i18n/admin-core.en.lua index 88d6249c6..c260b59b4 100644 --- a/i18n/english/luasrc/i18n/admin-core.en.lua +++ b/i18n/english/luasrc/i18n/admin-core.en.lua @@ -70,7 +70,7 @@ a_s_flash_flashed = 'Firmware successfully flashed. Rebooting device...' a_s_flash_flasherr = 'Failed to flash' a_s_flash_fwimage = 'Firmwareimage' a_s_flash_received = 'Image received. About to start flashing process. DO NOT POWER OFF THE DEVICE!' -a_s_flash_inprogress = 'Writing firmware...' +a_s_flash_inprogress = 'Now writing firmware. Depending on your hardware this can take up to 20 minutes or more. Please check your device from time to time to see whether the writing process has completed.' a_s_flash_fwupgrade = 'Flash Firmware' a_s_flash_keepcfg = 'Keep configuration files' a_s_flash_notimplemented = 'Sorry, this function is not (yet) available for your platform.' diff --git a/i18n/english/luasrc/i18n/admin-core.en.xml b/i18n/english/luasrc/i18n/admin-core.en.xml index c161a948c..322185d97 100644 --- a/i18n/english/luasrc/i18n/admin-core.en.xml +++ b/i18n/english/luasrc/i18n/admin-core.en.xml @@ -74,7 +74,7 @@ Failed to flash Firmwareimage Image received. About to start flashing process. DO NOT POWER OFF THE DEVICE! -Writing firmware... +Now writing firmware. Depending on your hardware this can take up to 20 minutes or more. Please check your device from time to time to see whether the writing process has completed. Flash Firmware Keep configuration files Sorry, this function is not (yet) available for your platform. diff --git a/i18n/german/luasrc/i18n/admin-core.de.lua b/i18n/german/luasrc/i18n/admin-core.de.lua index 30258fbff..5221b9a39 100644 --- a/i18n/german/luasrc/i18n/admin-core.de.lua +++ b/i18n/german/luasrc/i18n/admin-core.de.lua @@ -40,7 +40,7 @@ a_s_flash_flashed = 'Flashvorgang erfolgreich. Router startet neu...' a_s_flash_flasherr = 'Flashvorgang fehlgeschlagen' a_s_flash_fwimage = 'Firmwareimage' a_s_flash_received = 'Abbild empfangen. Starte Flashvorgang. SCHALTEN SIE DAS GERÄT NICHT AUS!' -a_s_flash_inprogress = 'Schreibe Firmware...' +a_s_flash_inprogress = 'Die Firmware wird nun geschrieben. Abhängig von der Hardware kann dieser Prozess bis zu 20 Minuten und länger dauern. Bitte prüfen sie das Gerät von Zeit zu Zeit, um zu sehen, ob der Schreibvorgang beendet ist.' a_s_flash_fwupgrade = 'Firmware aktualisieren' a_s_flash_keepcfg = 'Konfigurationsdateien übernehmen' a_s_flash_notimplemented = 'Diese Funktion steht leider (noch) nicht zur Verfügung.' diff --git a/i18n/german/luasrc/i18n/admin-core.de.xml b/i18n/german/luasrc/i18n/admin-core.de.xml index 3a821c3fd..f963d0359 100644 --- a/i18n/german/luasrc/i18n/admin-core.de.xml +++ b/i18n/german/luasrc/i18n/admin-core.de.xml @@ -44,7 +44,7 @@ Flashvorgang fehlgeschlagen Firmwareimage Abbild empfangen. Starte Flashvorgang. SCHALTEN SIE DAS GERÄT NICHT AUS! -Schreibe Firmware... +Die Firmware wird nun geschrieben. Abhängig von der Hardware kann dieser Prozess bis zu 20 Minuten und länger dauern. Bitte prüfen sie das Gerät von Zeit zu Zeit, um zu sehen, ob der Schreibvorgang beendet ist. Firmware aktualisieren Konfigurationsdateien übernehmen Diese Funktion steht leider (noch) nicht zur Verfügung. diff --git a/libs/sys/luasrc/sys.lua b/libs/sys/luasrc/sys.lua index e27e1c4e8..9b68a25e6 100644 --- a/libs/sys/luasrc/sys.lua +++ b/libs/sys/luasrc/sys.lua @@ -60,15 +60,35 @@ exec = luci.util.exec --- Invoke the luci-flash executable to write an image to the flash memory. -- @param image Local path or URL to image file -- @param kpattern Pattern of files to keep over flash process --- @return Return value of os.execute() +-- @return boolean indicating status +-- @return error message if any function flash(image, kpattern) local cmd = "luci-flash " if kpattern then cmd = cmd .. "-k '" .. kpattern:gsub("'", "") .. "' " end - cmd = cmd .. "'" .. image:gsub("'", "") .. "' >/dev/null 2>&1" + cmd = cmd .. "'" .. image:gsub("'", "") .. "' 2>/dev/null" - return os.execute(cmd) + local fp = io.popen(cmd) + local line = fp:read() + + if line == "Invalid image type" then + fp:close() + return false, line + else + line = fp:read() + if line == "Performing system upgrade" then + return true + end + + line = fp:read() + if line == "Performing system upgrade" then + return true + end + + fp:close() + return false, line + end end --- Retrieve information about currently mounted file systems. diff --git a/modules/admin-full/luasrc/controller/admin/system.lua b/modules/admin-full/luasrc/controller/admin/system.lua index 5d64336e0..55087a017 100644 --- a/modules/admin-full/luasrc/controller/admin/system.lua +++ b/modules/admin-full/luasrc/controller/admin/system.lua @@ -182,7 +182,7 @@ end function action_upgrade() require("luci.model.uci") - local ret + local ret, err local plat = luci.fs.mtime("/lib/upgrade/platform.sh") local tmpfile = "/tmp/firmware.img" local broadcom = os.execute('grep brcm_ /lib/upgrade/platform.sh >/dev/null 2>&1') == 0 @@ -208,12 +208,11 @@ function action_upgrade() local keepcfg = keep_avail and luci.http.formvalue("keepcfg") if plat and fname then - ret = function() - return luci.sys.flash(tmpfile, keepcfg and _keep_pattern()) - end + ret, err = luci.sys.flash(tmpfile, keepcfg and _keep_pattern()) end - luci.template.render("admin_system/upgrade", {sysupgrade=plat, ret=ret, keep_avail=keep_avail}) + luci.template.render("admin_system/upgrade", {sysupgrade=plat, + ret=ret, err=err, keep_avail=keep_avail}) end function _keep_pattern() diff --git a/modules/admin-full/luasrc/view/admin_system/upgrade.htm b/modules/admin-full/luasrc/view/admin_system/upgrade.htm index a3d97d649..40f3ec984 100644 --- a/modules/admin-full/luasrc/view/admin_system/upgrade.htm +++ b/modules/admin-full/luasrc/view/admin_system/upgrade.htm @@ -17,7 +17,7 @@ $Id$

<%:a_s_flash%>

<%:a_s_flash_upgrade1%>


-<% if sysupgrade and not ret then %> +<% if sysupgrade and ret == nil then %>
<%:a_s_flash_fwimage%>:
@@ -33,20 +33,14 @@ $Id$
-<% elseif ret then %> -

<%:a_s_flash_received%>

-

<%:a_s_flash_inprogress%>

- - - <% %> - <% local ret = ret() - if ret == 0 then %> -
<%:a_s_flash_flashed%>
+<% elseif ret ~= nil then %> + <% if ret then %> +

<%:a_s_flash_received%>

+

<%:a_s_flash_inprogress%>

<% else %> -
<%:a_s_flash_flasherr%>! (<%:code%> <%=ret%>)
+
<%:a_s_flash_flasherr%>! (<%=err%>)
<% end %> <% else %>
<%:a_s_flash_notimplemented%>
<% end %> <%+footer%> -<% if ret == 0 then luci.sys.reboot() end %> diff --git a/modules/admin-mini/luasrc/controller/mini/system.lua b/modules/admin-mini/luasrc/controller/mini/system.lua index 6d16ef865..d68283cc6 100644 --- a/modules/admin-mini/luasrc/controller/mini/system.lua +++ b/modules/admin-mini/luasrc/controller/mini/system.lua @@ -79,7 +79,7 @@ end function action_upgrade() require("luci.model.uci") - local ret = nil + local ret, err local plat = luci.fs.mtime("/lib/upgrade/platform.sh") local tmpfile = "/tmp/firmware.img" local broadcom = os.execute('grep brcm_ /lib/upgrade/platform.sh >/dev/null 2>&1') == 0 @@ -105,12 +105,11 @@ function action_upgrade() local keepcfg = keep_avail and luci.http.formvalue("keepcfg") if plat and fname then - ret = function() - return luci.sys.flash(tmpfile, keepcfg and _keep_pattern()) - end + ret, err = luci.sys.flash(tmpfile, keepcfg and _keep_pattern()) end - luci.template.render("mini/upgrade", {sysupgrade=plat, ret=ret, keep_avail=keep_avail}) + luci.template.render("admin_system/upgrade", {sysupgrade=plat, + ret=ret, err=err, keep_avail=keep_avail}) end function _keep_pattern() diff --git a/modules/admin-mini/luasrc/view/mini/upgrade.htm b/modules/admin-mini/luasrc/view/mini/upgrade.htm index a3d97d649..40f3ec984 100644 --- a/modules/admin-mini/luasrc/view/mini/upgrade.htm +++ b/modules/admin-mini/luasrc/view/mini/upgrade.htm @@ -17,7 +17,7 @@ $Id$

<%:a_s_flash%>

<%:a_s_flash_upgrade1%>


-<% if sysupgrade and not ret then %> +<% if sysupgrade and ret == nil then %>
<%:a_s_flash_fwimage%>:
@@ -33,20 +33,14 @@ $Id$
-<% elseif ret then %> -

<%:a_s_flash_received%>

-

<%:a_s_flash_inprogress%>

- - - <% %> - <% local ret = ret() - if ret == 0 then %> -
<%:a_s_flash_flashed%>
+<% elseif ret ~= nil then %> + <% if ret then %> +

<%:a_s_flash_received%>

+

<%:a_s_flash_inprogress%>

<% else %> -
<%:a_s_flash_flasherr%>! (<%:code%> <%=ret%>)
+
<%:a_s_flash_flasherr%>! (<%=err%>)
<% end %> <% else %>
<%:a_s_flash_notimplemented%>
<% end %> <%+footer%> -<% if ret == 0 then luci.sys.reboot() end %>