diff --git a/UPDATING b/UPDATING index 14fae1eb065..33bae2a42b9 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 e0062bbc814..a5d27b96b6b 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 0d82a3dac9b..e38ad865c28 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 210bb933878..86f5ef6174a 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 f9896f2aa42..b2b1122285e 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 .