Re: Adjustments to userland for a quieter startup (RC system)

From: Steven Harms (High-Security Mail) <sgharms_at_stevengharms.com>
Date: Sun, 02 Feb 2025 10:19:11 UTC
> Okay, I am sorry, I mixed the general idea with detailed PR that aims
> just updating routing and devmatch parts with user selectable option
> not changing a defaults, thus my previous remarks are invalid and
> updated, I apologize! :-)

A goal of this PR was to flush out dialogue around whether there was a universal noise level-adjusting knob in the RC system. [jlduran]'s more ambitious PR, my PR, and the discussion to this post suggest "no." I think it's probably right to generalize the discussion!

I also realize that this is a probably a controversial perspective. My motivation here is ultimately service to the FreeBSD Laptop project. Windows and OSX have conditioned many in the population of the FreeBSD-curious to expect a lot less text on startup if things are going well. 

To those who say "Yes, seeing the diagnostic data is why FreeBSD is so great," I say: In a server/device context, I'd not change anything (something my PR may have flubbed in its implementation). ***But***, I contend that for FreeBSD to thrive on a wider population of laptops and access a wider population of users, some options (including such a noise knob for the RC system) ought be available. The extent that [helloSystem] went to hide messages suggests an unmet need. 

[helloSystem]: https://hellosystem.github.io/docs/developer/boot.html#boot-mute
[jlduran]: https://github.com/jlduran/freebsd-src/pull/90/files

> * There is already `rc_info` that may be used?
> https://github.com/freebsd/freebsd-src/blob/50c962d773705f60d32c29f8e4bb2743ab55733b/libexec/rc/rc.conf#L29

I could see that and/or rc_debug replacing RC scripts' use of `echo`, though. But (per "it's controversial"), we'd need future RC authors to adopt a notion of "log level output" versus "printf/echo to the screen." My PR was modest in its aims and didn't want to edit all the `echo`s. [jlduran] *did* dare more bravely :) Although it seems (from the comments) that rc_debug has some complex interactions with rc.subr that might make this option (my favorite thus far) more complex than expected.

[rc.subr]: https://github.com/freebsd/freebsd-src/blob/50c962d773705f60d32c29f8e4bb2743ab55733b/libexec/rc/rc.conf#L26
 
> * There is already `rc_startmsg` that may be used?
> https://github.com/freebsd/freebsd-src/blob/50c962d773705f60d32c29f8e4bb2743ab55733b/libexec/rc/rc.conf#L30

This was insufficient. It only squelched the "Starting ${name}" line :-/. e.g. all the data e.g. about setting up a default route / interface output were still logged.
 
> * If really necessary `_msgs` can be replaced with `_verbose` suffix?
> https://github.com/freebsd/freebsd-src/blob/50c962d773705f60d32c29f8e4bb2743ab55733b/libexec/rc/rc.conf#L568

Seems promising, but this would mean more conditional logic per each flag? I think that's probably insufficiently general. `info` with its control in `rc_info` per your earlier suggestion would seem the way to go.

> * I guess the idea is to silence the terminal? How many flags need to
> be put to silent instead just one? Why not just put a boot logo image
> if you really do not want to see the boot messages? It may provide
> expected user experience and will not impact diagnostic information
> that are usually useful :-)

Sadly boot_mute="YES" was insufficient as well. It only seems to  mute /kernel/-level diagnostics. Afterward, my screen was still full of RC-originating content. And yes, suppose we /could/ do an overlay until the login prompt -- I think that should be supported. It's what I _expected_ boot_mute=YES to do by default, frankly.

Perhaps the take-away should be:

* Existing interfaces are insufficient to let people easily tune their level of RC output
* Resolve: Is this something that should be available?
  * If so: resolve via log level, per-function verbosity suffixes, provide a longer overlay bitmap duration option, or some other means

Thank you for your consideration,

Steven


Steven