aboutsummaryrefslogtreecommitdiff
path: root/stand/lua/config.lua
Commit message (Collapse)AuthorAgeFilesLines
* stand: lua: module names should permit moreKyle Evans2023-09-111-1/+4
| | | | | | | | | | | | | | | The module entries should generally allow whatever is allowed as an env_var in the pattern table. Notably, we're missing periods which would allow proper entries for .dtb files in loader.conf that don't need to specify a module_name entry for it. %d in this expression is actually redundant as %w is actually "all alphanumerics," but I've included it for now to match the env_var entry. We should really remove it from both. Reported by: "aribi" on the forums via allanjude@ (cherry picked from commit 5bc1e0c2285e73fe8455bb6c72b2b40e33f5477e)
* Remove $FreeBSD$: two-line lua tagWarner Losh2023-08-231-2/+0
| | | | | | | Remove /^--\n--\s*\$FreeBSD\$.*$\n/ Similar commit in main: (cherry picked from commit 9636a14538f5)
* spdx: The BSD-2-Clause-FreeBSD identifier is obsolete, drop -FreeBSDWarner Losh2023-07-251-1/+1
| | | | | | | | | | | The SPDX folks have obsoleted the BSD-2-Clause-FreeBSD identifier. Catch up to that fact and revert to their recommended match of BSD-2-Clause. Discussed with: pfg MFC After: 3 days Sponsored by: Netflix (cherry picked from commit 4d846d260e2b9a3d4d0a701462568268cbfe7a5b)
* lualoader: position hyphens at the beginning of character classesKyle Evans2021-02-031-4/+4
| | | | | | | | | | According to the Lua 5.4 manual section 6.4.1 ("Patterns"), the interaction between ranges and classes is not defined and hyphens must be specified at either the beginning or the end of a set if they are not escaped. Move all such occurrences to the beginning. (cherry picked from commit b24872cf7b13314669ed2136c0262bb2eb007695)
* lualoader: improve loader.conf var processingKyle Evans2021-01-291-22/+68
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | lualoader was previously not processing \ as escapes; this commit fixes that and does better error checking on the value as well. Additionally, loader.conf had some odd restrictions on values that make little sense. Previously, lines like: kernel=foo Would simply be discarded with a malformed line complaint you might not see unless you disable beastie. lualoader tries to process these as well as it can and manipulates the environment, while forthloader did minimal processing and constructed a `set` command to do the heavy lifting instead. The lua approach was re-envisioned from building a `set` command so that we can appropriately reset the environment when, for example, boot environments change. Lift the previous restrictions to allow unquoted values on the right hand side of an expression. Note that an unquoted value is effectively: [A-Za-z0-9-][A-Za-z0-9-_.]* This commit also stops trying to weirdly limit what it can handle in a quoted value. Previously it only allowed spaces, alphanumeric, and punctuation, which is kind of weird. Change it here to grab as much as it can between two sets of quotes, then let processEnvVar() do the needful and complain if it finds something malformed looking. My extremely sophisticated test suite is as follows: <<EOF X_01_simple_string="simple" X_02_escaped_string="s\imple" X_03_unquoted_val=3 X_04_unquoted_strval=simple_test X_05_subval="${X_03_unquoted_val}" X_06_escaped_subval="\${X_03_unquoted_val}" X_07_embedded="truth${X_03_unquoted_val}" X_08_escaped_embedded="truth\${X_03_unquoted_val}" X_09_unknown="${unknown_val}" X_10_unknown_embedded="truth${unknown_val}" X_11_crunchy="crunch$unknown_val crunch" X_12_crunchy="crunch${unknown_val}crunch" Y_01_badquote="te"lol" Y_02_eolesc="lol\" Y_02_noteolesc="lol\\" Y_03_eolvar="lol$" Y_03_noteolvar="lol\$" Y_04_badvar="lol${" exec="echo Done!" EOF Future work may provide a stub loader module in userland so that we can formally test the loader scripts rather than sketchy setups like the above in conjunction with the lua-* tools in ^/tools/boot. (cherry picked from commit 576562856efbec31520aca6a1f72f2b11298e9a7)
* lualoader: add loader_conf_dirs support (loader.conf.d)Kyle Evans2020-12-311-0/+24
| | | | | | | | | | | | | | | | | | loader_conf_dirs is the supporting mechanism for the included /boot/loader.conf.d directory. When lualoader finishes processing all of the loader_conf_files it finds after walking /boot/defaults/loader.conf, it will now check any and all loader_conf_dirs and process files ending in ".conf" as if they were a loader.conf. Note that loader_conf_files may be specified in a loader.conf.d config file, but loader_conf_dirs may *not*. It will only be processed as specified in /boot/defaults/loader.conf and any loader_conf_files that were loaded from there. Reviewed by: allanjude, freqlabs, rpokala, tsoome Includes suggestion from: imp Relnotes: yes Differential Revision: https://reviews.freebsd.org/D25608
* lualoader: cli: provide a show-module-options loader commandKyle Evans2020-12-171-0/+7
| | | | | | | | | | | | | 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. Notes: svn path=/head/; revision=368728
* lualoader: config: fix module enabled checkKyle Evans2020-12-121-1/+1
| | | | | | | | A last minute rewrite left this logically wrong; if it's present in modules_blacklist, then we do not load it. Notes: svn path=/head/; revision=368579
* lualoader: provide module-manipulation commandsKyle Evans2020-12-121-1/+40
| | | | | | | | | | | | | | | | | | 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 Notes: svn path=/head/; revision=368575
* loader: zfs should support bootonce an nextbootToomas Soome2020-09-211-1/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | bootonce feature is temporary, one time boot, activated by "bectl activate -t BE", "bectl activate -T BE" will reset the bootonce flag. By default, the bootonce setting is reset on attempt to boot and the next boot will use previously active BE. By setting zfs_bootonce_activate="YES" in rc.conf, the bootonce BE will be set permanently active. bootonce dataset name is recorded in boot pool labels, bootenv area. in case of nextboot, the nextboot_enable boolean variable is recorded in freebsd:nvstore nvlist, also stored in boot pool label bootenv area. On boot, the loader will process /boot/nextboot.conf if nextboot_enable is "YES", and will set nextboot_enable to "NO", preventing /boot/nextboot.conf processing on next boot. bootonce and nextboot features are usable in both UEFI and BIOS boot. To use bootonce/nextboot features, the boot loader needs to be updated on disk; if loader.efi is stored on ESP, then ESP needs to be updated and for BIOS boot, stage2 (zfsboot or gptzfsboot) needs to be updated (gpart or other tools). At this time, only lua loader is updated. Sponsored by: Netflix, Klara Inc. Differential Revision: https://reviews.freebsd.org/D25512 Notes: svn path=/head/; revision=365938
* lualoader: config: improve readConfFiles, rename to readConfKyle Evans2020-04-301-34/+29
| | | | | | | | | | | | | | | | | | | | | | The previous interface was pretty bad, and required the caller to get some implementation details correct that it really shouldn't need to (e.g. loader_conf_files handling) and pass in an empty table for it to use. The new and much improved interface, readConf, is much less of a hack; hiding these implementation details and just doing the right thing. config.lua will now use it to process /boot/defaults/loader.conf and the subsequent loader_conf_files from there, and read-conf will also use it. This improvement submitted by Olivier (cited below), loader_conf_files handling from the original patch was changed to just clobber it before processing and not bother restoring it after the fact following r360505 where it's now guaranteed to evade the loader environment. PR: 244640 Submitted by: Olivier Certner (olivier freebsd free fr> Notes: svn path=/head/; revision=360506
* lualoader: config: add a table for restricted environment varsKyle Evans2020-04-301-5/+33
| | | | | | | | | | | | | | | | | This new table should be used for transient values that don't need to end up in the loader environment. Generally, these will be things that are internal details that really aren't needed or interesting outside of the config module (e.g. if we changed how ${module}_* directives work, they might use this instead). To start, populate it with loader_conf_files. Any specific value of loader_conf_files isn't all that interesting; if we're going to export it, we should really instead export a loader_conf_files that indicates all of the configuration files we processed. This will be used to reduce bookkeeping overhead in a future commit that cleans up readConfFiles. Notes: svn path=/head/; revision=360505
* lualoader: config: start exporting readConfFilesKyle Evans2020-04-281-33/+35
| | | | | | | | | | | | In the process, change it slightly: readConfFiles will take a string like loader_conf_files in addition to the loaded_files table that it normally takes. This is to facilitate the addition of a read-conf CLI command, which will just pass in the single file to read and an empty table. MFC after: 3 days Notes: svn path=/head/; revision=360421
* lualoader config: don't call loader.getenv() as muchKyle Evans2020-04-281-2/+6
| | | | | | | | | | | | | | | | We don't actually need to fetch loader_conf_files as much as we do; we've already fetched it once at the beginning, we only really need to fetch it again after each file we've processed. If it changes, then we can stash that off into our local prefiles. While here, drop a note about the recursion so that I stop trying to change it. It may very well make redundant some of the work we're doing, but that's OK. MFC after: 3 days Notes: svn path=/head/; revision=360420
* Fixup line lost from previous commit (r359072)Ryan Moeller2020-03-181-0/+1
| | | | | | | | | | | Reviewed by: kevans Approved by: mav (mentor) MFC after: 1 week Sponsored by: iXsystems, Inc. Differential Revision: https://reviews.freebsd.org/D24115 Notes: svn path=/head/; revision=359073
* loader: Add a "kernel.loaded" hookRyan Moeller2020-03-181-4/+3
| | | | | | | | | | | | | | | This hook can be useful, for example to run a local function to choose different modules to load when a user has picked a different kernel from the menu. Reviewed by: kevans Approved by: mav (mentor) MFC after: 1 week Sponsored by: iXsystems, Inc. Differential Revision: https://reviews.freebsd.org/D24115 Notes: svn path=/head/; revision=359072
* lua: add modules.loaded hookKyle Evans2020-01-251-2/+5
| | | | | | | | | | | | | | | | | | | | | | This may be used for the local module to hook in and load any additional modules that it wants, since it can't modify the modules table internal to config. We may consider adding API to do so at a later time, but I suspect it will be more complicated to use with little return. status is captured but ignored for the purpose of loading the hook. status will be false if *any* module failed to load, but we typically don't let that halt the boot so there's no reason to let it halt hooks. Some vendors or setups may have expected fails that would be actively thwarted by checking it. We may, at a later date, consider adding an API for letting non-config modules check which modules have successfully (or not) loaded in case an unexpected failure *should* halt whatever they are doing. MFC after: 3 days Notes: svn path=/head/; revision=357104
* Further normalize copyright noticesKyle Evans2019-09-261-1/+1
| | | | | | | | | | | - s/C/c/ where I've been inconsistent about it - +SPDX tags - Remove "All rights reserved" where possible Requested by: rgrimes (all rights reserved) Notes: svn path=/head/; revision=352757
* lualoader: Fix up some luacheck concernsKyle Evans2019-03-261-1/+0
| | | | | | | | | | - Garbage collect an unused (removed because it was useless) constant - Don't bother with vararg notation if args will not be used MFC after: 1 week Notes: svn path=/head/; revision=345518
* lualoader: Always return a proper dictionary for blacklistKyle Evans2018-10-271-2/+2
| | | | | | | | | | | | | | | If module_blacklist isn't specified, we have an empty blacklist; effectively the same as if module_blacklist="" were specified in loader.conf(5). This was reported when switching to a BE that predated the module_blacklist introduction, but the problem is valid all the same and likely to be tripped over in other scenarios. Reported by: bwidawsk MFC after: 3 days Notes: svn path=/head/; revision=339805
* lualoader: Improve module loading diagnosticsKyle Evans2018-10-251-11/+17
| | | | | | | | | | | | | | | | | Some fixes: - Maintain historical behavior more accurately w.r.t verbose_loading; verbose_loading strictly prints "${module_name...}" and later "failed!" or "ok" based on load success - With or without verbose_loading, dump command_errbuf on load failure. This usually happens prior to ok/failed if we're verbose_loading Reviewed by: imp MFC after: 3 days Differential Revision: https://reviews.freebsd.org/D17694 Notes: svn path=/head/; revision=339702
* lualoader: Create a module blacklist, add DRM modules to itKyle Evans2018-10-071-5/+24
| | | | | | | | | | | | | | | | | | This is a step in the process of easing migration into the new world order of DRM drivers. Strongly encourage users towards loading DRM modules via rc.conf(5) instead of loader.conf(5) by failing the load from loader(8). Users so inclined may wipe out the blacklist via module_blacklist="" in loader.conf(5), and it is expected that these modules will eventually be removed from the blacklist. They may still be loaded as dependencies of other modules or explicitly via the loader prompt, but this should not be a major problem. Approved by: re (rgrimes) Relnotes: yes Differential Revision: https://reviews.freebsd.org/D16914 Notes: svn path=/head/; revision=339218
* lualoader: Fix override of module_path on loader promptKyle Evans2018-08-251-3/+17
| | | | | | | | | | | | Earlier changes setup a config.module_path variable that was populated upon reading of loader.conf(5) and used for restoring module_path to pristine condition if multiple kernels are attempted. This broke the ability to override module_path at the loader prompt in case of emergency. Approved by: re (rgrimes) Notes: svn path=/head/; revision=338309
* lualoader: Accept that people use unquoted values in loader.confKyle Evans2018-08-231-11/+36
| | | | | | | | | | | | | | | | | | | | | While loader.conf(5) suggests that all values should be quoted, reality is that this was never strictly enforced and it is used. We already make some concession to this in number values, which aren't strictly quoted either. The compromise here is that multi-word values must be quoted. This lets things like `foo_load=YES` work, while denying more complex expressions on the right hand side. This likely catches the vast majority of current usage. A bit of a kludge is needed to accomplish this since Lua regex doesn't support branching. I had considered splitting up expressions and generating the right-hand side of the expressions completely in config.parse, but deemed this too large of an overhaul to take given the current timing. This should be re-worked shortly after the thaw. Reported by: royger Notes: svn path=/head/; revision=338259
* lualoader: Fix (add) Xen supportKyle Evans2018-08-231-0/+10
| | | | | | | | | | | | | lualoader was not respecting the 'xen_kernel' environment variable, which hints to the interpreter that it should load a Xen kernel prior to loading any other kernel that might be specified. If a Xen kernel is specified and we fail to load it, we should not proceed to boot. Reported by: royger Tested by: royger Notes: svn path=/head/; revision=338255
* lualoader: Fix loader.conf(5) EOL validation for 'exec' linesKyle Evans2018-08-221-11/+21
| | | | | | | | | | | | | | This includes some light rework to simplify the line parsing, as well. If we hit a line match, we'll always either use the line and move on to the next line, or we'll spew out malformed line errors. We had multiple spots to output the error and set the status based on whether we had a non-nil first capture group or failed EOL validation, but it was always the same error. Light rework entails a small label jump to skip error handling and elimination of 'found' local. Notes: svn path=/head/; revision=338173
* lualoader: Refactor config line expressionsKyle Evans2018-08-211-12/+20
| | | | | | | | | | | | | | | | | | A couple of issues addressed: 1.) Modules with - in the name were not recognized as modules 2.) The module regex was repeated for each place a module name may appear 3.) The 'strip leading space' bits were repeated for each expression 4.) The trailing 'comment validation' stuff was repeated every expression #4 still has some more work to be done. exec lines, for instance, don't capture a 'value' -- there's only one capture pattern. This throws off the 'c' value that we match, so the trailing bits aren't *actually* being validated. This isn't a new issue, though, so a future comit will address this. Notes: svn path=/head/; revision=338168
* lualoader: Fix parsing of negative number loader.conf(5) variablesKyle Evans2018-08-131-1/+1
| | | | | | | | They would previously cause errors, as the regex for these did not tolerate a leading negative sign, and the variable would simply not parse. Notes: svn path=/head/; revision=337711
* lualoader: "nextboot_file" should be spelled "nextboot_conf"Kyle Evans2018-07-271-1/+1
| | | | | | | | | See: /boot/defaults/loader.conf Reported by: gtetlow (inadvertently) Notes: svn path=/head/; revision=336759
* lualoader: Correct kernel_options handlingKyle Evans2018-06-191-2/+2
| | | | | | | | `kernel_options` were being passed as flags to load, rather than to the kernel being loaded. This is the kernel_options counterpart to r335009. Notes: svn path=/head/; revision=335371
* lualoader: Match Forth module-loading behavior w.r.t flagsKyle Evans2018-06-121-3/+3
| | | | | | | | Also as documented in loader.conf(5), ${module}_flags are actually flags to be passed to the module, not to `load` as was done thus far. Notes: svn path=/head/; revision=335009
* lualoader: Support variable substitution in env var settingsKyle Evans2018-06-101-2/+21
| | | | | | | | | | | | | | | | | | | | We support both of the following cases of substitution: bar="y" foo="${bar}" foo="$bar" The latter substitution syntax is, of course, not recommended- all punctuation must be considered potential variable names, and we do not go through the effort of searching the different combinations of, for instance, "$x.y.z" to determine if the variable is $x, $x.y, or $x.y.z. This is not officially documented as supported, but it has worked in forthloader for what is most likely a long time as `evaluate` is used to process the right hand side of the assignment. Notes: svn path=/head/; revision=334912
* lualoader: Process loader_conf_files properlyKyle Evans2018-06-101-11/+29
| | | | | | | | | | | loader.conf(5) documents loader_conf_files to mean "additional configuration files to be processed right after the present file." However, lualoader ignored loader_conf_files after processing /boot/defaults/loader.conf. Rewrite these bits to process loader_conf_files after each loaded file. Notes: svn path=/head/; revision=334907
* lualoader: Add a loaded hook for others to execute upon config loadKyle Evans2018-06-061-2/+6
| | | | | | | | | | This will not be executed on reload, though later work could allow for that. It's intended/expected that later work won't generally need to happen on every config load, just once (for, e.g., menu initialization) or just when config is reloaded but not upon the initial load. Notes: svn path=/head/; revision=334723
* lualoader: Simplify some expressionsKyle Evans2018-04-011-23/+5
| | | | | | | | | | | | | | - No need for a 'goto' when our entire loop body is then wrapped in a conditional. - No need to leave commented out prints laying around - If an expression is clearly going to be either nil or an expression that isn't likely to be a boolean, we might as well use `or` to specify a default value for the expression. e.g. `loader.getenv(...) or "no"` Notes: svn path=/head/; revision=331857
* lualoader: revert whitespace change that snuck inKyle Evans2018-03-311-1/+0
| | | | Notes: svn path=/head/; revision=331856
* lualoader: Don't assume that {module}_load is setKyle Evans2018-03-311-0/+5
| | | | | | | | | | | | | | | The previous iteration of this assumed that {module}_load was set. In the old world order of default loader.conf(5), this was probably a safe assumption given that we had almost every module explicitly not-loaded in it. In the new world order, this is no longer the case, so one could delete a _load line inadvertently while leaving a _name, _type, _flags, _before, _after, or _error. This would have caused a confusing Lua error and borked module loading. Notes: svn path=/head/; revision=331855
* lualoader: Do case-insensitive comparison of "yes"Kyle Evans2018-03-311-1/+1
| | | | Notes: svn path=/head/; revision=331854
* lualoader: Privatize some more config.lua bitsKyle Evans2018-03-241-84/+85
| | | | | | | | These functions are also not quite suitable for a public API, so privatize them to config. Notes: svn path=/head/; revision=331477
* lualoader: Make config env-related bits private APIKyle Evans2018-03-241-45/+45
| | | | | | | | | | This pertains exclusively to the set/restore functionality that we offer, where any changes made by loader.conf previously will be effectively removed upon reload of the configuration. We don't currently have a need to export these, so don't bother. Notes: svn path=/head/; revision=331476
* lualoader: Add primitive hook module, use it to untangle bogus referenceKyle Evans2018-03-211-1/+4
| | | | | | | | | | | | | | | | See: comments in the hook module about intended usage, as well as the introduced use for config.reloaded. Use the newly introduced hook module to define a "config.reloaded" hook. This is currently used to register core's clearKernelCache as a reload hook to avoid a circular dependency and fix this functionality- it didn't actually work out, and it isn't immediately obvious how it slipped into src. Other hook types will be introduced into the core lualoader as useful hook points are identified. Notes: svn path=/head/; revision=331281
* lualoader: Sprinkle some verbose_loading saltKyle Evans2018-03-131-1/+7
| | | | | | | | Our module loading messages should be hidden without verbose_loading -- go ahead and do that as a first step. Notes: svn path=/head/; revision=330825
* lualoader: Cache kernel listKyle Evans2018-03-091-0/+1
| | | | | | | | | | | | With autodetection turned on, hitting the filesystem everytime we need to calculate choices for the kernel carousel is kind of slow. Cache once on the first listing and reload it anytime the config is reloaded in case any of the loader.conf(5) changes that affect this (kernel, kernels, kernels_autodetect) have changed. This also picks up the case where we've changed currdev and the autodetected kernels could change. Notes: svn path=/head/; revision=330703
* lualoader: Use cli_execute_unparsed for commands passed in via loader.confKyle Evans2018-03-071-5/+5
| | | | | | | | | | | | | | | | | | | This applies to: - exec - [module]_before - [module]_error - [module]_after Before this commit, these used loader.perform to execute them as a pure, unsalted loader command. This means that they were not able to take advantage of any Lua-salted loader commands, like boot and autoboot, or pure Lua loader commands (functions attached to the 'cli' module). They now have access to the full arsenal, just shy of being able to execute arbitrary Lua. Notes: svn path=/head/; revision=330620
* lualoader: Fix some lint-mentioned errorsKyle Evans2018-03-021-2/+2
| | | | | | | | | - nextbootfile is not a variable, but nextboot_file is - pstatus was explicitly initialized but later clobbered, so don't initialize it. Notes: svn path=/head/; revision=330261
* lualoader: config: Pull some messages out into constantsKyle Evans2018-03-011-43/+41
| | | | | | | | | | Rather than hardcoding these things. This could lead to some form of loader localization later, but the main goal at the moment is to get a clear view of the strings we're outputting and strive to use more string.format() and less wild concatenation all over the place. Notes: svn path=/head/; revision=330139
* lualoader: Remove debug functionKyle Evans2018-02-281-9/+0
| | | | | | | | | | | | Our module bits ended up more stable than I anticipated, so this turns out to be no longer useful. If things like this need to come back, we should do it in a separate 'debug' module to serve as a collection of debugging aides. As a rule, this 'debug' module would *not* be allowed as a requirement of any other modules in-tree. Notes: svn path=/head/; revision=330100
* lualoader: Correct test sense, comments, and add some more commentsKyle Evans2018-02-271-3/+4
| | | | Notes: svn path=/head/; revision=330088
* lualoader: More argument name expansion, part 2Kyle Evans2018-02-261-13/+16
| | | | | | | | screen also has some instances, but it also has other cleanup to go with it. Because of this, I will be committing the screen changes separately. Notes: svn path=/head/; revision=330009
* lualoader: Don't explicitly index tables without reasonKyle Evans2018-02-251-25/+24
| | | | | | | | | | These indices were assigned the same values as they would've been implicitly assigned anyways. While here, throw terminating commas after the last value of tables. Notes: svn path=/head/; revision=329944