Merge pull request #561 from cshore/pull-request-fstab-improvements
Pull request fstab improvements
This commit is contained in:
commit
ea9f25b63e
2 changed files with 93 additions and 2 deletions
|
@ -151,6 +151,28 @@ function striptags(value)
|
|||
return value and tparser.striptags(tostring(value))
|
||||
end
|
||||
|
||||
-- for bash, ash and similar shells single-quoted strings are taken
|
||||
-- literally except for single quotes (which terminate the string)
|
||||
-- (and the exception noted below for dash (-) at the start of a
|
||||
-- command line parameter).
|
||||
function shellsqescape(value)
|
||||
local res
|
||||
res, _ = string.gsub(res, "'", "'\\''")
|
||||
return res
|
||||
end
|
||||
|
||||
-- bash, ash and other similar shells interpret a dash (-) at the start
|
||||
-- of a command-line parameters as an option indicator regardless of
|
||||
-- whether it is inside a single-quoted string. It must be backlash
|
||||
-- escaped to resolve this. This requires in some funky special-case
|
||||
-- handling. It may actually be a property of the getopt function
|
||||
-- rather than the shell proper.
|
||||
function shellstartsqescape(value)
|
||||
res, _ = string.gsub(value, "^\-", "\\-")
|
||||
res, _ = string.gsub(res, "^-", "\-")
|
||||
return shellsqescape(value)
|
||||
end
|
||||
|
||||
-- containing the resulting substrings. The optional max parameter specifies
|
||||
-- the number of bytes to process, regardless of the actual length of the given
|
||||
-- string. The optional last parameter, regex, specifies whether the separator
|
||||
|
|
|
@ -33,12 +33,67 @@ 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 fileystems 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, mounts, translate("Mounted file systems"))
|
||||
v = m:section(Table, non_system_mounts, translate("Mounted file systems"))
|
||||
|
||||
fs = v:option(DummyValue, "fs", translate("Filesystem"))
|
||||
|
||||
|
@ -61,7 +116,21 @@ function used.cfgvalue(self, section)
|
|||
) .. ")"
|
||||
end
|
||||
|
||||
unmount = v:option(Button, "unmount", translate("Unmount"))
|
||||
unmount.render = function(self, section, scope)
|
||||
if non_system_mounts[section].umount then
|
||||
self.title = translate("Unmount")
|
||||
self.inputstyle = "remove"
|
||||
Button.render(self, section, scope)
|
||||
end
|
||||
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
|
||||
|
|
Loading…
Reference in a new issue