diff options
author | Jo-Philipp Wich <jo@mein.io> | 2019-09-21 18:36:31 +0200 |
---|---|---|
committer | Jo-Philipp Wich <jo@mein.io> | 2019-09-21 18:36:31 +0200 |
commit | 71e265a7f038f172eada95576496ef240a9c83e7 (patch) | |
tree | a592edaec6bcc584ac11b014018f2a9b43ee1f00 /modules/luci-mod-system/luasrc | |
parent | 54cab2f26be6c925cab8651c254380877474a130 (diff) |
luci-mod-system: remplement fstab settings as client side view
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Diffstat (limited to 'modules/luci-mod-system/luasrc')
4 files changed, 1 insertions, 487 deletions
diff --git a/modules/luci-mod-system/luasrc/controller/admin/system.lua b/modules/luci-mod-system/luasrc/controller/admin/system.lua index 0ce08d10bd..eaf1105dd6 100644 --- a/modules/luci-mod-system/luasrc/controller/admin/system.lua +++ b/modules/luci-mod-system/luasrc/controller/admin/system.lua @@ -23,9 +23,7 @@ function index() entry({"admin", "system", "crontab"}, view("system/crontab"), _("Scheduled Tasks"), 46) if fs.access("/sbin/block") and fs.access("/etc/config/fstab") then - entry({"admin", "system", "fstab"}, cbi("admin_system/fstab"), _("Mount Points"), 50) - entry({"admin", "system", "fstab", "mount"}, cbi("admin_system/fstab/mount"), nil).leaf = true - entry({"admin", "system", "fstab", "swap"}, cbi("admin_system/fstab/swap"), nil).leaf = true + entry({"admin", "system", "mounts"}, view("system/mounts"), _("Mount Points"), 50) end local nodes, number = fs.glob("/sys/class/leds/*") diff --git a/modules/luci-mod-system/luasrc/model/cbi/admin_system/fstab.lua b/modules/luci-mod-system/luasrc/model/cbi/admin_system/fstab.lua deleted file mode 100644 index 4a31146a03..0000000000 --- a/modules/luci-mod-system/luasrc/model/cbi/admin_system/fstab.lua +++ /dev/null @@ -1,272 +0,0 @@ --- Copyright 2008 Steven Barth <steven@midlink.org> --- Licensed to the public under the Apache License 2.0. - -require("luci.tools.webadmin") - -local fs = require "nixio.fs" -local util = require "nixio.util" -local tp = require "luci.template.parser" - -local block = io.popen("block info", "r") -local ln, dev, devices = nil, nil, {} - -repeat - ln = block:read("*l") - dev = ln and ln:match("^/dev/(.-):") - - if dev then - local e, s, key, val = { } - - for key, val in ln:gmatch([[(%w+)="(.-)"]]) do - e[key:lower()] = val - devices[val] = e - end - - s = tonumber((fs.readfile("/sys/class/block/%s/size" % dev))) - - e.dev = "/dev/%s" % dev - e.size = s and math.floor(s / 2048) - - devices[e.dev] = e - end -until not ln - -block:close() - -m = Map("fstab", translate("Mount Points")) -s = m:section(TypedSection, "global", translate("Global Settings")) -s.addremove = false -s.anonymous = true - -detect = s:option(Button, "block_detect", translate("Generate Config"), translate("Find all currently attached filesystems and swap and replace configuration with defaults based on what was detected")) -detect.inputstyle = "reload" - -detect.write = function(self, section) - luci.sys.call("block detect >/etc/config/fstab") - luci.http.redirect(luci.dispatcher.build_url("admin/system", "fstab")) -end - -o = s:option(Flag, "anon_swap", translate("Anonymous Swap"), translate("Mount swap not specifically configured")) -o.default = o.disabled -o.rmempty = false - -o = s:option(Flag, "anon_mount", translate("Anonymous Mount"), translate("Mount filesystems not specifically configured")) -o.default = o.disabled -o.rmempty = false - -o = s:option(Flag, "auto_swap", translate("Automount Swap"), translate("Automatically mount swap on hotplug")) -o.default = o.enabled -o.rmempty = false - -o = s:option(Flag, "auto_mount", translate("Automount Filesystem"), translate("Automatically mount filesystems on hotplug")) -o.default = o.enabled -o.rmempty = false - -o = s:option(Flag, "check_fs", translate("Check filesystems before mount"), translate("Automatically check filesystem for errors before mounting")) -o.default = o.disabled -o.rmempty = false - -local mounts = luci.sys.mounts() -local non_system_mounts = {} -for rawmount, val in pairs(mounts) do - if (string.find(val.mountpoint, "/tmp/.jail") == nil) then - repeat - val.umount = false - if (val.mountpoint == "/") then - break - elseif (val.mountpoint == "/overlay") then - break - elseif (val.mountpoint == "/rom") then - break - elseif (val.mountpoint == "/tmp") then - break - elseif (val.mountpoint == "/tmp/shm") then - break - elseif (val.mountpoint == "/tmp/upgrade") then - break - elseif (val.mountpoint == "/dev") then - break - end - val.umount = true - until true - non_system_mounts[rawmount] = val - end -end - -v = m:section(Table, non_system_mounts, translate("Mounted file systems")) - -fs = v:option(DummyValue, "fs", translate("Filesystem")) - -mp = v:option(DummyValue, "mountpoint", translate("Mount Point")) - -avail = v:option(DummyValue, "avail", translate("Available")) -function avail.cfgvalue(self, section) - return luci.tools.webadmin.byte_format( - ( tonumber(mounts[section].available) or 0 ) * 1024 - ) .. " / " .. luci.tools.webadmin.byte_format( - ( tonumber(mounts[section].blocks) or 0 ) * 1024 - ) -end - -used = v:option(DummyValue, "used", translate("Used")) -function used.cfgvalue(self, section) - return ( mounts[section].percent or "0%" ) .. " (" .. - luci.tools.webadmin.byte_format( - ( tonumber(mounts[section].used) or 0 ) * 1024 - ) .. ")" -end - -unmount = v:option(Button, "unmount", translate("Unmount")) -function unmount.cfgvalue(self, section) - return non_system_mounts[section].umount -end - -unmount.render = function(self, section, scope) - self.title = translate("Unmount") - self.inputstyle = "remove" - Button.render(self, section, scope) -end - -unmount.write = function(self, section) - if non_system_mounts[section].umount then - luci.sys.call("/bin/umount '%s'" % luci.util.shellstartsqescape(non_system_mounts[section].mountpoint)) - return luci.http.redirect(luci.dispatcher.build_url("admin/system", "fstab")) - end -end - -mount = m:section(TypedSection, "mount", translate("Mount Points"), translate("Mount Points define at which point a memory device will be attached to the filesystem")) -mount.anonymous = true -mount.addremove = true -mount.template = "cbi/tblsection" -mount.extedit = luci.dispatcher.build_url("admin/system/fstab/mount/%s") - -mount.create = function(...) - local sid = TypedSection.create(...) - if sid then - luci.http.redirect(mount.extedit % sid) - return - end -end - - -mount:option(Flag, "enabled", translate("Enabled")).rmempty = false - -dev = mount:option(DummyValue, "device", translate("Device")) -dev.rawhtml = true -dev.cfgvalue = function(self, section) - local v, e - - v = m.uci:get("fstab", section, "uuid") - e = v and devices[v:lower()] - if v and e and e.size then - return "UUID: %s (%s, %d MB)" %{ tp.pcdata(v), e.dev, e.size } - elseif v and e then - return "UUID: %s (%s)" %{ tp.pcdata(v), e.dev } - elseif v then - return "UUID: %s (<em>%s</em>)" %{ tp.pcdata(v), translate("not present") } - end - - v = m.uci:get("fstab", section, "label") - e = v and devices[v] - if v and e and e.size then - return "Label: %s (%s, %d MB)" %{ tp.pcdata(v), e.dev, e.size } - elseif v and e then - return "Label: %s (%s)" %{ tp.pcdata(v), e.dev } - elseif v then - return "Label: %s (<em>%s</em>)" %{ tp.pcdata(v), translate("not present") } - end - - v = Value.cfgvalue(self, section) or "?" - e = v and devices[v] - if v and e and e.size then - return "%s (%d MB)" %{ tp.pcdata(v), e.size } - elseif v and e then - return tp.pcdata(v) - elseif v then - return "%s (<em>%s</em>)" %{ tp.pcdata(v), translate("not present") } - end -end - -mp = mount:option(DummyValue, "target", translate("Mount Point")) -mp.cfgvalue = function(self, section) - if m.uci:get("fstab", section, "is_rootfs") == "1" then - return "/overlay" - else - return Value.cfgvalue(self, section) or "?" - end -end - -fs = mount:option(DummyValue, "fstype", translate("Filesystem")) -fs.cfgvalue = function(self, section) - local v, e - - v = m.uci:get("fstab", section, "uuid") - v = v and v:lower() or m.uci:get("fstab", section, "label") - v = v or m.uci:get("fstab", section, "device") - - e = v and devices[v] - - return e and e.type or m.uci:get("fstab", section, "fstype") or "?" -end - -op = mount:option(DummyValue, "options", translate("Options")) -op.cfgvalue = function(self, section) - return Value.cfgvalue(self, section) or "defaults" -end - -rf = mount:option(DummyValue, "is_rootfs", translate("Root")) -rf.cfgvalue = function(self, section) - local target = m.uci:get("fstab", section, "target") - if target == "/" then - return translate("yes") - elseif target == "/overlay" then - return translate("overlay") - else - return translate("no") - end -end - -ck = mount:option(DummyValue, "enabled_fsck", translate("Check")) -ck.cfgvalue = function(self, section) - return Value.cfgvalue(self, section) == "1" - and translate("yes") or translate("no") -end - - -swap = m:section(TypedSection, "swap", translate("SWAP"), translate("If your physical memory is insufficient unused data can be temporarily swapped to a swap-device resulting in a higher amount of usable <abbr title=\"Random Access Memory\">RAM</abbr>. Be aware that swapping data is a very slow process as the swap-device cannot be accessed with the high datarates of the <abbr title=\"Random Access Memory\">RAM</abbr>.")) -swap.anonymous = true -swap.addremove = true -swap.template = "cbi/tblsection" -swap.extedit = luci.dispatcher.build_url("admin/system/fstab/swap/%s") - -swap.create = function(...) - local sid = TypedSection.create(...) - if sid then - luci.http.redirect(swap.extedit % sid) - return - end -end - - -swap:option(Flag, "enabled", translate("Enabled")).rmempty = false - -dev = swap:option(DummyValue, "device", translate("Device")) -dev.cfgvalue = function(self, section) - local v - - v = m.uci:get("fstab", section, "uuid") - if v then return "UUID: %s" % v end - - v = m.uci:get("fstab", section, "label") - if v then return "Label: %s" % v end - - v = Value.cfgvalue(self, section) or "?" - e = v and devices[v] - if v and e and e.size then - return "%s (%s MB)" % {v, e.size} - else - return v - end -end - -return m diff --git a/modules/luci-mod-system/luasrc/model/cbi/admin_system/fstab/mount.lua b/modules/luci-mod-system/luasrc/model/cbi/admin_system/fstab/mount.lua deleted file mode 100644 index f21a2775e1..0000000000 --- a/modules/luci-mod-system/luasrc/model/cbi/admin_system/fstab/mount.lua +++ /dev/null @@ -1,158 +0,0 @@ --- Copyright 2010 Jo-Philipp Wich <jow@openwrt.org> --- Licensed to the public under the Apache License 2.0. - -local fs = require "nixio.fs" -local util = require "nixio.util" - -local has_fscheck = fs.access("/usr/sbin/e2fsck") - -local block = io.popen("block info", "r") -local ln, dev, devices = nil, nil, {} - -repeat - ln = block:read("*l") - dev = ln and ln:match("^/dev/(.-):") - - if dev then - local e, s, key, val = { } - - for key, val in ln:gmatch([[(%w+)="(.-)"]]) do - e[key:lower()] = val - end - - s = tonumber((fs.readfile("/sys/class/block/%s/size" % dev))) - - e.dev = "/dev/%s" % dev - e.size = s and math.floor(s / 2048) - - devices[#devices+1] = e - end -until not ln - -block:close() - - -m = Map("fstab", translate("Mount Points - Mount Entry")) -m.redirect = luci.dispatcher.build_url("admin/system/fstab") - -if not arg[1] or m.uci:get("fstab", arg[1]) ~= "mount" then - luci.http.redirect(m.redirect) - return -end - - - -mount = m:section(NamedSection, arg[1], "mount", translate("Mount Entry")) -mount.anonymous = true -mount.addremove = false - -mount:tab("general", translate("General Settings")) -mount:tab("advanced", translate("Advanced Settings")) - - -mount:taboption("general", Flag, "enabled", translate("Enable this mount")).rmempty = false - - -o = mount:taboption("general", Value, "uuid", translate("UUID"), - translate("If specified, mount the device by its UUID instead of a fixed device node")) - -o:value("", translate("-- match by uuid --")) - -for i, d in ipairs(devices) do - if d.uuid and d.size then - o:value(d.uuid, "%s (%s, %d MB)" %{ d.uuid, d.dev, d.size }) - elseif d.uuid then - o:value(d.uuid, "%s (%s)" %{ d.uuid, d.dev }) - end -end - - -o = mount:taboption("general", Value, "label", translate("Label"), - translate("If specified, mount the device by the partition label instead of a fixed device node")) - -o:value("", translate("-- match by label --")) - -o:depends("uuid", "") - -for i, d in ipairs(devices) do - if d.label and d.size then - o:value(d.label, "%s (%s, %d MB)" %{ d.label, d.dev, d.size }) - elseif d.label then - o:value(d.label, "%s (%s)" %{ d.label, d.dev }) - end -end - - -o = mount:taboption("general", Value, "device", translate("Device"), - translate("The device file of the memory or partition (<abbr title=\"for example\">e.g.</abbr> <code>/dev/sda1</code>)")) - -o:value("", translate("-- match by device --")) - -o:depends({ uuid = "", label = "" }) - -for i, d in ipairs(devices) do - if d.size then - o:value(d.dev, "%s (%d MB)" %{ d.dev, d.size }) - else - o:value(d.dev) - end -end - - -o = mount:taboption("general", Value, "target", translate("Mount point"), - translate("Specifies the directory the device is attached to")) - -o:value("/", translate("Use as root filesystem (/)")) -o:value("/overlay", translate("Use as external overlay (/overlay)")) - - -o = mount:taboption("general", DummyValue, "__notice", translate("Root preparation")) -o:depends("target", "/") -o.rawhtml = true -o.default = [[ -<p>%s</p><pre>mkdir -p /tmp/introot -mkdir -p /tmp/extroot -mount --bind / /tmp/introot -mount /dev/sda1 /tmp/extroot -tar -C /tmp/introot -cvf - . | tar -C /tmp/extroot -xf - -umount /tmp/introot -umount /tmp/extroot</pre> -]] %{ - translate("Make sure to clone the root filesystem using something like the commands below:"), - -} - - -o = mount:taboption("advanced", Value, "fstype", translate("Filesystem"), - translate("The filesystem that was used to format the memory (<abbr title=\"for example\">e.g.</abbr> <samp><abbr title=\"Third Extended Filesystem\">ext3</abbr></samp>)")) - -o:value("", "auto") - -local fs -for fs in io.lines("/proc/filesystems") do - fs = fs:match("%S+") - if fs ~= "nodev" then - o:value(fs) - end -end - -local ok, lines = pcall(io.lines, "/etc/filesystem") -if ok then - local fs - for fs in lines do - o:value(fs) - end -end - -o = mount:taboption("advanced", Value, "options", translate("Mount options"), - translate("See \"mount\" manpage for details")) - -o.placeholder = "defaults" - - -if has_fscheck then - o = mount:taboption("advanced", Flag, "enabled_fsck", translate("Run filesystem check"), - translate("Run a filesystem check before mounting the device")) -end - -return m diff --git a/modules/luci-mod-system/luasrc/model/cbi/admin_system/fstab/swap.lua b/modules/luci-mod-system/luasrc/model/cbi/admin_system/fstab/swap.lua deleted file mode 100644 index 82468d5fcc..0000000000 --- a/modules/luci-mod-system/luasrc/model/cbi/admin_system/fstab/swap.lua +++ /dev/null @@ -1,54 +0,0 @@ --- Copyright 2010 Jo-Philipp Wich <jow@openwrt.org> --- Licensed to the public under the Apache License 2.0. - -local fs = require "nixio.fs" -local util = require "nixio.util" - -local devices = {} -util.consume((fs.glob("/dev/sd*")), devices) -util.consume((fs.glob("/dev/hd*")), devices) -util.consume((fs.glob("/dev/scd*")), devices) -util.consume((fs.glob("/dev/mmc*")), devices) - -local size = {} -for i, dev in ipairs(devices) do - local s = tonumber((fs.readfile("/sys/class/block/%s/size" % dev:sub(6)))) - size[dev] = s and math.floor(s / 2048) -end - - -m = Map("fstab", translate("Mount Points - Swap Entry")) -m.redirect = luci.dispatcher.build_url("admin/system/fstab") - -if not arg[1] or m.uci:get("fstab", arg[1]) ~= "swap" then - luci.http.redirect(m.redirect) - return -end - - -mount = m:section(NamedSection, arg[1], "swap", translate("Swap Entry")) -mount.anonymous = true -mount.addremove = false - -mount:tab("general", translate("General Settings")) -mount:tab("advanced", translate("Advanced Settings")) - - -mount:taboption("general", Flag, "enabled", translate("Enable this swap")).rmempty = false - - -o = mount:taboption("general", Value, "device", translate("Device"), - translate("The device file of the memory or partition (<abbr title=\"for example\">e.g.</abbr> <code>/dev/sda1</code>)")) - -for i, d in ipairs(devices) do - o:value(d, size[d] and "%s (%s MB)" % {d, size[d]}) -end - -o = mount:taboption("advanced", Value, "uuid", translate("UUID"), - translate("If specified, mount the device by its UUID instead of a fixed device node")) - -o = mount:taboption("advanced", Value, "label", translate("Label"), - translate("If specified, mount the device by the partition label instead of a fixed device node")) - - -return m |