The rc.conf(5) man page states the following:
"In addition to /etc/rc.conf.local you can also place smaller configuration files for each rc(8) script in the /etc/rc.conf.d directory or <dir>/rc.conf.d directories specified in local_startup, which will be included by the load_rc_config function."
I have successfully split the contents of my /etc/rc.conf file into multiple files under /etc/rc.conf.d/ and these are all sourced and correctly acted upon at system startup.
However, if I relocate the port/package specific files to /usr/local/etc/rc.d/rc.conf.d/, but they are not acted upon at startup.
The default value of local_startup is "/usr/local/etc/rc.d", as defined in /etc/defaults/rc.conf.
This departs from the expected behaviour as described in rc.conf(5).
STEPS TO REPRODUCE:
- Relocate a working rc config file from /etc/rc.conf.d/ to /usr/local/etc/rc.d/rc.conf.d/
- Reboot the system.
- Verify whether the service in question starts on boot.
- Service is not started at system startup.
- Service should be started at system startup.
I tested this on my system with the openntpd and dnsmasq packages. Both started fine when their rc config files were under /etc/rc.conf.d/. Neither started when those files were moved to /usr/local/etc/rc.d/rc.conf.d/.
Examination of the 'load_rc_config' function in /etc/subr reveals that any "rc.d" suffix would be removed from any paths specified in the local_startup parameter.
This means that the default local_startup value of /usr/local/etc/rc.d/ would instead result in rc config files being sourced from /usr/local/etc/rc.conf.d/, not /usr/local/etc/rc.d/rc.conf.d/.
The wording of the rc.conf(5) man page is misleading regarding this. It states that scripts can be placed in "<dir>/rc.conf.d", where <dir> is the path specified in local_startup. It follows that /usr/local/etc/rc.d/rc.conf.d would be where rc config scripts should be put.
I tested this by moving the rc config files from /usr/local/etc/rc.d/rc.conf.d/ to /usr/local/etc/rc.conf.d/ and rebooted. Services then started as expected.
This bug might be reclassified as a documentation bug if this was the intended behaviour.
Yeah, it's a documentation bug - the rc.conf.d directory sits alongside rather than within any rc.d directory - as demonstrated by an example a few lines after the text you quoted.
However, this example is also buggy, in that a "/etc" is missing!
Attached is a proposed fix for both issues
Created attachment 158941 [details]