Skip to content

Comments

Revise approach to NUT config directory options#3133

Merged
jimklimov merged 3 commits intonetworkupstools:masterfrom
jimklimov:issue-3131
Oct 16, 2025
Merged

Revise approach to NUT config directory options#3133
jimklimov merged 3 commits intonetworkupstools:masterfrom
jimklimov:issue-3131

Conversation

@jimklimov
Copy link
Member

Closes: #3131

Should simplify life for packagers, improve autotools standards compliance, and be invisible to existing users and their build recipes.

  • --with-confdir-suffix depends on custom-or-not prefix and sysconfdir, defaults to empty or nut (resolved)
  • --with-confdir defaults to ${sysconfdir}/${confdir_suffix}
  • --sysconfdir should no longer be tweaked
  • --with-confdir-examples allows *.conf.sample files to land elsewhere, if distro policy wants that

…e version [networkupstools#3131]

Signed-off-by: Jim Klimov <jimklimov+nut@gmail.com>
…--with-confdir*= options, separate delivery of sample configs [networkupstools#3131]

Signed-off-by: Jim Klimov <jimklimov+nut@gmail.com>
@jimklimov jimklimov added this to the 2.8.5 milestone Oct 16, 2025
@jimklimov jimklimov added enhancement packaging portability We want NUT to build and run everywhere possible labels Oct 16, 2025
@AppVeyorBot
Copy link

@jimklimov
Copy link
Member Author

jimklimov commented Oct 16, 2025

Tests:

  • Completely out-of-the-box with no options, works like before:
:; ./configure
...
checking confdir-suffix to use after sysconfdir (${prefix}/etc)... prefix was not customized... ''
...
* Default installation prefix path:     /usr/local/ups
...
* Config file path:     /usr/local/ups/etc
* Config file examples path:    /usr/local/ups/etc
...

:; make DESTDIR=/dev/shm/nut-oob -j 8 install

:; find /dev/shm/nut-oob/ | grep etc
/dev/shm/nut-oob/usr/share/augeas/lenses/dist/nutupssetconf.aug
/dev/shm/nut-oob/usr/local/ups/etc
/dev/shm/nut-oob/usr/local/ups/etc/ups.conf.sample
/dev/shm/nut-oob/usr/local/ups/etc/nut.conf.sample
/dev/shm/nut-oob/usr/local/ups/etc/upsd.users.sample
/dev/shm/nut-oob/usr/local/ups/etc/upsmon.conf.sample
/dev/shm/nut-oob/usr/local/ups/etc/upssched.conf.sample
/dev/shm/nut-oob/usr/local/ups/etc/upsd.conf.sample

:; /dev/shm/nut-oob/usr/local/ups/bin/al175 -DDDDDD -a ttt
   0.000000     [D5] send_to_all: SETINFO driver.state "init.starting"
Network UPS Tools 2.8.4.317.2-319+ga25741011 (development iteration after 2.8.4) - Eltek AL175/COMLI driver 0.18
Warning: This is an experimental driver.
Some features may not function correctly.

   0.000124     [D5] do_upsconf_args: confupsname=dummy, var=driver, val=dummy-ups
   0.000164     [D5] do_upsconf_args: confupsname=dummy, var=port, val=auto
   0.000202     Error: Section ttt not found in ups.conf
   0.000242     [D5] send_to_all: SETINFO driver.state "cleanup.exit"
   0.000276     [D1] upsnotify: notify about state NOTIFY_STATE_STOPPING with libsystemd: was requested, but not running as a service unit now, will not spam more about it
   0.000323     [D1] upsnotify: failed to notify about state NOTIFY_STATE_STOPPING: no notification tech defined, will not spam more about it

### This actually looked into existing /usr/local/ups/etc files (ignored DESTDIR as it should)
  • old recipe tweaking sysconfdir (works like before, adds a notice in the end):
:; ./configure ... --sysconfdir=/etc/nut ...
...
checking how to "tail" starting from Nth line... /usr/bin/tail  +NUM_FIRST_LINE
checking confdir-suffix to use after sysconfdir (/etc/nut)... sysconfdir was customized... ''
checking for realpath... realpath
configure: This system seems to prefer '/run' over '/var/run': adjusting default PIDPATH
...
* Config file path:     /etc/nut
* Config file examples path:    /etc/nut
...
* CONFIG_FLAGS  : --with-user=nut --with-group=nut --with-all --with-docs=man --sysconfdir=/etc/nut --enable-silent-rules --enable-Werror
configure: ==========================================================
configure: This build configuration modifies the --sysconfdir setting.
configure: While this was the way for decades, it was the wrong way.
configure: Consider updating your build recipes to use --with-confdir*
configure: options nowadays.
configure: ==========================================================
  • Using full confdir spec (and evaluatable verbatim pattern for the examples) INSTEAD of sysconfdir:
:; ./configure --with-confdir=/etc/ups --with-confdir-examples='${docdir}/sample-conf'
...
configure: A non-trivial --with-confdir path was specified (/etc/ups); any --with-confdir-suffix (auto) or --sysconfdir (${prefix}/etc) values are disregarded
...
* Default installation prefix path:     /usr/local/ups
...
* Config file path:     /etc/ups
* Config file examples path:    /usr/local/ups/share/doc/nut/sample-conf
...

:; make DESTDIR=/dev/shm/nnnccc -j 8 install

# Check CONFPATH_EXAMPLES:
:; find /dev/shm/nnnccc | grep samp
/dev/shm/nnnccc/usr/local/ups/share/doc/nut/sample-conf
/dev/shm/nnnccc/usr/local/ups/share/doc/nut/sample-conf/upsmon.conf.sample
/dev/shm/nnnccc/usr/local/ups/share/doc/nut/sample-conf/upssched.conf.sample
/dev/shm/nnnccc/usr/local/ups/share/doc/nut/sample-conf/ups.conf.sample
/dev/shm/nnnccc/usr/local/ups/share/doc/nut/sample-conf/nut.conf.sample
/dev/shm/nnnccc/usr/local/ups/share/doc/nut/sample-conf/upsd.users.sample
/dev/shm/nnnccc/usr/local/ups/share/doc/nut/sample-conf/upsd.conf.sample

# Check built-in CONFPATH:
:; /dev/shm/nnnccc/usr/local/ups/bin/al175 -DDD -a ttt
Network UPS Tools 2.8.4.317.2-319+ga25741011 (development iteration after 2.8.4) - Eltek AL175/COMLI driver 0.18
Warning: This is an experimental driver.
Some features may not function correctly.

   0.000000     Can't open /etc/ups/ups.conf: Can't open /etc/ups/ups.conf: No such file or directory
   0.000083     [D1] upsnotify: notify about state NOTIFY_STATE_STOPPING with libsystemd: was requested, but not running as a service unit now, will not spam more about it
   0.000121     [D1] upsnotify: failed to notify about state NOTIFY_STATE_STOPPING: no notification tech defined, will not spam more about it
  • Using just a suffix:
:; ./configure --with-confdir-suffix=ups --with-confdir-examples='${docdir}/sample-conf'
...
checking confdir-suffix to use after sysconfdir (${prefix}/etc)... normalized caller-provided suffix... '/ups'
...
* Default installation prefix path:     /usr/local/ups
...
* Config file path:     /usr/local/ups/etc/ups
* Config file examples path:    /usr/local/ups/share/doc/nut/sample-conf
...

# Check built-in CONFPATH:
:; /dev/shm/nnnccc/usr/local/ups/bin/al175 -a test
Network UPS Tools 2.8.4.317.2-319+ga25741011 (development iteration after 2.8.4) - Eltek AL175/COMLI driver 0.18
Warning: This is an experimental driver.
Some features may not function correctly.

Can't open /usr/local/ups/etc/ups/ups.conf: Can't open /usr/local/ups/etc/ups/ups.conf: No such file or directory
  • A prefix explicitly passed on command line (even if same as configure.ac default), sysconfdir untouched: now there is reason to append confdir_suffix (default), and we end up with /usr/local/ups/etc/nut (as expected for this case):
:; ./configure --prefix=/usr/local/ups
...
checking confdir-suffix to use after sysconfdir (${prefix}/etc)... prefix was customized... '/${PACKAGE_NAME}'
...
* Default installation prefix path:     /usr/local/ups
...
* Config file path:     /usr/local/ups/etc/nut
* Config file examples path:    /usr/local/ups/etc/nut
...

:; make DESTDIR=/dev/shm/nut-default -j 8 install

:; find /dev/shm/nut-default/ | grep etc
/dev/shm/nut-default/usr/share/augeas/lenses/dist/nutupssetconf.aug
/dev/shm/nut-default/usr/local/ups/etc
/dev/shm/nut-default/usr/local/ups/etc/nut
/dev/shm/nut-default/usr/local/ups/etc/nut/ups.conf.sample
/dev/shm/nut-default/usr/local/ups/etc/nut/nut.conf.sample
/dev/shm/nut-default/usr/local/ups/etc/nut/upsmon.conf.sample
/dev/shm/nut-default/usr/local/ups/etc/nut/upsd.users.sample
/dev/shm/nut-default/usr/local/ups/etc/nut/upssched.conf.sample
/dev/shm/nut-default/usr/local/ups/etc/nut/upsd.conf.sample

:; /dev/shm/nut-default/usr/local/ups/bin/al175 -a ttt
Network UPS Tools 2.8.4.317.2-319+ga25741011 (development iteration after 2.8.4) - Eltek AL175/COMLI driver 0.18
Warning: This is an experimental driver.
Some features may not function correctly.

Can't open /usr/local/ups/etc/nut/ups.conf: Can't open /usr/local/ups/etc/nut/ups.conf: No such file or directory
  • Customized sysconfdir as an evaluatable pattern: currently not different from explicit path there (for legacy recipe compatibility), the resulting path is used directly for NUT configs:
:; ./configure --sysconfdir='${prefix}/custom-etc-configs'
...
* Default installation prefix path:     /usr/local/ups
...
* Config file path:     /usr/local/ups/custom-etc-configs
* Config file examples path:    /usr/local/ups/custom-etc-configs

…$(VAR) [networkupstools#3131]

Signed-off-by: Jim Klimov <jimklimov+nut@gmail.com>
@jimklimov jimklimov merged commit 15c5f17 into networkupstools:master Oct 16, 2025
20 of 21 checks passed
@jimklimov jimklimov deleted the issue-3131 branch October 16, 2025 12:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement packaging portability We want NUT to build and run everywhere possible

Projects

None yet

Development

Successfully merging this pull request may close these issues.

NUT configure script encourages use of non-standard --sysconfdir like /etc/nut

2 participants