From f26e93beadda6cc361c4551777f1d728d9ddfa7d Mon Sep 17 00:00:00 2001 From: Steven Barth Date: Sun, 3 Aug 2008 15:01:36 +0000 Subject: [PATCH] admin-full, admin-mini: Added configuration backup, restore, reset page admin-full, admin-mini: Fixed a bug in firmware upgrade preventing configuration files from being kept --- i18n/english/luasrc/i18n/admin-core.en.lua | 12 ++++ i18n/german/luasrc/i18n/admin-core.de.lua | 13 +++- .../luasrc/controller/admin/system.lua | 70 +++++++++++++++---- .../luasrc/view/admin_system/applyreboot.htm | 21 ++++++ .../luasrc/view/admin_system/backup.htm | 40 +++++++++++ .../luasrc/controller/mini/system.lua | 66 ++++++++++++++--- .../luasrc/view/mini/applyreboot.htm | 21 ++++++ .../admin-mini/luasrc/view/mini/backup.htm | 40 +++++++++++ 8 files changed, 258 insertions(+), 25 deletions(-) create mode 100644 modules/admin-full/luasrc/view/admin_system/applyreboot.htm create mode 100644 modules/admin-full/luasrc/view/admin_system/backup.htm create mode 100644 modules/admin-mini/luasrc/view/mini/applyreboot.htm create mode 100644 modules/admin-mini/luasrc/view/mini/backup.htm diff --git a/i18n/english/luasrc/i18n/admin-core.en.lua b/i18n/english/luasrc/i18n/admin-core.en.lua index 9341b1f86..e3889153b 100644 --- a/i18n/english/luasrc/i18n/admin-core.en.lua +++ b/i18n/english/luasrc/i18n/admin-core.en.lua @@ -100,6 +100,18 @@ a_s_reboot_do = "Perform reboot" a_s_reboot_running = "Please wait: Device rebooting..." a_s_reboot_u = "Warning: There are unsaved changes that will be lost while rebooting!" +a_s_applyreboot1 = "Changes applied." + +a_s_backup = "Backup / Restore" +a_s_backup_backup = "Create backup" +a_s_backup_archive = "Backup Archive" +a_s_backup_reset = "Reset router to defaults" +a_s_backup_reset1 = "Proceed reverting all settings and resetting to firmware defaults?" +a_s_backup_restore = "Restore backup" +a_s_backup1 = [[Here you can backup and restore your router configuration +and - if possible - reset the router to the default settings.]] + + a_srv_http = "HTTP-Server" a_srv_ssh = "SSH-Server" diff --git a/i18n/german/luasrc/i18n/admin-core.de.lua b/i18n/german/luasrc/i18n/admin-core.de.lua index eb38d4a31..93c0cbcc8 100644 --- a/i18n/german/luasrc/i18n/admin-core.de.lua +++ b/i18n/german/luasrc/i18n/admin-core.de.lua @@ -281,4 +281,15 @@ wlanscan = "WLAN-Scan" m_n_keepalive = "automatisch neu verbinden" m_n_dialondemand = "trennen bei Inaktivität nach" -m_n_pptp_server = "PPTP-Server" \ No newline at end of file +m_n_pptp_server = "PPTP-Server" + +a_s_applyreboot1 = "Änderungen angewandt." + +a_s_backup = "Sichern / Wiederherstellen" +a_s_backup_backup = "Sicherung erstellen" +a_s_backup_archive = "Sicherungsarchiv" +a_s_backup_reset = "Grundeinstellungen wiederherstellen" +a_s_backup_reset1 = "Alle aktuellen Einstellungen verwerfen und Grundeinstellungen wiederherstellen?" +a_s_backup_restore = "Sicherung wiederherstellen" +a_s_backup1 = [[Auf dieser Seite können Sicherungen der Konfiguration erstellt und eingespielt werden +und - wenn möglich - die Grundeinstellungen wiederhergestellt werden.]] \ No newline at end of file diff --git a/modules/admin-full/luasrc/controller/admin/system.lua b/modules/admin-full/luasrc/controller/admin/system.lua index 14fd813c3..01663a4c3 100644 --- a/modules/admin-full/luasrc/controller/admin/system.lua +++ b/modules/admin-full/luasrc/controller/admin/system.lua @@ -24,8 +24,9 @@ function index() entry({"admin", "system", "sshkeys"}, call("action_sshkeys"), i18n("a_s_sshkeys", "SSH-Schlüssel"), 30) entry({"admin", "system", "system"}, cbi("admin_system/system"), i18n("system", "System"), 40) entry({"admin", "system", "fstab"}, cbi("admin_system/fstab"), i18n("a_s_fstab", "Einhängepunkte"), 50) - entry({"admin", "system", "upgrade"}, call("action_upgrade"), i18n("a_s_flash", "Firmwareupgrade"), 60) - entry({"admin", "system", "reboot"}, call("action_reboot"), i18n("reboot", "Neu starten"), 70) + entry({"admin", "system", "backup"}, call("action_backup"), i18n("a_s_backup"), 60) + entry({"admin", "system", "upgrade"}, call("action_upgrade"), i18n("a_s_flash", "Firmwareupgrade"), 70) + entry({"admin", "system", "reboot"}, call("action_reboot"), i18n("reboot", "Neu starten"), 80) end function action_editor() @@ -153,6 +154,47 @@ function action_packages() install=install, remove=remove, update=update, upgrade=upgrade}) end +function action_backup() + local reset_avail = luci.sys.exec([[grep '"rootfs_data"' /proc/mtd >/dev/null 2>&1]]) == 0 + local restore_cmd = "gunzip | tar -xC/ >/dev/null 2>&1" + local backup_cmd = "tar -c %s | gzip 2>/dev/null" + + local restore_fpi + luci.http.setfilehandler( + function(meta, chunk, eof) + if not restore_fpi then + restore_fpi = io.popen(restore_cmd, "w") + end + if chunk then + restore_fpi:write(chunk) + end + if eof then + restore_fpi:close() + end + end + ) + + local upload = luci.http.formvalue("archive") + local backup = luci.http.formvalue("backup") + local reset = reset_avail and luci.http.formvalue("reset") + + if upload and #upload > 0 then + luci.template.render("admin_system/applyreboot") + luci.sys.reboot() + elseif backup then + luci.util.perror(backup_cmd:format(_keep_pattern())) + local backup_fpi = io.popen(backup_cmd:format(_keep_pattern()), "r") + luci.http.header('Content-Disposition', 'attachment; filename="backup.tar.gz"') + luci.http.prepare_content("application/x-targz") + luci.ltn12.pump.all(luci.ltn12.source.file(backup_fpi), luci.http.write) + elseif reset then + luci.template.render("admin_system/applyreboot") + luci.sys.exec("mtd -r erase rootfs_data") + else + luci.template.render("admin_system/backup", {reset_avail = reset_avail}) + end +end + function action_passwd() local p1 = luci.http.formvalue("pwd1") local p2 = luci.http.formvalue("pwd2") @@ -221,18 +263,20 @@ function action_upgrade() local keepcfg = luci.http.formvalue("keepcfg") if plat and fname then - local kpattern = nil - if keepcfg then - local files = luci.model.uci.get_all("luci", "flash_keep") - if files.luci and files.luci.flash_keep then - kpattern = "" - for k,v in pairs(files.luci.flash_keep) do - kpattern = kpattern .. " " .. v - end - end - end - ret = luci.sys.flash(tmpfile, kpattern) + ret = luci.sys.flash(tmpfile, keepcfg and _keep_pattern()) end luci.template.render("admin_system/upgrade", {sysupgrade=plat, ret=ret}) +end + +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 + end + end + return kpattern end \ No newline at end of file diff --git a/modules/admin-full/luasrc/view/admin_system/applyreboot.htm b/modules/admin-full/luasrc/view/admin_system/applyreboot.htm new file mode 100644 index 000000000..cbfa23d31 --- /dev/null +++ b/modules/admin-full/luasrc/view/admin_system/applyreboot.htm @@ -0,0 +1,21 @@ +<%# +LuCI - Lua Configuration Interface +Copyright 2008 Steven Barth +Copyright 2008 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%> +

