Page MenuHomeFreeBSD

Attempt to provide a boot profile manager
AbandonedPublic

Authored by salvadore on Apr 2 2019, 6:45 PM.
Tags
None
Referenced Files
Unknown Object (File)
Mar 2 2024, 12:40 AM
Unknown Object (File)
Dec 20 2023, 3:28 AM
Unknown Object (File)
Nov 28 2023, 8:40 AM
Unknown Object (File)
Oct 31 2023, 4:56 PM
Unknown Object (File)
Oct 27 2023, 7:40 AM
Unknown Object (File)
Sep 29 2023, 4:57 PM
Unknown Object (File)
Sep 26 2023, 8:24 AM
Unknown Object (File)
Jun 11 2023, 4:06 AM
Subscribers

Details

Reviewers
None
Group Reviewers
Contributor Reviews (src)
Summary

At the moment, as far as I know, it is not possible in FreeBSD to have different profiles to select services at startup. For example, I can not decide at boot time to start netif on my laptop if and only if I have access to a connection: my choices are to always start it at boot or to always start it by hand after boot.
My rc script aims to give users choice at boot time.

The service is called "boot_profile_manager" and is of course activated by setting boot_profile_manager="YES" into rc.conf (but do not use rc.conf.d: see later).
The script should be the first service started on the system: I tried to define this condition by setting "BEFORE: systcl". At boot time it will print a numbered list of profiles given by the variable $boot_profile_manager_profiles that must be defined in rc.conf -- e.g, if boot_profile_manager="default no_network testing", the menu will be:

  1. default
  2. no_network
  3. testing

To each profile must correpond a directory into /usr/local/etc/boot_profile_manager. Thus in the example we will have the directories /usr/local/etc/boot_profile_manager/default, /usr/local/etc/boot_profile_manager/no_network and /usr/local/etc/boot_profile_manager/testing.

When user selects a profile, /etc/rc.conf.d becomes a symlink to the directory of the selected profile. Thus if user selects profile 2 of our example, then /etc/rc.conf.d will be a symlink to /usr/local/etc/boot_profile_manager/no_network.
(To be able to make the symlink, / is temporarly mounted rw and then restored read-only.)

A timeout is set by default to 5 seconds in case user does not select any profile and can be set to any value through "boot_profile_manager_timeout" variable: after the timeout, profile 1 is selected by default.

That way users can put in /etc/rc.conf any configuration common to all profiles (e.g. hostname) and use directories into /usr/local/etc/boot_profile_manager as choices for /etc/rc.conf.d.

I think it would be nice to include this service into base system, but feel free to ask me to make a port of it if it would be preferable.
Of course, I will be glad to make any modification required to meet standards, improve quality etc. and I will write a manpage once the final version will be ready.

Test Plan

I have tested successfully my script in a virtual machine running 13.0-CURRENT r345444 through bhyve and in my own system running 12.0-STABLE r345758.

Diff Detail

Repository
rS FreeBSD src repository - subversion
Lint
Lint Skipped
Unit
Tests Skipped

Event Timeline

I added my e-mail address to the copyright line.

I converted the revision into a new port: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=239015

If the port will have success, then I might propose again to put the script into base system in the future.