aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStéphane Rochoy <stephane.rochoy@stormshield.eu>2023-12-21 14:05:58 +0000
committerWarner Losh <imp@FreeBSD.org>2024-02-02 18:58:28 +0000
commitd3d0b735571d9562812ce5b343a6e91f7a795dbe (patch)
treef344c7a5c26f27f352902c1d651a1b299f6cf000
parent754cac4b283eb024a3a6a194130199c860e32ebf (diff)
downloadsrc-d3d0b735571d9562812ce5b343a6e91f7a795dbe.tar.gz
src-d3d0b735571d9562812ce5b343a6e91f7a795dbe.zip
stand/lua: always allow overriding with local config files
Loader now also read configuration files listed in local_loader_conf_files. Files listed here are the last ones read. And /boot/loader.conf.local was moved from loader_conf_files to local_loader_conf_files leaving only loader.conf and device.hints in loader_conf_files by default. The idea is to ensure local_loader_conf_files, i.e., /boot/loader.conf.local, can always be used to override other user defined settings. So the sequencing is now as follow: 1. Bootstrap: /boot/defaults/loader.conf 2. Read loader_conf_files files: /boot/device.hints /boot/loader.conf 3. Read loader_conf_dirs files: /boot/loader.conf.d/*.conf 4. And finally, rread local_loader_conf_files files: /boot/loader.conf.local
-rw-r--r--UPDATING21
-rw-r--r--stand/defaults/loader.conf3
-rw-r--r--stand/defaults/loader.conf.532
-rw-r--r--stand/lua/config.lua15
-rw-r--r--stand/lua/config.lua.88
5 files changed, 69 insertions, 10 deletions
diff --git a/UPDATING b/UPDATING
index 14fae1eb0656..33bae2a42b9d 100644
--- a/UPDATING
+++ b/UPDATING
@@ -27,6 +27,27 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 15.x IS SLOW:
world, or to merely disable the most expensive debugging functionality
at runtime, run "ln -s 'abort:false,junk:false' /etc/malloc.conf".)
+20240202:
+ Loader now also read configuration files listed in local_loader_conf_files.
+ Files listed here are the last ones read. And /boot/loader.conf.local was
+ moved from loader_conf_files to local_loader_conf_files leaving only
+ loader.conf and device.hints in loader_conf_files by default.
+
+ The following sequencing is applied:
+
+ 1. Bootstrap:
+ /boot/defaults/loader.conf
+
+ 2. Read loader_conf_files files:
+ /boot/device.hints
+ /boot/loader.conf
+
+ 3. Read loader_conf_dirs files:
+ /boot/loader.conf.d/*.conf
+
+ 4. And finally, rread local_loader_conf_files files:
+ /boot/loader.conf.local
+
20240201:
sendmail 8.18.1 has been imported and merged. This version enforces
stricter RFC compliance by default, especially with respect to line
diff --git a/stand/defaults/loader.conf b/stand/defaults/loader.conf
index e0062bbc8149..a5d27b96b6ba 100644
--- a/stand/defaults/loader.conf
+++ b/stand/defaults/loader.conf
@@ -13,8 +13,9 @@ exec="echo Loading /boot/defaults/loader.conf"
kernel="kernel" # /boot sub-directory containing kernel and modules
bootfile="kernel" # Kernel name (possibly absolute path)
kernel_options="" # Flags to be passed to the kernel
-loader_conf_files="/boot/device.hints /boot/loader.conf /boot/loader.conf.local"
+loader_conf_files="/boot/device.hints /boot/loader.conf"
loader_conf_dirs="/boot/loader.conf.d"
+local_loader_conf_files="/boot/loader.conf.local"
nextboot_conf="/boot/nextboot.conf"
verbose_loading="NO" # Set to YES for verbose loader output
diff --git a/stand/defaults/loader.conf.5 b/stand/defaults/loader.conf.5
index 0d82a3dac9b3..e38ad865c288 100644
--- a/stand/defaults/loader.conf.5
+++ b/stand/defaults/loader.conf.5
@@ -131,6 +131,10 @@ Space separated list of directories to process for configuration files.
The lua-based loader will process files with a
.Dq .conf
suffix that are placed in these directories.
+Files found here are processed after the ones listed in
+.Va loader_conf_files
+but before the ones found in
+.Va local_loader_conf_files .
.It Ar loader_conf_files
Defines additional configuration files to be processed right after the
present file.
@@ -138,6 +142,13 @@ present file.
should be treated as write-only.
One cannot depend on any value remaining in the loader environment or carried
over into the kernel environment.
+.It Ar local_loader_conf_files
+Space separated list of additional configuration files to be processed at last,
+i.e., after
+.Va loader_conf_files
+and
+.Va loader_conf_dirs
+are processed.
.It Ar product_vars
When set, must be a space separated list of environment variable names to walk
through to guess product information.
@@ -274,6 +285,14 @@ default settings can be ignored.
The few of them which are important
or useful are:
.Bl -tag -width bootfile -offset indent
+.It Va local_loader_conf_files
+.Pq Dq /boot/loader.conf.local
+Ensure
+.Va loader.conf.local
+can always be used to override settings from files found in
+.Va loader_conf_files
+and
+.Va loader_conf_dirs .
.It Va bitmap_load
.Pq Dq NO
If set to
@@ -455,13 +474,18 @@ It is not available in the default Forth-based loader.
.Sh FILES
.Bl -tag -width /boot/defaults/loader.conf -compact
.It Pa /boot/defaults/loader.conf
-default settings \(em do not change this file.
+Default settings \(em do not change this file.
.It Pa /boot/loader.conf
-user defined settings.
+User defined settings.
.It Pa /boot/loader.conf.lua
-user defined settings written in lua.
+User defined settings written in lua.
+.It Pa /boot/loader.conf.d/*.conf
+User defined settings split in separate files.
+.It Pa /boot/loader.conf.d/*.lua
+User defined settings written in lua and split in separate files.
.It Pa /boot/loader.conf.local
-machine-specific settings for sites with a common loader.conf.
+Machine-specific settings for sites with a common loader.conf. Allow to override
+settings defined in other files.
.El
.Sh SEE ALSO
.Xr kenv 1 ,
diff --git a/stand/lua/config.lua b/stand/lua/config.lua
index 210bb9338783..86f5ef6174a2 100644
--- a/stand/lua/config.lua
+++ b/stand/lua/config.lua
@@ -630,8 +630,7 @@ function config.readConf(file, loaded_files)
return
end
- -- We'll process loader_conf_dirs at the top-level readConf
- local load_conf_dirs = next(loaded_files) == nil
+ local top_level = next(loaded_files) == nil -- Are we the top-level readConf?
print("Loading " .. file)
-- The final value of loader_conf_files is not important, so just
@@ -656,7 +655,7 @@ function config.readConf(file, loaded_files)
end
end
- if load_conf_dirs then
+ if top_level then
local loader_conf_dirs = getEnv("loader_conf_dirs")
-- If product_vars is set, it must be a list of environment variable names
@@ -682,6 +681,7 @@ function config.readConf(file, loaded_files)
end
end
+ -- Process "loader_conf_dirs" extra-directories
if loader_conf_dirs ~= nil then
for name in loader_conf_dirs:gmatch("[%w%p]+") do
if lfs.attributes(name, "mode") ~= "directory" then
@@ -700,6 +700,15 @@ function config.readConf(file, loaded_files)
::nextdir::
end
end
+
+ -- Always allow overriding with local config files, e.g.,
+ -- /boot/loader.conf.local.
+ local local_loader_conf_files = getEnv("local_loader_conf_files")
+ if local_loader_conf_files then
+ for name in local_loader_conf_files:gmatch("[%w%p]+") do
+ config.readConf(name, loaded_files)
+ end
+ end
end
end
diff --git a/stand/lua/config.lua.8 b/stand/lua/config.lua.8
index f9896f2aa420..b2b1122285eb 100644
--- a/stand/lua/config.lua.8
+++ b/stand/lua/config.lua.8
@@ -64,9 +64,13 @@ as a configuration file
.Po e.g., as
.Pa loader.conf
.Pc
-and then processing files listed in
+and then process files listed in the
.Ev loader_conf_files
-variable
+variable. Additionnaly, the top-level call to readConf will process files listed in the
+.Ev loader_conf_dirs
+and
+.Ev local_loader_conf_files
+variables
.Po see
.Xr loader.conf 5
.Pc .