<%:system%>

+
+

<% if msg then %><%=msg%><% else %><%:a_s_applyreboot1%><% end %>

+

<%:a_s_reboot_running%>

+ +<%+footer%> \ No newline at end of file diff --git a/modules/admin-full/luasrc/view/admin_system/backup.htm b/modules/admin-full/luasrc/view/admin_system/backup.htm new file mode 100644 index 000000000..42d338e1d --- /dev/null +++ b/modules/admin-full/luasrc/view/admin_system/backup.htm @@ -0,0 +1,40 @@ +<%# +LuCI - Lua Configuration Interface +Copyright 2008 Steven Barth +Copyright 2008 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%> +

<%:system%>

+

<%:a_s_backup%>

+

<%:a_s_backup1%>

+
+
+ +
+ +
+ +
+
<%:a_s_backup_archive%>:
+
+ +
+
+ +
+
+<%+footer%> \ No newline at end of file diff --git a/modules/admin-mini/luasrc/controller/mini/system.lua b/modules/admin-mini/luasrc/controller/mini/system.lua index a4a07a672..e272a1fc7 100644 --- a/modules/admin-mini/luasrc/controller/mini/system.lua +++ b/modules/admin-mini/luasrc/controller/mini/system.lua @@ -22,10 +22,52 @@ function index() entry({"mini", "system"}, alias("mini", "system", "index"), i18n("system"), 40) entry({"mini", "system", "index"}, cbi("mini/system"), i18n("general"), 1) entry({"mini", "system", "passwd"}, call("action_passwd"), i18n("a_s_changepw"), 10) + entry({"mini", "system", "backup"}, call("action_backup"), i18n("a_s_backup"), 80) entry({"mini", "system", "upgrade"}, call("action_upgrade"), i18n("a_s_flash"), 90) entry({"mini", "system", "reboot"}, call("action_reboot"), i18n("reboot"), 100) end +function action_backup() + local reset_avail = luci.sys.exec([[grep '"rootfs_data"' /proc/mtd >/dev/null 2>&1]]) == 0 + local restore_cmd = "gunzip | tar -xC/ >/dev/null 2>&1" + local backup_cmd = "tar -c %s | gzip 2>/dev/null" + + local restore_fpi + luci.http.setfilehandler( + function(meta, chunk, eof) + if not restore_fpi then + restore_fpi = io.popen(restore_cmd, "w") + end + if chunk then + restore_fpi:write(chunk) + end + if eof then + restore_fpi:close() + end + end + ) + + local upload = luci.http.formvalue("archive") + local backup = luci.http.formvalue("backup") + local reset = reset_avail and luci.http.formvalue("reset") + + if upload and #upload > 0 then + luci.template.render("mini/applyreboot") + luci.sys.reboot() + elseif backup then + luci.util.perror(backup_cmd:format(_keep_pattern())) + local backup_fpi = io.popen(backup_cmd:format(_keep_pattern()), "r") + luci.http.header('Content-Disposition', 'attachment; filename="backup.tar.gz"') + luci.http.prepare_content("application/x-targz") + luci.ltn12.pump.all(luci.ltn12.source.file(backup_fpi), luci.http.write) + elseif reset then + luci.template.render("mini/applyreboot") + luci.sys.exec("mtd -r erase rootfs_data") + else + luci.template.render("mini/backup", {reset_avail = reset_avail}) + end +end + function action_reboot() local reboot = luci.http.formvalue("reboot") luci.template.render("mini/reboot", {reboot=reboot}) @@ -60,17 +102,7 @@ function action_upgrade() local keepcfg = luci.http.formvalue("keepcfg") if plat and fname then - local kpattern = nil - if keepcfg then - local files = luci.model.uci.get_all("luci", "flash_keep") - if files.luci and files.luci.flash_keep then - kpattern = "" - for k,v in pairs(files.luci.flash_keep) do - kpattern = kpattern .. " " .. v - end - end - end - ret = luci.sys.flash(tmpfile, kpattern) + ret = luci.sys.flash(tmpfile, keepcfg and _keep_pattern()) end luci.template.render("mini/upgrade", {sysupgrade=plat, ret=ret}) @@ -90,4 +122,16 @@ function action_passwd() end luci.template.render("mini/passwd", {stat=stat}) +end + +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 + end + end + return kpattern end \ No newline at end of file diff --git a/modules/admin-mini/luasrc/view/mini/applyreboot.htm b/modules/admin-mini/luasrc/view/mini/applyreboot.htm new file mode 100644 index 000000000..cbfa23d31 --- /dev/null +++ b/modules/admin-mini/luasrc/view/mini/applyreboot.htm @@ -0,0 +1,21 @@ +<%# +LuCI - Lua Configuration Interface +Copyright 2008 Steven Barth +Copyright 2008 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%> +

<%:system%>

+
+

<% if msg then %><%=msg%><% else %><%:a_s_applyreboot1%><% end %>

+

<%:a_s_reboot_running%>

+ +<%+footer%> \ No newline at end of file diff --git a/modules/admin-mini/luasrc/view/mini/backup.htm b/modules/admin-mini/luasrc/view/mini/backup.htm new file mode 100644 index 000000000..42d338e1d --- /dev/null +++ b/modules/admin-mini/luasrc/view/mini/backup.htm @@ -0,0 +1,40 @@ +<%# +LuCI - Lua Configuration Interface +Copyright 2008 Steven Barth +Copyright 2008 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%> +

<%:system%>

+

<%:a_s_backup%>

+

<%:a_s_backup1%>

+
+
+ +
+ +
+ +
+
<%:a_s_backup_archive%>:
+
+ +
+
+ +
+
+<%+footer%> \ No newline at end of file -- 2.25.1