git: 3f90112808 - main - Status/2026Q3/sysconf.adoc: Add report
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Fri, 16 Oct 2026 15:04:41 UTC
The branch main has been updated by dteske:
URL: https://cgit.FreeBSD.org/doc/commit/?id=3f901128085b88247614b804b39265433fdc241d
commit 3f901128085b88247614b804b39265433fdc241d
Author: Devin Teske <dteske@FreeBSD.org>
AuthorDate: 2026-10-16 15:01:19 +0000
Commit: Devin Teske <dteske@FreeBSD.org>
CommitDate: 2026-10-16 15:01:19 +0000
Status/2026Q3/sysconf.adoc: Add report
Approved by: salvadore
Reviewed by: salvadore
Differential Revision: https://reviews.freebsd.org/D60682
---
.../en/status/report-2026-07-2026-09/sysconf.adoc | 76 ++++++++++++++++++++++
1 file changed, 76 insertions(+)
diff --git a/website/content/en/status/report-2026-07-2026-09/sysconf.adoc b/website/content/en/status/report-2026-07-2026-09/sysconf.adoc
new file mode 100644
index 0000000000..b9facc2fa6
--- /dev/null
+++ b/website/content/en/status/report-2026-07-2026-09/sysconf.adoc
@@ -0,0 +1,76 @@
+=== sysconf(8) completes the configuration trinity
+
+Links: +
+link:https://reviews.freebsd.org/D58066[D58066] URL: link:https://reviews.freebsd.org/D58066[] +
+link:https://cgit.freebsd.org/src/commit/?id=3fe5961a0b708da599d42cbb6b5e4f030c28ea45[rG3fe5961a0b70] URL: link:https://cgit.freebsd.org/src/commit/?id=3fe5961a0b708da599d42cbb6b5e4f030c28ea45[]
+
+Contact: Devin Teske <dteske@FreeBSD.org>
+Contact: Faraz Vahedi <kfv@FreeBSD.org>
+
+man:sysctl[8] speaks to the running kernel.
+man:sysrc[8] speaks to man:rc.conf[5].
+This quarter the set became three, and the new tool is a pleasure to use.
+man:sysconf[8] reads and writes the rest of the base configuration: man:loader.conf[5], man:sysctl.conf[5], and the man:make.conf[5] family (make.conf, src.conf, and src-env.conf).
+The syntax is the one your fingers already know.
+Given simply a name, reads back the value of the given name.
+`name=value` writes, and the reply comes back in the familiar line: `name: old -> new`.
+
+The next boot setting fits on one line:
+
+ sysconf loader zfs_load
+ sysconf loader zfs_load="YES"
+
+ sysconf sysctl kern.maxfiles=65536
+
+ sysconf loader kernels+=kernel_test
+
+ sysconf make CFLAGS+=-DDEBUG
+ sysconf src -s WITHOUT_LLDB
+
+man:rc.conf[5] keeps the tool that already does it best.
+`sysconf rc sshd_enable=YES` hands every argument after `rc` straight to man:sysrc[8].
+One front door, and the right specialist behind it.
+
+Under the utility is man:bsdconf[3], the figpar engine brought forward as one reader and one writer, co-authored with Faraz Vahedi.
+Each file family is a small descriptor: the keyword, the files, and the quoting rules of the program that will actually read them.
+Loader values are written quoted, because that is what the boot loader accepts.
+Sysctl values are quoted only when the round trip needs it.
+The make family keeps its real operators (`+=`, `?=`, `:=`, `!=`) and the empty `WITH_` / `WITHOUT_` assignment, because for those knobs presence is the setting.
+You name the format with the target.
+`-f` names the path, so a loader-formatted file staged anywhere is still a loader file, and a `generic` target covers a file that matches no built-in.
+
+Where the boot reads several files, sysconf reads those same files, in that same order.
+The loader target starts where the loader starts, at `/boot/defaults/loader.conf`, and follows `loader_conf_files`, `loader_conf_dirs`, and `local_loader_conf_files`, including a layout that points those lists somewhere else.
+The value you read is the value that takes effect.
+The value you write is stored where it will still take effect on the next boot.
+A removal clears every file that lists the directive, so that an earlier setting does not simply get unmasked.
+The same command lists the files and dumps the effective set:
+
+ sysconf loader -l
+ sysconf loader -a
+
+`-d` reports the descriptions carried in the defaults file.
+`-A` widens a dump so directives still at their default are part of the picture.
+
+A write replaces the file whole.
+The new text goes to a temporary in the same directory, is fsynced, and is renamed over the original, with mode and ownership preserved.
+If the machine stops halfway, the previous file is the one still on disk.
+Read-only use, a `-c` check included, runs inside a man:capsicum[4] sandbox: the files are opened, every other capability is dropped, and only then is a line parsed.
+
+The sysctl target asks the running kernel before it stores anything.
+An unknown OID, a read-only OID, a loader-only tunable, or a value outside the type's range is reported and skipped, and a loader-only tunable is pointed at the loader target, where a boot setting belongs.
+Every other assignment in the same command still applies.
+On make and src, `WITH_foo=no` is written and you are told at once to use `WITHOUT_foo=1` instead.
+That is the advice in `share/mk/bsd.mkopt.mk`, delivered at the keyboard, and repeated on a later read with the file and line so an old `WITH_*=no` stays in view.
+
+`-j` and `-R` aim the same sentences at a jail or another root.
+
+The introduction is in HEAD as of 3fe5961a0b70 (link:https://reviews.freebsd.org/D58066[D58066]), and man:sysconf[8] makes its first release in FreeBSD 16.0.
+It has already grown since that commit.
+A unique prefix of a target is enough (`lo` is loader, `sy` is sysctl, `sr` is src), and a poudriere target carries the same verbs to `poudriere.conf` and the make overlays under `poudriere.d`.
+
+Thanks to Robert Clausecker and Faraz Vahedi for review, and to Alexander Ziaee for the release notes.
+
+Try it on HEAD against a file you usually open by hand.
+If a format you live in is missing, please write.
+The descriptor layer is how the next one joins, and it would be good to hear which file you want next.