svn commit: r368575 - head/stand/lua

Toomas Soome tsoome at me.com
Sat Dec 12 07:35:20 UTC 2020


How about ’show-module-options’? 

rgds,
toomas

> On 12. Dec 2020, at 07:57, Kyle Evans <kevans at FreeBSD.org> wrote:
> 
> Author: kevans
> Date: Sat Dec 12 05:57:42 2020
> New Revision: 368575
> URL: https://svnweb.freebsd.org/changeset/base/368575
> 
> Log:
>  lualoader: provide module-manipulation commands
> 
>  Specifically, we have:
>  - enable-module
>  - disable-module
>  - toggle-module
> 
>  These can be used to add/remove modules to be loaded or force modules to be
>  loaded in spite of modules_blacklist. In the typical case, a user is
>  expected to use them to recover an issue happening due to a module directive
>  they've added to their loader.conf or because they discover that they've
>  under-specified what to load.
> 
>  MFC after:	1 week
> 
> Modified:
>  head/stand/lua/cli.lua
>  head/stand/lua/cli.lua.8
>  head/stand/lua/config.lua
>  head/stand/lua/config.lua.8
> 
> Modified: head/stand/lua/cli.lua
> ==============================================================================
> --- head/stand/lua/cli.lua	Sat Dec 12 02:26:43 2020	(r368574)
> +++ head/stand/lua/cli.lua	Sat Dec 12 05:57:42 2020	(r368575)
> @@ -65,6 +65,14 @@ local function parseBootArgs(argv, with_kernel)
> 	end
> end
> 
> +local function setModule(module, loading)
> +	if loading and config.enableModule(module) then
> +		print(module .. " will be loaded")
> +	elseif not loading and config.disableModule(module) then
> +		print(module .. " will not be loaded")
> +	end
> +end
> +
> -- Declares a global function cli_execute that attempts to dispatch the
> -- arguments passed as a lua function. This gives lua a chance to intercept
> -- builtin CLI commands like "boot"
> @@ -132,6 +140,37 @@ end
> 
> cli['reload-conf'] = function()
> 	config.reload()
> +end
> +
> +cli["enable-module"] = function(...)
> +	local _, argv = cli.arguments(...)
> +	if #argv == 0 then
> +		print("usage error: enable-module module")
> +		return
> +	end
> +
> +	setModule(argv[1], true)
> +end
> +
> +cli["disable-module"] = function(...)
> +	local _, argv = cli.arguments(...)
> +	if #argv == 0 then
> +		print("usage error: disable-module module")
> +		return
> +	end
> +
> +	setModule(argv[1], false)
> +end
> +
> +cli["toggle-module"] = function(...)
> +	local _, argv = cli.arguments(...)
> +	if #argv == 0 then
> +		print("usage error: toggle-module module")
> +		return
> +	end
> +
> +	local module = argv[1]
> +	setModule(module, not config.isModuleEnabled(module))
> end
> 
> -- Used for splitting cli varargs into cmd_name and the rest of argv
> 
> Modified: head/stand/lua/cli.lua.8
> ==============================================================================
> --- head/stand/lua/cli.lua.8	Sat Dec 12 02:26:43 2020	(r368574)
> +++ head/stand/lua/cli.lua.8	Sat Dec 12 05:57:42 2020	(r368575)
> @@ -26,7 +26,7 @@
> .\"
> .\" $FreeBSD$
> .\"
> -.Dd September 13, 2019
> +.Dd December 12, 2020
> .Dt CLI.LUA 8
> .Os
> .Sh NAME
> @@ -77,14 +77,26 @@ This function may be invoked by a user at the loader p
> .Ic foo .
> Arguments may be passed to it as usual, space-delimited.
> .Ss Default Commands
> -As of present, the
> +The
> .Nm
> -module by default provides commands for
> -.Ic autoboot ,
> -.Ic boot ,
> -.Ic boot-conf ,
> -and
> -.Ic reload-conf .
> +module provides the following default commands:
> +.Bl -bullet
> +.\"-width toggle-module -offset indent
> +.It
> +.Ic autoboot
> +.It
> +.Ic boot
> +.It
> +.Ic boot-conf
> +.It
> +.Ic reload-conf
> +.It
> +.Ic enable-module
> +.It
> +.Ic disable-module
> +.It
> +.Ic toggle-module
> +.El
> .Pp
> For
> .Ic autoboot ,
> @@ -103,6 +115,16 @@ The
> command will reload the configuration from disk.
> This is useful if you have manually changed currdev and would like to easily
> reload the configuration from the new device.
> +.Pp
> +The
> +.Ic enable-module ,
> +.Ic disable-module ,
> +and
> +.Ic toggle-module
> +commands manipulate the list of modules to be loaded along with the kernel.
> +Modules blacklisted are considered disabled by
> +.Ic toggle-module .
> +These commands will override any such restriction as needed.
> .Ss Exported Functions
> The following functions are exported from
> .Nm :
> 
> Modified: head/stand/lua/config.lua
> ==============================================================================
> --- head/stand/lua/config.lua	Sat Dec 12 02:26:43 2020	(r368574)
> +++ head/stand/lua/config.lua	Sat Dec 12 05:57:42 2020	(r368575)
> @@ -312,7 +312,7 @@ local function loadModule(mod, silent)
> 	for k, v in pairs(mod) do
> 		if v.load ~= nil and v.load:lower() == "yes" then
> 			local module_name = v.name or k
> -			if blacklist[module_name] ~= nil then
> +			if not v.force and blacklist[module_name] ~= nil then
> 				if not silent then
> 					print(MSG_MODBLACKLIST:format(module_name))
> 				end
> @@ -680,6 +680,45 @@ function config.loadelf()
> 	status = loadModule(modules, not config.verbose)
> 	hook.runAll("modules.loaded")
> 	return status
> +end
> +
> +function config.enableModule(modname)
> +	if modules[modname] == nil then
> +		modules[modname] = {}
> +	elseif modules[modname].load == "YES" then
> +		modules[modname].force = true
> +		return true
> +	end
> +
> +	modules[modname].load = "YES"
> +	modules[modname].force = true
> +	return true
> +end
> +
> +function config.disableModule(modname)
> +	if modules[modname] == nil then
> +		return false
> +	elseif modules[modname].load ~= "YES" then
> +		return true
> +	end
> +
> +	modules[modname].load = "NO"
> +	modules[modname].force = nil
> +	return true
> +end
> +
> +function config.isModuleEnabled(modname)
> +	local mod = modules[modname]
> +	if not mod or mod.load ~= "YES" then
> +		return false
> +	end
> +
> +	if mod.force then
> +		return true
> +	end
> +
> +	local blacklist = getBlacklist()
> +	return blacklist[modname]
> end
> 
> hook.registerType("config.loaded")
> 
> Modified: head/stand/lua/config.lua.8
> ==============================================================================
> --- head/stand/lua/config.lua.8	Sat Dec 12 02:26:43 2020	(r368574)
> +++ head/stand/lua/config.lua.8	Sat Dec 12 05:57:42 2020	(r368575)
> @@ -26,7 +26,7 @@
> .\"
> .\" $FreeBSD$
> .\"
> -.Dd April 30, 2020
> +.Dd December 12, 2020
> .Dt CONFIG.LUA 8
> .Os
> .Sh NAME
> @@ -184,6 +184,25 @@ This will be called by the Lua intercepted
> and
> .Ic boot
> commands.
> +.It Fn config.enableModule modname
> +Marks a module named
> +.Fa modname
> +to be loaded during
> +.Fn config.loadelf .
> +If the module was previously blacklisted, then it will be forcefully allowed to
> +load.
> +.It Fn config.disableModule modname
> +Marks a module named
> +.Fa modname
> +to not be loaded during
> +.Fn config.loadelf .
> +.It Fn config.isModuleEnabled modname
> +Checks if the module named
> +.Fa modname
> +will be loaded during
> +.Fn config.loadelf .
> +It checks both that the module is marked for loading and that it is either
> +forced or not blacklisted.
> .El
> .Ss Defined Hooks
> The following hooks are defined in



More information about the svn-src-head mailing list