Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 17 Dec 2020 18:24:37 +0000 (UTC)
From:      Kyle Evans <kevans@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r368728 - head/stand/lua
Message-ID:  <202012171824.0BHIOboB023497@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: kevans
Date: Thu Dec 17 18:24:36 2020
New Revision: 368728
URL: https://svnweb.freebsd.org/changeset/base/368728

Log:
  lualoader: cli: provide a show-module-options loader command
  
  This effectively dumps everything lualoader knows about to the console using
  the libsa pager; that particular lua interface was added in r368591.
  
  A pager stub implementation has been added that just dumps the output as-is
  as a compat shim for older loader binaries that do not have lpager. This
  stub should be moved into a more appropriate .lua file if we add anything
  else that needs the pager.

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	Thu Dec 17 18:15:07 2020	(r368727)
+++ head/stand/lua/cli.lua	Thu Dec 17 18:24:36 2020	(r368728)
@@ -32,6 +32,18 @@ local core = require("core")
 
 local cli = {}
 
+if not pager then
+	-- shim for the pager module that just doesn't do it.
+	-- XXX Remove after 12.2 goes EoL.
+	pager = {
+		open = function() end,
+		close = function() end,
+		output = function(str)
+			printc(str)
+		end,
+	}
+end
+
 -- Internal function
 -- Parses arguments to boot and returns two values: kernel_name, argstr
 -- Defaults to nil and "" respectively.
@@ -171,6 +183,61 @@ cli["toggle-module"] = function(...)
 
 	local module = argv[1]
 	setModule(module, not config.isModuleEnabled(module))
+end
+
+cli["show-module-options"] = function()
+	local module_info = config.getModuleInfo()
+	local modules = module_info['modules']
+	local blacklist = module_info['blacklist']
+	local lines = {}
+
+	for module, info in pairs(modules) do
+		if #lines > 0 then
+			lines[#lines + 1] = ""
+		end
+
+		lines[#lines + 1] = "Name:        " .. module
+		if info.name then
+			lines[#lines + 1] = "Path:        " .. info.name
+		end
+
+		if info.type then
+			lines[#lines + 1] = "Type:        " .. info.type
+		end
+
+		if info.flags then
+			lines[#lines + 1] = "Flags:       " .. info.flags
+		end
+
+		if info.before then
+			lines[#lines + 1] = "Before load: " .. info.before
+		end
+
+		if info.after then
+			lines[#lines + 1] = "After load:  " .. info.after
+		end
+
+		if info.error then
+			lines[#lines + 1] = "Error:       " .. info.error
+		end
+
+		local status
+		if blacklist[module] and not info.force then
+			status = "Blacklisted"
+		elseif info.load == "YES" then
+			status = "Load"
+		else
+			status = "Don't load"
+		end
+
+		lines[#lines + 1] = "Status:      " .. status
+	end
+
+	pager.open()
+	for i, v in ipairs(lines) do
+		pager.output(v .. "\n")
+	end
+	pager.close()
 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	Thu Dec 17 18:15:07 2020	(r368727)
+++ head/stand/lua/cli.lua.8	Thu Dec 17 18:24:36 2020	(r368728)
@@ -26,7 +26,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd December 12, 2020
+.Dd December 17, 2020
 .Dt CLI.LUA 8
 .Os
 .Sh NAME
@@ -96,6 +96,8 @@ module provides the following default commands:
 .Ic disable-module
 .It
 .Ic toggle-module
+.It
+.Ic show-module-options
 .El
 .Pp
 For
@@ -125,6 +127,10 @@ commands manipulate the list of modules to be loaded a
 Modules blacklisted are considered disabled by
 .Ic toggle-module .
 These commands will override any such restriction as needed.
+The
+.Ic show-module-options
+command will dump the list of modules that loader has been made aware of and
+any applicable options using paged output.
 .Ss Exported Functions
 The following functions are exported from
 .Nm :

Modified: head/stand/lua/config.lua
==============================================================================
--- head/stand/lua/config.lua	Thu Dec 17 18:15:07 2020	(r368727)
+++ head/stand/lua/config.lua	Thu Dec 17 18:24:36 2020	(r368728)
@@ -721,6 +721,13 @@ function config.isModuleEnabled(modname)
 	return not blacklist[modname]
 end
 
+function config.getModuleInfo()
+	return {
+		modules = modules,
+		blacklist = getBlacklist()
+	}
+end
+
 hook.registerType("config.loaded")
 hook.registerType("config.reloaded")
 hook.registerType("kernel.loaded")

Modified: head/stand/lua/config.lua.8
==============================================================================
--- head/stand/lua/config.lua.8	Thu Dec 17 18:15:07 2020	(r368727)
+++ head/stand/lua/config.lua.8	Thu Dec 17 18:24:36 2020	(r368728)
@@ -26,7 +26,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd December 12, 2020
+.Dd December 17, 2020
 .Dt CONFIG.LUA 8
 .Os
 .Sh NAME
@@ -203,6 +203,15 @@ 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.
+.It Fn config.getModuleInfo
+Returns a table with
+.Dq modules
+and
+.Dq blacklist
+tables describing the modules that the config module has been made aware of via
+.Xr loader.conf 5
+as well as a representation of
+.Ar module_blacklist .
 .El
 .Ss Defined Hooks
 The following hooks are defined in



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202012171824.0BHIOboB023497>