2. Very detailed Change Log

This document intends to detail the change log for relatively recent work (roughly since the source code was tracked in Git).

Note

This change log section represents git commits in range v2.8.4..HEAD (commits 434cb36a3..2900da977).

2.1. 2025-10-30 NOV <149171388+NohanV@users.noreply.github.com>

  • drivers/cyberpower-mib.c: Add SNMP info for ups.realpower

2.2. 2025-10-30 Jim Klimov <jimklimov+nut@gmail.com>

  • drivers/cyberpower-mib.c: bump CYBERPOWER_MIB_VERSION for added ups.realpower [#3154]

2.3. 2025-10-29 Atanas Vladimirov <vladimirov.atanas@gmail.com>

  • docs/man/nutdrv_qx.txt: Fix the formatting of VOLTRONIC-AXPERT UNITS

2.4. 2025-10-26 Jim Klimov <jimklimov+nut@gmail.com>

2.5. 2025-10-25 Jim Klimov <jimklimov+nut@gmail.com>

  • scripts/obs/Makefile.am: fix EXTRA_DIST list

2.6. 2025-10-24 Jim Klimov <jimklimov+nut@gmail.com>

  • NEWS.adoc, docs/nut.dict: NEWS.adoc: announce upstreamed OBS packaging recipes [#1209, #1316, #3144]
  • tests/NIT/nit.sh: detect PYTHON from caller-provided PYTHON_DEFAULT as fallback interpreter [#3130]
  • configure.ac: on MacOS, also pass PYTHON_DEFAULT via /usr/bin/env [#3130]
  • tests/NIT/nit.sh: detect PYTHON from PY_SHEBANG (or use a caller-provided one) as explicit interpreter [#3130] CircleCI does see the correct shebang and the script as executable, but apparently tries to call it as a shell script and fails. Maybe /Users/distiller/.pyenv/shims/python3.13 is broken though?.. Or we hit https://github.com/NixOS/nixpkgs/issues/65351/ ?
  • .circleci/config.yml: set DEBUG_NIT=true to troubleshoot python test client runs [#3130]
  • tests/NIT/nit.sh: shouldDebug(): extend with a variable that can be set specifically for this script
  • .circleci/config.yml: opt out of blobless checkouts
  • .circleci/config.yml: update from XCode-13.4.1 to XCode-16.4 Older releases are deprecated and to be removed in November: * https://circleci.com/changelog/deprecation-of-eol-xcode-versions/ * https://circleci.com/changelog/images/#filtered
  • tests/NIT/nit.sh: revise isTestablePython() possible outcomes [#3130]
  • .github/workflows/PyNUTClient.yml: update to use PYTHON_DEFAULT varname now expected by scripts/python/module/Makefile.am [#3130]
  • NEWS.adoc, UPGRADING.adoc: warn about renamed data/html{,cgi} source dir [#3049]
  • lib/.gitignore, lib/libupsclient-config.in: lib//libupsclient-config.in, lib/.gitignore: README⇒README.adoc renamed a while ago
  • NEWS.adoc, UPGRADING.adoc: warn about renamed data/html{,cgi} source dir [#3049]
  • scripts/obs/debian.nut-cgi.docs: align with renaming of data/html ⇒ data/htmlcgi

2.7. 2025-10-23 Jim Klimov <jimklimov+nut@gmail.com>

  • NEWS.adoc, drivers/apc-hid.c, drivers/apc_modbus.c, drivers/arduino-hid.c, drivers/bcmxcp_usb.c, drivers/blazer_usb.c, drivers/cps-hid.c, drivers/delta_ups-hid.c, drivers/legrand-hid.c, drivers/liebert-hid.c, drivers/mge-hid.c, drivers/nutdrv_atcl_usb.c, drivers/richcomm_usb.c: drivers/*.c, NEWS.adoc: revised use of NUT macros for USB Vendor IDs [#3139]
  • drivers/usb-common.h: update comment about USB_DEVICE() macro
  • drivers/nutdrv_qx.c: use symbolic names for USB Vendor IDs [#3139]
  • data/driver.list.in: add Ippon Innova TAE 1000 [#3137, #3139]
  • NEWS.adoc, UPGRADING.adoc, drivers/nutdrv_qx.c: drivers/nutdrv_qx.c: add USB ID based detection for innovatae protocol [#3137, #3139]
  • NEWS.adoc, UPGRADING.adoc, docs/nut.dict: list new nutdrv_qx_innovatae protocol support [#issue 3137, PR #3139]

2.8. 2025-10-22 Jim Klimov <jimklimov+nut@gmail.com>

  • docs/nut.dict: update for NEWS of PR #3141
  • m4/nut_check_libregex.m4, NEWS.adoc: Added configure script options for libregex tuning [#3140, #3049]
  • NEWS.adoc, docs/nut.dict: update about logging the source of CFLAGS/LIBS/LDFLAGS values [#3049, #3140]
  • m4/nut_check_libsystemd.m4: track and report depCFLAGS_SOURCE/depLIBS_SOURCE consistently [#3049]
  • m4/nut_check_libpowerman.m4: track and report depCFLAGS_SOURCE/depLIBS_SOURCE consistently [#3049]
  • m4/nut_check_libopenssl.m4: track and report depCFLAGS_SOURCE/depLIBS_SOURCE consistently [#3049]
  • m4/nut_check_libnss.m4: track and report depCFLAGS_SOURCE/depLIBS_SOURCE consistently [#3049]
  • m4/nut_check_libgpiod.m4: fix the var names we "unset" in the end [#3049]
  • m4/nut_check_libneon.m4: track and report depCFLAGS_SOURCE/depLIBS_SOURCE consistently [#3049]
  • m4/nut_check_libmodbus.m4: track and report depCFLAGS_SOURCE/depLIBS_SOURCE consistently [#3049]
  • m4/nut_check_libnetsnmp.m4: track and report depCFLAGS_SOURCE/depLIBS_SOURCE consistently [#3049]
  • m4/nut_check_libltdl.m4: track and report depCFLAGS_SOURCE/depLIBS_SOURCE consistently [#3049]
  • m4/nut_check_libgpiod.m4: track and report depCFLAGS_SOURCE/depLIBS_SOURCE consistently [#3049]
  • m4/nut_check_libavahi.m4: track and report depCFLAGS_SOURCE/depLIBS_SOURCE consistently [#3049]
  • m4/nut_check_libusb.m4: track and report depCFLAGS_SOURCE/depLIBS_SOURCE consistently [#3049]
  • m4/nut_check_libgd.m4: track and report depCFLAGS_SOURCE/depLIBS_SOURCE consistently [#3049]
  • m4/nut_check_libfreeipmi.m4: track and report depCFLAGS_SOURCE/depLIBS_SOURCE consistently [#3049]
  • m4/nut_check_libfreeipmi.m4: comment a reminder about numerous libs that we can resolve here (with one being correct) [#3049]
  • m4/nut_arg_with.m4: revise brackets to pass arguments with commas in the value correctly [#3049]
  • m4/nut_arg_with.m4: Revert "m4/nut_arg_with.m4: simplify with use of m4_default() [#3049]" This reverts commit 9eba1eb885e9d29f3d8ecef7637010899661cb54, seems autoconf (or myself) gets lost in the maze of m4_default with or without brackets, especially when arguments with commas are involved.

2.9. 2025-10-22 Atanas Vladimirov <vladimirov.atanas@gmail.com>

  • NEWS.adoc, drivers/nutdrv_qx_masterguard.c: nutdrv_qx_masterguard: Bump MASTERGUARD_VERSION to 0.04 And updates the NEWS.adoc in regards of PR [#3141] Tested on Masterguard A1000 and A2000 units.
  • drivers/nutdrv_qx_masterguard.c: nutdrv_qx_masterguard: Makes the deep battery test command works The test.battery.start.deep (TUD) command requires the slave address as a parameter to function. Following the fix to masterguard_add_slaveaddr in the previous commit, this command can now be properly enabled. Tested on Masterguard A1000 and A2000 units.

2.10. 2025-10-21 Viktor Drobot <linux776@gmail.com>

  • drivers/nutdrv_qx_innovatae.c: More info about firmware version in bogus reply

2.11. 2025-10-21 Jim Klimov <jimklimov+nut@gmail.com>

  • NEWS.adoc: update notes for #3049 and #3140
  • ci_build.sh: check more ARCH and BITS sources for illumos/Solaris pkgconfig path guessing
  • m4/nut_check_libnetsnmp.m4: fix new --with-net-snmp-config=auto mode [#3049]
  • NEWS.adoc: update entry with PR number
  • m4/nut_arg_with.m4: NUT_ARG_WITH_LIBOPTS_CONFIGSCRIPT_IMPLEM: drop extra brackets [#3049]
  • m4/nut_check_libusb.m4: refactor to word the help and determine options via NUT_ARG_WITH_LIBOPTS* [#3049]
  • m4/nut_check_libnetsnmp.m4, m4/nut_check_libsystemd.m4: m4/nut_check_libnetsnmp.m4: refactor to word the help and determine options via NUT_ARG_WITH_LIBOPTS* [#3049]
  • m4/nut_check_libpowerman.m4: refactor to word the help and determine options via NUT_ARG_WITH_LIBOPTS* [#3049]
  • m4/nut_check_libopenssl.m4: refactor to word the help and determine options via NUT_ARG_WITH_LIBOPTS* [#3049]
  • m4/nut_check_pkgconfig.m4: refactor NUT_ARG_* help and determination of --with-pkg-config [#3049]
  • m4/nut_check_libnss.m4: refactor to word the help and determine options via NUT_ARG_WITH_LIBOPTS* [#3049]
  • m4/nut_check_libneon.m4: refactor to word the help and determine options via NUT_ARG_WITH_LIBOPTS* [#3049]
  • m4/nut_check_libmodbus.m4: refactor to word the help and determine options via NUT_ARG_WITH_LIBOPTS* [#3049]
  • m4/nut_check_libltdl.m4: refactor to word the help and determine options via NUT_ARG_WITH_LIBOPTS* [#3049]
  • configure.ac, NEWS.adoc: there was never a scripts/devd/nut-usbups.rules.in (probably a copy-paste typo in NUT v2.8.0)
  • configure.ac, scripts/devd/README.adoc: revise help and doc regarding FreeBSD devd snippet file installation
  • m4/nut_arg_with.m4: simplify with use of m4_default() [#3049]
  • m4/nut_check_libgpiod.m4: refactor to word the help and determine options via NUT_ARG_WITH_LIBOPTS* [#3049]
  • m4/nut_arg_with.m4: extend NUT_ARG_WITH_LIBOPTS* with optional alternate spelling of project name for help text [#3049]
  • configure.ac: rephrase help for (alt)pidpath [#3049]
  • m4/nut_check_libgd.m4: refactor to word the help and determine options via NUT_ARG_WITH_LIBOPTS* [#3049]
  • m4/nut_arg_with.m4: add NUT_ARG_WITH_LIBOPTS_LIBS_AS_LDFLAGS and NUT_ARG_WITH_LIBOPTS_LDFLAGS for cosmetic completeness [#3049]
  • m4/nut_arg_with.m4: rearrange NUT_ARG_WITH_LIBOPTS_INCLUDES and NUT_ARG_WITH_LIBOPTS_LIBS using renamed NUT_ARG_WITH_LIBOPTS_INVALID_YESNO; use simpler NUT_ARG_WITH_LIBOPTS for new NUT_ARG_WITH_LIBOPTS_CONFIGSCRIPT* methods [#3049]
  • m4/nut_check_libfreeipmi.m4: refactor to word the help and determine options via NUT_ARG_WITH_LIBOPTS* [#3049]

2.12. 2025-10-21 Atanas Vladimirov <vladimirov.atanas@gmail.com>

  • drivers/nutdrv_qx_masterguard.c: nutdrv_qx_masterguard: Fix masterguard_add_slaveaddr return value The masterguard_add_slaveaddr function, defined as a preprocess_command handler, must return the length of the command string it has processed. It was incorrectly returning 0. This caused the main qx_process function to see a 0-byte command length, resulting in a send: timeout (0) debug log and a failure to send the command to the UPS. This commit fixes the function to return the correct command length (which was already stored in the local variable l), resolving the bug for all commands that use the ,XX slave address placeholder. Tested on Masterguard A1000 and A2000 units.

2.13. 2025-10-20 Viktor Drobot <linux776@gmail.com>

  • docs/nut.dict: Forgot to add to dict
  • docs/man/nutdrv_qx.txt, docs/nutdrv_qx-subdrivers.txt, drivers/Makefile.am, drivers/nutdrv_qx.c, drivers/nutdrv_qx_blazer-common.c, drivers/nutdrv_qx_blazer-common.h, drivers/nutdrv_qx_innovatae.c, drivers/nutdrv_qx_innovatae.h: Basic Ippon Innova TAE support

2.14. 2025-10-20 Jim Klimov <jimklimov+nut@gmail.com>

  • m4/nut_check_libavahi.m4: refactor to word the help and determine options via NUT_ARG_WITH_LIBOPTS* [#3049]
  • m4/nut_arg_with.m4: introduce NUT_ARG_WITH_LIBOPTS* [#3049]
  • configure.ac: refactor NUT_ARG_* help and determination of --with-CCACHE_NAMESPACE [#3049]
  • configure.ac: refactor NUT_ARG_* help and determination of --enable-extapi-enphase [#3049]
  • configure.ac: refactor NUT_ARG_* help and determination of --with-user and --with-group (reword the latter) [#3049, #3120]
  • configure.ac: refactor NUT_ARG_* help and determination of --with-valgrind [#3049]
  • configure.ac: move SYSTEM_AIX and CPU_TYPE determination way up, to where we detect other aspects of the build target
  • configure.ac: refactor NUT_ARG_* help and determination of udev, hotplug, devd, freebsdquirksdir paths [#3049]
  • configure.ac: refactor NUT_ARG_* help and determination of --with-augeas-lenses-dir [#3049]
  • configure.ac: refactor NUT_ARG_* help and determination of --enable-cppunit [#3049]
  • configure.ac: refactor NUT_ARG_* help and determination of systemd paths [#3049]
  • configure.ac: refactor NUT_ARG_* help and determination of Solaris/illumos packaging options, fix a few logical mismatches [#3049]
  • configure.ac: refactor NUT_ARG_* help and determination of PKGCONFIGDIR [#3049]
  • configure.ac: refactor NUT_ARG_* help and determination of --enable-strip (and actually fix a missed compiler family dependency) [#3049]
  • configure.ac: refactor NUT_ARG_* help and determination of --enable-force-nut-version-header (and actually fix default report vs. setting) [#3049]
  • configure.ac: refactor NUT_ARG_* help and determination of --with-logfacility [#3049]
  • configure.ac: refactor NUT_ARG_* help and determination of --with-port [#3049]
  • configure.ac: refactor NUT_ARG_* help and determination of --enable-check-NIT [#3049]
  • configure.ac: refactor NUT_ARG_* help and determination of --with-doc(s) and --with-docs-changelog* tunables [#3049]
  • configure.ac: refactor NUT_ARG_* help and determination of DEFAULT_MAN_* tunables [#3049]
  • configure.ac: refactor NUT_ARG_* help and determination of CGIDATAPATH [#3049]

2.15. 2025-10-19 Jim Klimov <jimklimov+nut@gmail.com>

  • Makefile.am, configure.ac, data/Makefile.am, data/{html ⇒ htmlcgi}/.gitignore, data/{html ⇒ htmlcgi}/Makefile.am, data/{html ⇒ htmlcgi}/README.adoc, data/{html ⇒ htmlcgi}/bottom.html, data/{html ⇒ htmlcgi}/header.html.in, data/{html ⇒ htmlcgi}/index.html, data/{html ⇒ htmlcgi}/nut-banner.png, docs/configure.txt, docs/nut.dict: configure.ac, *.am: rename "htmldir" to "htmlcgidir", "data/html" to "data/htmlcgi", CGIPATH to CGIEXECPATH, and tentatively HTMLPATH to CGIDATAPATH (and actually expose the latter two from configure script) [#3049]
  • data/html/Makefile.am: ensure that HTML files for CGI are in dist tarball
  • configure.ac: add separators between unrelated subjects, revise comments
  • configure.ac: refactor NUT_ARG_* help and determination of CGIPATH [#3049]
  • NEWS.adoc, docs/man/nutdrv_qx.txt: update regarding test.battery.start.low [#3135]

2.16. 2025-10-18 Atanas Vladimirov <vladimirov.atanas@gmail.com>

  • data/cmdvartab, docs/nut-names.txt, drivers/nutdrv_qx_masterguard.c: nutdrv_qx_masterguard: Adds battery test until battery low. The difference between the battery test until battery low and deep battery test is that the latter is actually a battery calibration test and needs some preconditions to be met, i.e. the load must be between 30% and 100% and the battery capacity is greater than 99%. Battery test until battery low can be started anytime. Tested on Masterguard A1000 and A2000 units.

2.17. 2025-10-17 Jim Klimov <jimklimov+nut@gmail.com>

  • configure.ac: refactor NUT_ARG_* help and determination of DRVPATH [#3049]
  • configure.ac: refactor NUT_ARG_* help and determination of POWERDOWNFLAG [#3049]
  • configure.ac: refactor NUT_ARG_* help and determination of STATEPATH, PIDPATH and ALTPIDPATH [#3049]
  • configure.ac: define "confdir-suffix" via 4-arg syntax of NUT_ARG_WITH; rephrase other confdir options to say =PATH ⇒ =DIRPATH [#3049]
  • m4/nut_arg_with.m4: clarify that parentheses mean "default:" and *_SINGLEQUOTE values are "resolved from" [#3049]
  • m4/nut_arg_with.m4: extend NUT_ARG_ENABLE and NUT_ARG_WITH to optionally accept one more (second) argument for "…=VALUES" [#3049]
  • m4/nut_arg_with.m4: extend NUT_ARG_ENABLE_CUSTOM_DEFAULT_HELP and NUT_ARG_WITH_CUSTOM_DEFAULT_HELP to short-circuit $5==$4 if $5 is not specified [#3049]
  • m4/nut_arg_with.m4: more uniquely name the conftemp variables [#3049]
  • m4/nut_arg_with.m4: update comments [#3049]

2.18. 2025-10-16 Jim Klimov <jimklimov+nut@gmail.com>

  • configure.ac, m4/nut_arg_with.m4: extend newer NUT_ARG_WITH_CUSTOM_DEFAULT_HELP, NUT_ARG_WITH_EXPAND_DEFAULT_HELP etc. methods to optionally print "--with-VARNAME=VALUES" formatted messages [#3049]
  • m4/nut_arg_with.m4: fix passing of conftemp (non-verbatim per se) [#3049]
  • configure.ac, m4/nut_arg_with.m4: m4/nut_arg_with.m4, configure.ac, NEWS.adoc: refactor with ability to provide custom representation for default value in AS_HELP_STRING message [#3049]
  • configure.ac: fix typo in help message for --with-CCACHE_NAMESPACE
  • Makefile.am: install-as-root: fix typo after replacement of @VAR@ to $(VAR) [#3131]
  • Makefile.am, NEWS.adoc, UPGRADING.adoc, ci_build.sh, conf/Makefile.am, configure.ac, docs/configure.txt, docs/man/apc_modbus.txt, docs/nut.dict, docs/packager-guide.txt, lib/libnutclient.pc.in, lib/libnutclientstub.pc.in, lib/libnutconf.pc.in, lib/libnutscan.pc.in, lib/libupsclient-config.in, lib/libupsclient.pc.in, scripts/Aix/nut-aix.spec.in, scripts/upsdrvsvcctl/nut-driver-enumerator.sh.in: configure.ac, docs/configure.txt, lib/.pc.in, *.am et al: introduce --with-confdir= options, separate delivery of sample configs [#3131]
  • Makefile.am: install-as-root: use make variables for paths and package version [#3131]
  • m4/nut_check_python.m4, scripts/Solaris/Makefile.am, scripts/Solaris/precheck.py.in, scripts/augeas/Makefile.am, scripts/augeas/gen-nutupsconf-aug.py.in, scripts/python/module/Makefile.am, scripts/python/module/PyNUT.py.in, scripts/python/module/test_nutclient.py.in, tools/Makefile.am, tools/gitlog2changelog.py.in, tools/nut-snmpinfo.py.in: m4/nut_check_python.m4, *.am, *.py.in: introduce PYTHON_DEFAULT to track the implementation to substitute into shebangs or use as tool calls [#1792]

2.19. 2025-10-15 Jim Klimov <jimklimov+nut@gmail.com>

  • m4/nut_check_python.m4: separate NUT_CHECK_PYTHON_DEFAULT_BEST and NUT_CHECK_PYTHON_INTERIM_RESULTS, and implement discarding of "auto-prio" hits if another hit exists (yes, explicit, auto) [#1792] It seems AC_REQUIRE() calls have priority over other code lines in a method, and get executed first - so using extra methods (also for clearer code base).
  • docs/configure.txt: clarify --with-python*=yes; fix markup [#1792]
  • m4/nut_check_python.m4: separate NUT_CHECK_PYTHON*_SITE_PACKAGES into dedicated methods, to honour forgetting of interpreters due to auto-prio [#1792]
  • m4/nut_check_python.m4, NEWS.adoc, UPGRADING.adoc, INSTALL.nut.adoc, docs/configure.txt, docs/nut.dict: change default to auto-prioritize some one available python interpreter [#1792]

2.20. 2025-10-14 Jim Klimov <jimklimov+nut@gmail.com>

  • ci_build.sh: pkg-rpm\|pkg-spec: fix rpmbuild callout
  • ci_build.sh, scripts/obs/_service, scripts/obs/{debian.nut.changes ⇒ nut.changes}: scripts/obs/nut.changes: isn’t it a placeholder for RPM changelog?
  • INSTALL.nut.adoc: mention some surprising configure options, like the many --with-python* settings, and a --sysconfdir override [#1792]
  • docs/configure.txt, docs/nut.dict: revise the section on --with-python* settings [#1792]
  • NEWS.adoc, configure.ac: configure.ac: warn if several python versions were AUTO-detected and configured [#1792]

2.21. 2025-10-13 Jim Klimov <jimklimov+nut@gmail.com>

  • scripts/obs/debian.rules: make list-missing optional (absent in new cdbs)
  • scripts/obs/debian.rules: do not mislead about lack of dh_python2 due to our own tests
  • scripts/obs/debian.rules: update for bleeding-edge CDBS that lacks many scripts
  • docs/configure.txt: clarify that --with-group is barely used directly by daemons [#3120]
  • Makefile.am: spellcheck-interactive: follow-up with a spellcheck-quick to soak up timestamp changes of the dictionary file
  • drivers/snmp-ups.c: comment about us not parsing the port from device_path
  • configure.ac: when we suggest to "make" after "configure" is done, have a fallback if MAKE was not defined/exported
  • NEWS.adoc: Revert "NEWS.adoc: Fallout of the refactoring of drivers to use shutdown.* commands consistently [#1962]" This reverts commit 15bc72b0ae7952fe30b013b48eebfd7a6c9bf0a7 prepared problem log was not a problem after all.
  • drivers/victronups.c: fix whitespace markup; translate comments
  • drivers/victronups.c, NEWS.adoc: reshuffle code — upsdrv_initups() is for preparing comms; upsdrv_initinfo() is for first using them [#1962]
  • drivers/usbhid-ups.c, NEWS.adoc: reshuffle code — upsdrv_initups() is for preparing comms; upsdrv_initinfo() is for first using them [#1962]
  • drivers/powervar_cx_ser.c, NEWS.adoc: reshuffle code —  upsdrv_initups() is for preparing comms; upsdrv_initinfo() is for first using them [#1962]
  • drivers/powercom.c, NEWS.adoc: reshuffle code — upsdrv_initups() is for preparing comms; upsdrv_initinfo() is for first using them [#1962]
  • drivers/pijuice.c, NEWS.adoc: reshuffle code — upsdrv_initups() is for preparing comms; upsdrv_initinfo() is for first using them [#1962]
  • drivers/phoenixcontact_modbus.c, NEWS.adoc: reshuffle code —  upsdrv_initups() is for preparing comms; upsdrv_initinfo() is for first using them [#1962]
  • drivers/oneac.c, NEWS.adoc: reshuffle code — upsdrv_initups() is for preparing comms; upsdrv_initinfo() is for first using them [#1962]
  • drivers/mge-utalk.c, NEWS.adoc: reshuffle code — upsdrv_initups() is for preparing comms; upsdrv_initinfo() is for first using them [#1962]
  • drivers/metasys.c, NEWS.adoc: reshuffle code — upsdrv_initups() is for preparing comms; upsdrv_initinfo() is for first using them [#1962]
  • drivers/masterguard.c, NEWS.adoc: reshuffle code —  upsdrv_initups() is for preparing comms; upsdrv_initinfo() is for first using them [#1962]
  • drivers/gamatronic.c: upsdrv_initups(): update comments [#1962]
  • drivers/everups.c, NEWS.adoc: reshuffle code — upsdrv_initups() is for preparing comms; upsdrv_initinfo() is for first using them [#1962]
  • drivers/bicker_ser.c, NEWS.adoc: reshuffle code — upsdrv_initups() is for preparing comms; upsdrv_initinfo() is for first using them [#1962]
  • drivers/bestuferrups.c, NEWS.adoc: reshuffle code —  upsdrv_initups() is for preparing comms; upsdrv_initinfo() is for first using them [#1962]
  • drivers/bestfortress.c, NEWS.adoc: reshuffle code —  upsdrv_initups() is for preparing comms; upsdrv_initinfo() is for first using them [#1962]

2.22. 2025-10-12 Jim Klimov <jimklimov+nut@gmail.com>

  • drivers/asem.c, NEWS.adoc: reshuffle code — upsdrv_initups() is for preparing comms; upsdrv_initinfo() is for first using them [#1962]
  • drivers/upscode2.c: fix indentation
  • drivers/powervar_cx.c, drivers/powervar_cx.h: drivers/powervar_cx.{c,h}: fix setcmd()→setvar() for consistency [#1962]
  • NEWS.adoc, docs/nut.dict, drivers/powerp-bin.c, drivers/powerp-txt.c: drivers/powerp-{txt,bin}.c: install instcmd and setvar handlers [#1962]
  • drivers/optiups.c: fix indentation broken in white-space refactoring of early NUT v2.8.x evolution [#1962]
  • drivers/oneac.c: fix setcmd()→setvar() for consistency [#1962]
  • drivers/metasys.c: avoid spurious void return at end of upsdrv_initinfo() [#1962]
  • drivers/main.c: better log the progress for killpower via running driver instance
  • drivers/riello_ser.c: relocate methods to match structure of riello_usb.c to ease the comparisons
  • NEWS.adoc, drivers/riello_ser.c, drivers/riello_usb.c: drivers/riello_{ser,usb}.c: refactor parse_ups_status() and do not constrain "shutdown.return" and "load.*" INSTCMD with whether the UPS is known to be on battery or not [#1962]
  • scripts/Solaris/Makefile.am: "target_cpu=sparc" is inconclusive about binary bitness [#3099]
  • NEWS.adoc: Fallout of the refactoring of drivers to use shutdown.* commands consistently [#1962]
  • configure.ac: refactor echo of NUT_SOURCE_VERSION_REPORT, and suggest to "make" after "configure" is done Many projects do this latter convenience for beginner users. Seems nice.

2.23. 2025-10-11 Jim Klimov <jimklimov+nut@gmail.com>

  • NEWS.adoc, docs/man/apcupsd-ups.txt, docs/nut.dict, drivers/apcupsd-ups.c: drivers/apcupsd-ups.c, docs: migrate from gethostbyname() to getaddrinfo(); become IPv6 capable [#1209]
  • drivers/apcupsd-ups.c: revise comments and markup
  • drivers/apcupsd-ups.c: use strrchr(device_path,:) to look for LAST colon, since bare IPv6 addresses contain colons too [#1209]
  • drivers/apcupsd-ups.c: update comments about default port 3551
  • scripts/upsdrvsvcctl/nut-driver-enumerator.sh.in: avoid logging bogus-looking "OK" confirming undeclared activities [#3099]
  • docs/config-notes.txt, docs/configure.txt, docs/man/nut.txt, docs/man/upsmon.conf.txt: clarify /run vs. /var/run [#3099]
  • configure.ac, NEWS.adoc, UPGRADING.adoc: PIDPATH is now more strictly /var/run, unless /run is more preferable for good reason [#3099]

2.24. 2025-10-10 Jim Klimov <jimklimov+nut@gmail.com>

  • scripts/obs/nut.spec: update comment about python locations
  • scripts/obs/nut.spec: hide %dir /var/log (we do not own it), suffice to mkdir it in build area to match our logrotate configuration
  • scripts/obs/nut.spec: nut-monitor requires python-base
  • scripts/obs/_config: track a copy of prjconf data
  • scripts/obs/README.adoc: update notes on OBS prjconf
  • scripts/upsdrvsvcctl/nut-driver-enumerator.sh.in: fix svccfg setprop for multiple DEPSVC FMRIs [#3099] Co-authored-by: Nick Briggs <nicholas.h.briggs@gmail.com>
  • NEWS.adoc, UPGRADING.adoc, docs/nut.dict, m4/nut_check_python.m4: m4/nut_check_python.m4: try harder to report the "purelib" location as PYTHON*_SITE_PACKAGES [#1209]
  • NEWS.adoc, docs/nut.dict, tests/NIT/Makefile.am, tests/NIT/nit.sh: tests/NIT/nit.sh, tests/NIT/Makefile.am, NEWS.adoc: let test runs started as root in under-provisioned environments tweak user/group to what is available [#1209]
  • NEWS.adoc: one more Eaton USB ID supported [#2380]

2.25. 2025-10-09 Jim Klimov <jimklimov+nut@gmail.com>

  • scripts/obs/nut.spec: register other service units (enablement is via presets after all)
  • scripts/obs/nut.spec, scripts/obs/debian.rules: enable storing build configuration and checking the build with NUT Integration Tests suite, and strip binaries of debug symbols
  • scripts/obs/nut.spec: deduplicate man page files with symlinks
  • scripts/obs/nut.spec: reduce layering of HTMLPATH under apache_serverroot_data
  • scripts/obs/nut.spec: reduce layering of CGIPATH under apache_serverroot_cgi
  • scripts/obs/nut.spec: anticipate something like /usr/lib64/python2.7/site-packages/ too
  • scripts/obs/nut.spec: keep excluding from main package stuff that should be in others
  • scripts/obs/nut.spec: revise delivery of CGI artifacts as %dir
  • scripts/obs/nut.spec: address SUSE rpmlint issues with "make check" section
  • scripts/obs/nut.spec: address SUSE rpmlint issues with scripted-only NUT-Monitor package
  • scripts/obs/nut.spec: address SUSE rpmlint issues with logrotate
  • scripts/obs/nut.spec: deliver libs each in its ABI-version-named package
  • scripts/obs/nut.spec: comment away "%dir" and "%exclude" hacks that felt superfluous and probably are
  • scripts/obs/nut.spec: revise pre/port-in/un snippets
  • scripts/obs/nut.spec: do not relocate upssched-cmd to hard-coded /bin
  • scripts/obs/nut.spec: fence delivery of systemd files (check if we could resolve the the paths involved)
  • scripts/obs/nut.spec: fix systemdtmpfilesdir determination
  • scripts/obs/nut.spec: BuildRequires: libxml2-devel
  • scripts/obs/nut.spec: dep on accounts for pkg self-test does not work like this
  • scripts/obs/nut.spec: dep on chroot does not work like this
  • scripts/obs/nut.spec: do not package directly-named "/bin" objects
  • scripts/obs/nut.spec: require more tools for SUSE platform tests on OBS
  • scripts/obs/nut.spec: require user/group for post-install script context
  • scripts/obs/nut.spec: refactor how we get HTMLPATH and CGIPATH, they may be different in APXS output
  • scripts/obs/nut.spec: let the SPEC version reflect in NUT self-identification
  • ci_build.sh: add failsafes into pkg* build types
  • docs/nut.dict, scripts/obs/README.adoc: scripts/obs/README.adoc: update with Practical setup and Other notes
  • scripts/obs/Makefile.am, scripts/obs/_service: scripts/obs/_service: add a copy of working OBS recipe
  • Makefile.am, ci_build.sh, configure.ac, scripts/Makefile.am, {obs ⇒ scripts/obs}/Makefile.am, {obs ⇒ scripts/obs}/README.adoc, {obs ⇒ scripts/obs}/debian.Makefile.am, {obs ⇒ scripts/obs}/debian.NEWS, {obs ⇒ scripts/obs}/debian.changelog, {obs ⇒ scripts/obs}/debian.compat, {obs ⇒ scripts/obs}/debian.control, {obs ⇒ scripts/obs}/debian.copyright, {obs ⇒ scripts/obs}/debian.description.subst, {obs ⇒ scripts/obs}/debian.gbp.conf, {obs ⇒ scripts/obs}/debian.hotplug, {obs ⇒ scripts/obs}/debian.libnutclient-dev.install, {obs ⇒ scripts/obs}/debian.libnutclient-dev.manpages, {obs ⇒ scripts/obs}/debian.libnutclient1.install, {obs ⇒ scripts/obs}/debian.libnutclient1.lintian-overrides, {obs ⇒ scripts/obs}/debian.libnutclientstub-dev.install, {obs ⇒ scripts/obs}/debian.libnutclientstub1.install, {obs ⇒ scripts/obs}/debian.libnutclientstub1.lintian-overrides, {obs ⇒ scripts/obs}/debian.libnutscan-dev.install, {obs ⇒ scripts/obs}/debian.libnutscan1.install, {obs ⇒ scripts/obs}/debian.libups-nut-perl.install, {obs ⇒ scripts/obs}/debian.libupsclient-dev.install, {obs ⇒ scripts/obs}/debian.libupsclient-dev.manpages, {obs ⇒ scripts/obs}/debian.libupsclient4.install, {obs ⇒ scripts/obs}/debian.nut-cgi.README.Debian, {obs ⇒ scripts/obs}/debian.nut-cgi.docs, {obs ⇒ scripts/obs}/debian.nut-cgi.install, {obs ⇒ scripts/obs}/debian.nut-cgi.manpages, {obs ⇒ scripts/obs}/debian.nut-cgi.postinst, {obs ⇒ scripts/obs}/debian.nut-cgi.postrm, {obs ⇒ scripts/obs}/debian.nut-client.init.in, {obs ⇒ scripts/obs}/debian.nut-client.install, {obs ⇒ scripts/obs}/debian.nut-client.links, {obs ⇒ scripts/obs}/debian.nut-client.lintian-overrides, {obs ⇒ scripts/obs}/debian.nut-client.maintscript, {obs ⇒ scripts/obs}/debian.nut-client.manpages, {obs ⇒ scripts/obs}/debian.nut-client.postinst, {obs ⇒ scripts/obs}/debian.nut-client.preinst, {obs ⇒ scripts/obs}/debian.nut-client.prerm, {obs ⇒ scripts/obs}/debian.nut-common.install, {obs ⇒ scripts/obs}/debian.nut-common.postinst.in, {obs ⇒ scripts/obs}/debian.nut-common.prerm.in, {obs ⇒ scripts/obs}/debian.nut-common.tmpfiles.in, {obs ⇒ scripts/obs}/debian.nut-doc.doc-base.nut-developer-guide, {obs ⇒ scripts/obs}/debian.nut-doc.doc-base.nut-faq, {obs ⇒ scripts/obs}/debian.nut-doc.doc-base.nut-packager-guide, {obs ⇒ scripts/obs}/debian.nut-doc.doc-base.nut-user-manual, {obs ⇒ scripts/obs}/debian.nut-doc.install, {obs ⇒ scripts/obs}/debian.nut-ipmi.install, {obs ⇒ scripts/obs}/debian.nut-ipmi.manpages, {obs ⇒ scripts/obs}/debian.nut-linux-i2c.install, {obs ⇒ scripts/obs}/debian.nut-linux-i2c.manpages, {obs ⇒ scripts/obs}/debian.nut-modbus.install, {obs ⇒ scripts/obs}/debian.nut-modbus.manpages, {obs ⇒ scripts/obs}/debian.nut-monitor.install, {obs ⇒ scripts/obs}/debian.nut-monitor.menu, {obs ⇒ scripts/obs}/debian.nut-monitor.xpm, {obs ⇒ scripts/obs}/debian.nut-powerman-pdu.install, {obs ⇒ scripts/obs}/debian.nut-powerman-pdu.manpages, {obs ⇒ scripts/obs}/debian.nut-server.dirs, {obs ⇒ scripts/obs}/debian.nut-server.init.in, {obs ⇒ scripts/obs}/debian.nut-server.install, {obs ⇒ scripts/obs}/debian.nut-server.manpages, {obs ⇒ scripts/obs}/debian.nut-server.postinst, {obs ⇒ scripts/obs}/debian.nut-server.postrm, {obs ⇒ scripts/obs}/debian.nut-server.preinst, {obs ⇒ scripts/obs}/debian.nut-server.prerm.in, {obs ⇒ scripts/obs}/debian.nut-snmp.docs, {obs ⇒ scripts/obs}/debian.nut-snmp.install, {obs ⇒ scripts/obs}/debian.nut-snmp.manpages, {obs ⇒ scripts/obs}/debian.nut-xml.install, {obs ⇒ scripts/obs}/debian.nut-xml.manpages, {obs ⇒ scripts/obs}/debian.nut.README.Debian, {obs ⇒ scripts/obs}/debian.nut.TODO.Debian, {obs ⇒ scripts/obs}/debian.nut.changes, {obs ⇒ scripts/obs}/debian.nut.docs, {obs ⇒ scripts/obs}/debian.python-nut.install, {obs ⇒ scripts/obs}/debian.rules, {obs ⇒ scripts/obs}/debian.series, {obs ⇒ scripts/obs}/debian.watch, {obs ⇒ scripts/obs}/nut.dsc, {obs ⇒ scripts/obs}/nut.spec, {obs ⇒ scripts/obs}/pkgsrc.obs: Move obs/ to scripts/obs/ for consistency with other helper code
  • obs/nut.spec: shebangs: fix shell and sed syntax
  • obs/nut.spec: abstract the DOCPATH as a spec-var
  • obs/nut.spec: do not mention man1
  • obs/nut.spec: abstract the LIBEXECPATH as a spec-var
  • obs/nut.spec: reject found apache_serverroot that is under /usr/share
  • obs/nut.spec: announce where and how we rewrite shebangs
  • obs/nut.spec: seems there is no "%if X != Y" syntax
  • obs/nut.spec: comment about alias man pages seen as duplicate files in package
  • obs/nut.spec: specify system locations we use via %dir
  • obs/nut.spec: do not dump sockdebug and NDE script into /usr/libexec directly
  • obs/nut.spec: avoid what looks like spec-var expansion in comments
  • obs/debian.rules: try harder to detect python2/3 helper
  • ci_build.sh: pkg*: pre-cleanup more
  • ci_build.sh: pkg-deb: clean away cdbs temp leftovers
  • ci_build.sh: pkg-deb: install prereqs (TBD;: optional?)
  • ci_build.sh: pkg-deb: force debuikd differently
  • ci_build.sh: pkg-deb: fix shell and sed syntax
  • obs/Makefile.am, obs/control: obs/*: drop "control" symlink
  • ci_build.sh, obs/Makefile.am, obs/{nut-linux-i2c.install ⇒ debian.nut-linux-i2c.install}, obs/{nut-linux-i2c.manpages ⇒ debian.nut-linux-i2c.manpages}, obs/{nut-modbus.install ⇒ debian.nut-modbus.install}, obs/{nut-modbus.manpages ⇒ debian.nut-modbus.manpages}, obs/{nut.changes ⇒ debian.nut.changes}: obs.*, ci_build.sh: rename debiam recipe files to standard pattern
  • ci_build.sh: wrap pkg-rpm and pkg-deb (PoC)
  • obs/debian.rules: convince cdbs about dh_python3 when it is the only viable option
  • obs/nut.dsc, obs/debian.control: do not require "python-is-…" which confuses cdbs
  • NEWS.adoc, UPGRADING.adoc: Drop git-tracked compile script
  • Makefile.am: EXTRA_DIST the autotools compile script
  • .gitignore, compile: Drop git-tracked compile script

2.26. 2025-10-08 Jim Klimov <jimklimov+nut@gmail.com>

  • obs/nut.spec: reshuffle NUT_SYSTEMD_UNITS_SERVICE_TARGET definition
  • obs/debian.rules: fix pkg-config search for systemd vars
  • obs/debian.rules: fix iteration for debian *.install fixup (DMF)
  • obs/debian.rules: fix check for NUTPKG_WITH_DMF
  • obs/debian.rules: search for systemd configs also in libsystemd
  • obs/nut.spec: udev rules no longer under /etc - not a %config (hopefully)
  • obs/nut.spec: fix rpm-var expansion for conditionals
  • obs/debian.rules: fix sed with parentheses
  • obs/nut.spec: only package docs/cables/*.txt, not the whole builddir
  • obs/nut.spec: address some concerns from rpmlint
  • obs/nut.spec: %pre: try to groupadd to be sure
  • obs/debian.rules: make NUTPKG_WITH_DMF optional (based on the branch we build)
  • obs/debian.nut-cgi.docs: README renamed to *.adoc
  • obs/README.adoc, docs/nut.dict: update info about OBS recipes [#1209]
  • obs/nut.spec: require basic tooling used in rpmlint checks
  • obs/nut.spec: try another way of checking that apache_serverroot is defined and not empty
  • obs/debian.rules: bump SO_MAJOR_LIB* vars and add libnutconf installation
  • obs/nut.spec: comment about %(cmd) definitions
  • obs/debian.rules: binary-install/nut-monitor: use dh_python* more clearly
  • obs/debian.rules: fix a shell/make typo
  • obs/nut.spec: try another way of checking that apache_serverroot is defined and not empty
  • obs/nut.spec: exclude in root package whatever we put into sub-packages (rpmbuild seems to duplicate this)
  • obs/nut.spec: post: neuter faults of chown/chgrp/chmod (some rpmbuilds fail self-check due to lack of accounts)
  • obs/nut.spec: update comments
  • obs/nut.spec: actually detect ability to build NUTPKG_WITH_DMF (sources available or not in this branch)
  • obs/nut.spec: only use apache_serverroot if we can detect it; otherwise dump NUT CGI artifacts under our _libexecdir and _datadir
  • NEWS.adoc, UPGRADING.adoc, docs/man/Makefile.am, …/{nutdrv_siemens_sitop.txt ⇒ nutdrv_siemens-sitop.txt}: docs/man/nutdrv_siemens-sitop.txt, docs/man/Makefile.am, UPGRADING.adoc: Fixed man page naming for nutdrv_siemens-sitop(.8) (dash vs. underscore) to match the driver program name [#1209, #545]
  • configure.ac, scripts/python/Makefile.am: Avoid "make install" writing PyNUT.py and test_nutclient.py to same location twice
  • drivers/mge-hid.c: add Eaton Ellipse PRO 5S1600 [#2380]

2.27. 2025-10-07 Jim Klimov <jimklimov+nut@gmail.com>

  • obs/nut.spec: fix sub-package name for NUT-Monitor (GUI)
  • obs/debian.nut-monitor.install: GUI glade files have moved
  • obs/nut.spec: avoid "chown USER:GROUP" syntax
  • obs/debian.nut.docs: update file name lists
  • obs/nut.spec: only run udevadm where available
  • obs/nut.spec: rename "GROUP" which tends to pull in package type string
  • obs/nut.spec: deliver files that are built and installed but were not listed
  • obs/debian.control: support several libusb implementations
  • obs/debian.rules: do not run python directly anymore
  • obs/debian.changelog, obs/nut.dsc: bump formal versioning
  • obs/nut.spec: many docs files were renamed to *.adoc
  • obs/nut.spec: exclude DMF artifacts from main pkg only if NUTPKG_WITH_DMF in the first place
  • obs/nut.spec: reword comment
  • obs/nut.spec: hide dblatex
  • obs/nut.spec: explicitly "Prefer" something when OBS sees we "have choice for (X or Y)"
  • obs/nut.spec: do not call "python" directly
  • obs/nut.spec: revise neon dependency
  • obs/nut.spec: LUA only needed for DMF builds
  • obs/nut.spec: fix typos; make cppunit-devel optional (not in RHEL7)
  • obs/nut.spec: make TCP_WRAPPERS builds optional (if package seems available to be installed - was obsoleted in many distros)
  • obs/nut.spec: refactor BuildRequires to avoid catering to distro-specific macro names
  • obs/nut.spec: make IPMI, AVAHI and POWERMAN builds optional (if package seems available to be installed)
  • obs/nut.spec: make DMF builds and deliveries optional (currently off by default)
  • obs/nut.spec: accept either httpd-devel or apache2-devel
  • obs/nut.spec: accept either libusb-0.1 or 1.0
  • obs/nut.spec: update heading metadata
  • obs/nut.spec: expand python requirements
  • clients/upssched.c: start_timer(): drop unneeded NULLness checks [#3105]
  • conf/upsmon.conf.sample.in: align NOTIFYFLAG samples with NOTIFYMSG definitions [#3084] Also helps NIT generate an upsmon.conf to report those events in tests.
  • tests/NIT/upssched.conf.in: add handling for SHUTDOWN_HOSTSYNC [#3084]
  • docs/man/upsmon.txt, docs/nut.dict: introduce SHUTDOWN ACTIVITY WORKFLOW section [#3003, #3110]
  • docs/man/upsmon.txt: in SIMULATING POWER FAILURES section, refer to NIT scripts as a source of inspiration
  • docs/man/upsmon.txt: from UPS CONNECTION TYPES AND UPSMON ROLES section, refer to TIMED SHUTDOWNS section
  • docs/man/upsmon.txt: reword intro (and name) of UPS CONNECTION TYPES AND UPSMON ROLES section

2.28. 2025-10-06 Jim Klimov <jimklimov+nut@gmail.com>

  • docs/man/upssched.txt: suggest using FSD notification for early shutdown activity on the upsmon primary system [#3003]
  • docs/man/upssched.conf.txt, docs/man/upssched.txt: note that command execution is not async in upssched
  • NEWS.adoc, clients/upsmon.c, clients/upsmon.h: clients/upsmon.{c,h}, NEWS.adoc: Make sure FSD notifications are always issued at latest when shutdown handling just starts (or earlier) [#3003, #3110]
  • ci_build.sh: consider_cleanup_shortcut(): better react to changes of sources for configure script …even if there is no Makefile yet
  • scripts/misc/nut.bash_completion.in: fix indentations
  • configure.ac, scripts/Makefile.am, scripts/misc/.gitignore, scripts/misc/{nut.bash_completion ⇒ nut.bash_completion.in}: scripts/misc/nut.bash_completion: convert to .in template to use TAIL_ARGS_FROM_NTH_LINE [#3099]
  • scripts/upsdrvsvcctl/nut-driver-enumerator.sh.in: use TAIL_ARGS_FROM_NTH_LINE [#3099]
  • configure.ac: detect TAIL_ARGS_FROM_NTH_LINE [#3099]
  • configure.ac: fix indent

2.29. 2025-10-04 Jim Klimov <jimklimov+nut@gmail.com>

  • scripts/Solaris/postinstall.in: Update comments/messages for legacy init script usage on Solaris older than 10 [#3099]
  • scripts/Solaris/preremove.in, scripts/Solaris/postinstall.in: quiesce upsdrvctl activity; add tweak-ability for debugging NUT programs in the install script context (possibly with custom package builds) [#3099]
  • scripts/misc/nut.bash_completion, scripts/Solaris/reset-ups-usb-solaris.sh.sample, scripts/upsdrvsvcctl/nut-driver-enumerator.sh.in: avoid "tail -n \+/-NUM" syntax as unportable [#3099]
  • .github/workflows/codeql.yml: disable ccache use for actual compilation, for CodeQL analysis to hook into compiler correctly

2.30. 2025-10-02 Jim Klimov <jimklimov+nut@gmail.com>

  • ci_build.sh: fix typo in message
  • ci_build.sh: USE_CONFIG_SHELL at least from explicit caller envvar [#3099]
  • ci_build.sh: revise indentation
  • clients/upssched.c: simplify loop processing [#3097]
  • tests/NIT/upssched.conf.in: rename parameters passed to "EXECUTE" methods, for less confusing dev-testing logs [#3105]
  • clients/upsmon.c: add debug logging to NOTIFYCMD (WIN32) [#3097]
  • docs/man/upssched.txt: list common and unique options
  • NEWS.adoc, clients/upssched-cmd, clients/upssched.c, conf/upssched.conf.sample.in, docs/man/upssched.conf.txt, docs/man/upssched.txt, scripts/misc/notifyme-debug: upssched: introduce passing of NOTIFYMSG to CMDSCRIPT [#3105]

2.31. 2025-10-01 Jim Klimov <jimklimov+nut@gmail.com>

  • Makefile.am: work around lack of "id -u" [#3099]
  • ci_build.sh: detect_platform_PKG_CONFIG_PATH_and_FLAGS(): fix use of PKG_CONFIG variable [#3099]
  • ci_build.sh: work around NCPUS prefixed with white-space [#3099]
  • ci_build.sh: work around lack of "find -maxdepth" [#3099]
  • scripts/python/Makefile.am: add a fallback TOUPPER/TOLOWER implementation [#3099]
  • ci_build.sh, scripts/subdriver/gen-snmp-subdriver.sh, scripts/subdriver/gen-usbhid-subdriver.sh: add a fallback TOUPPER/TOLOWER implementation [#3099]
  • configure.ac, m4/ax_realpath.m4: introduce a fallback "mktemp" [#3099]
  • scripts/subdriver/gen-usbhid-subdriver.sh: quote calls to mktemp [#3099]
  • scripts/subdriver/gen-snmp-subdriver.sh, scripts/subdriver/gen-usbhid-subdriver.sh: add a fallback mktemp implementation [#3099]
  • scripts/subdriver/gen-snmp-subdriver.sh: avoid grep for char classes, it is also not ubiquitous [#3099]
  • scripts/subdriver/gen-snmp-subdriver.sh: avoid "GREP -e", it is also not ubiquitous [#3099]
  • ci_build.sh: avoid "GREP -e", it is also not ubiquitous [#3099]
  • ci_build.sh: fix GGREP detection [#3099]
  • tools/driver-list-format.sh: revise reaction to "diff" problems or successes [#3099]
  • tools/driver-list-format.sh: sed class [:blank:] is not portable [#3099]
  • tools/driver-list-format.sh, docs/docinfo.xml.sh.in: fallback for absent "diff -u" feature in pretty reporting [#3099]
  • Makefile.am, tests/nut-driver-enumerator-test.sh: fallback for absent "diff -u" feature; use detected or passed EGREP [#3099]
  • NEWS.adoc: update about portability fixes [#3099]
  • tests/NIT/nit.sh: "id -u" is not ubiquitous, find fallback ways to check that I_AM_ROOT [#3099]
  • ci_build.sh, configure.ac, docs/Makefile.am, docs/man/Makefile.am, m4/ax_realpath_lib.m4, m4/nut_check_libnetsnmp.m4, scripts/upsdrvsvcctl/nut-driver-enumerator.sh.in: Portability: in some shells, "if" only accepts the list of commands to run (there is no "if ! condition" support) - some better hidden cases [#3099]
  • scripts/installer/common/aix_init, scripts/installer/common/ipp-host-shutdown.sample, scripts/installer/common/ipp-os-shutdown: scripts/installer/*: fix syntax to pass on old Solaris 8 /bin/sh [#3099]
  • Makefile.am, ci_build.sh, configure.ac, docs/Makefile.am, docs/man/Makefile.am, scripts/Windows/build-mingw-prereqs.sh, scripts/python/app/NUT-Monitor, scripts/python/module/Makefile.am, scripts/upsdrvsvcctl/nut-driver-enumerator.sh.in, tests/NIT/nit.sh, tools/Makefile.am, tools/gitlog2version.sh: Portability: in some shells, "if" only accepts the list of commands to run (there is no "if ! condition" support) [#3099]
  • autogen.sh: do fail if configure script did not get generated [#3099]
  • configure.ac, m4/ax_check_compile_flag.m4, m4/ax_realpath_lib.m4, m4/nut_check_asciidoc.m4, m4/nut_check_aspell.m4, m4/nut_check_libmodbus.m4, m4/nut_check_libsystemd.m4, m4/nut_check_os.m4, m4/nut_check_pkgconfig.m4, m4/nut_check_python.m4, m4/nut_compiler_family.m4: configure.ac, m4/*.m4: try to use the detected GREP and EGREP tools [#3099]
  • NEWS.adoc: add historic reference from #3099 to #1660
  • ci_build.sh: handle a couple more "test -e" cases [#3099]
  • docs/Makefile.am, docs/man/Makefile.am: handle a couple more "test -e" cases [#3099]
  • scripts/upsdrvsvcctl/nut-driver-enumerator.sh.in: substitute plain GREP too [#3099]
  • docs/man/Makefile.am: substitute plain GREP too [#3099]
  • docs/Makefile.am: substitute plain GREP too [#3099]
  • data/Makefile.am: export GREP or EGREP detected by configure, so further called scripts do not have to re-detect [#3099]
  • tools/gitlog2version.sh: use or discover GREP to avoid literal "grep" [#3099]
  • tools/driver-list-format.sh: use or discover EGREP to avoid literal "grep -E" [#3099]
  • configure.ac: detect and export (E)GREP as early as possible [#3099]
  • configure.ac: avoid "[ -e" or "test -e" which some older shells lack [#3099]
  • tests/NIT/Makefile.am: nut_version.h: export GREP or EGREP detected by configure, so further called scripts do not have to re-detect [#3099]
  • include/Makefile.am: nut_version.h: export GREP or EGREP detected by configure, so further called scripts do not have to re-detect [#3099]
  • autogen.sh, ci_build.sh: export GREP or EGREP if we detect them, so further called scripts do not have to re-detect [#3099]
  • NEWS.adoc: summarize fixes for "grep" and "test" callouts [issue #3099]
  • scripts/Solaris/postinstall.in: avoid "[ -e" or "test -e" which some older shells lack [#3099]
  • m4/ax_realpath.m4: protect against lack of "test -e" even better (some shells do crash trying) [#3099]
  • docs/man/Makefile.am: avoid "[ -e" or "test -e" which some older shells lack [#3099]
  • tests/NIT/nit.sh: use or discover EGREP to avoid literal "grep -E"; also GREP [#3099]
  • tools/nut-dumpdiff.sh: use or discover EGREP to avoid literal "grep -E" [#3099]
  • scripts/subdriver/gen-usbhid-subdriver.sh: use or discover EGREP to avoid literal "grep -E"; also GREP; avoid "grep -q" [#3099]
  • scripts/subdriver/gen-snmp-subdriver.sh: use or discover EGREP to avoid literal "grep -E"; also GREP; avoid "grep -q" [#3099]
  • scripts/Solaris/reset-ups-usb-solaris.sh.sample: roll back "grep -E" requirement [#3099, #1660]
  • ci_build.sh: use or discover EGREP to avoid literal "grep -E" [#3099]
  • drivers/nutdrv_hashx.c: do not directly require "stdint.h" [#3099]
  • drivers/Makefile.am: fix library search order for upsdrvctl build [#3099]
  • autogen.sh: avoid "find -not …" [#3099]
  • autogen.sh: use or discover EGREP to avoid literal "grep -E" [#3099]
  • autogen.sh: report about testing generated script syntax [#3099]
  • tools/gitlog2version.sh: avoid shell substitution missing in older shells [#3099]
  • tools/gitlog2version.sh: use or discover EGREP to avoid literal "grep -E" [#3099]
  • tools/gitlog2version.sh: avoid "[ -e" or "test -e" which some older shells lack and do crash trying [#3099]
  • docs/Makefile.am: avoid "[ -e" or "test -e" which some older shells lack [#3099]
  • Makefile.am: avoid "[ -e" or "test -e" which some older shells lack [#3099]
  • tests/NIT/README.adoc, tests/NIT/nit.sh: tests/NIT/nit.sh: avoid "[ -e" or "test -e" which some older shells lack [#3099]
  • ci_build.sh: avoid "[ -e" or "test -e" which some older shells lack [#3099]
  • Makefile.am: EXTRA_DIST some more useful files

2.32. 2025-09-30 Jim Klimov <jimklimov+nut@gmail.com>

  • docs/net-protocol.txt: log the TODO idea for "Logout pending" of some sort [#3086]
  • docs/net-protocol.txt: cross-link LIST CLIENT and GET NUMLOGINS
  • docs/net-protocol.txt: clarify intro about client libraries and other bindings, in-tree or third-party

2.33. 2025-09-29 Jim Klimov <jimklimov+nut@gmail.com>

  • drivers/snmp-ups.c: allow to actually abort stuck init [#3101]
  • drivers/snmp-ups.c: implement a non-trivial upsdrv_tweak_prognames() to allow aliasing with "snmp-ups-old" [#3101]
  • NEWS.adoc, UPGRADING.adoc, docs/new-drivers.txt, docs/nut.dict, drivers/adelsystem_cbi.c, drivers/al175.c, drivers/apc_modbus.c, drivers/apcsmart-old.c, drivers/apcsmart.c, drivers/apcupsd-ups.c, drivers/asem.c, drivers/bcmxcp.c, drivers/belkin.c, drivers/belkinunv.c, drivers/bestfcom.c, drivers/bestfortress.c, drivers/bestuferrups.c, drivers/bestups.c, drivers/bicker_ser.c, drivers/blazer_ser.c, drivers/blazer_usb.c, drivers/clone-outlet.c, drivers/clone.c, drivers/dummy-ups.c, drivers/etapro.c, drivers/everups.c, drivers/failover.c, drivers/gamatronic.c, drivers/generic_gpio_common.c, drivers/generic_gpio_libgpiod.c, drivers/generic_modbus.c, drivers/genericups.c, drivers/huawei-ups2000.c, drivers/hwmon_ina219.c, drivers/isbmex.c, drivers/ivtscd.c, drivers/liebert-esp2.c, drivers/liebert-gxe.c, drivers/liebert.c, drivers/macosx-ups.c, drivers/masterguard.c, drivers/metasys.c, drivers/mge-utalk.c, drivers/microdowell.c, drivers/microsol-apc.c, drivers/microsol-common.c, drivers/netxml-ups.c, drivers/nhs_ser.c, drivers/nut-ipmipsu.c, drivers/nutdrv_atcl_usb.c, drivers/nutdrv_hashx.c, drivers/nutdrv_qx.c, drivers/nutdrv_siemens_sitop.c, drivers/oneac.c, drivers/optiups.c, drivers/phoenixcontact_modbus.c, drivers/pijuice.c, drivers/powercom.c, drivers/powerman-pdu.c, drivers/powerpanel.c, drivers/powervar_cx_ser.c, drivers/powervar_cx_usb.c, drivers/rhino.c, drivers/richcomm_usb.c, drivers/riello_ser.c, drivers/riello_usb.c, drivers/safenet.c, drivers/skel.c, drivers/sms_ser.c, drivers/snmp-ups.c, drivers/socomec_jbus.c, drivers/solis.c, drivers/tripplite.c, drivers/tripplite_usb.c, drivers/tripplitesu.c, drivers/upscode2.c, drivers/usbhid-ups.c, drivers/ve-direct.c, drivers/victronups.c: drivers/*, docs/new-drivers.txt, UPGRADING.adoc, NEWS.adoc: implement (no-op) upsdrv_tweak_prognames() and bump DRIVER_VERSION numbers [#3101]
  • drivers/main.c, drivers/main.h: drivers/*: introduce upsdrv_tweak_prognames() hook [#3101]
  • common/common.c, drivers/main.c: drivers/main.c: main(): use new sendsignalfnaliases() and sendsignalpidaliases() with prognames[] [#3101]
  • NEWS.adoc, common/common.c, docs/nut.dict, include/common.h: common/common.c, include/common.h, NEWS.adoc: extend with plural sendsignalpidaliases() and sendsignalfnaliases() [#3101]
  • drivers/main.c, drivers/main.h: drivers/main.{c,h}: allow to track several prognames[] for acceptable driver program aliases [#3101]
  • drivers/upsdrvctl.c: help(): fix global vs local arg name
  • NEWS.adoc, common/common.c, docs/nut.dict, include/common.h: common/common.c, include/common.h, NEWS.adoc: extend with plural checkprocnames() and compareprocnames() [#3101]
  • clients/upsmon.c: add comments to methods involved in shutdown to clarify who normally runs as root or not [#3084]

2.34. 2025-09-28 Nick Briggs <nicholas.h.briggs@gmail.com>

  • Makefile.am, clients/Makefile.am, docs/Makefile.am, docs/docinfo.xml.sh.in, docs/man/Makefile.am, scripts/python/Makefile.am, scripts/systemd/nut-server.service.in, scripts/upsdrvsvcctl/nut-driver-enumerator.sh.in: Modifies Makefile.am files and some script ".in" files to use $EGREP The standard Solaris 10/11 "/usr/bin/grep" does not accept the "-E" option. The autotools will set EGREP to the best available tool. Makefile.am that need EGREP functionality should use $(EGREP) rather than directly calling "grep -E". Additionally, scripts that are generated to be installed as part of the package that need EGREP functionality should use the same tool that was located during configuration (assuming no cross-compilation with different EGREP tool availability). Closes #3099

2.35. 2025-09-25 Jim Klimov <jimklimov+nut@gmail.com>

  • clients/upsmon.c: main loop: avoid sleep if FSD signal was raised during the long work cycle [#3084]
  • clients/upsmon.c: user_fsd(), main loop: try to ensure immediate reaction to FSD signals (interrupt a sleep() if needed) [#3084]
  • docs/config-notes.txt: clarify that upsmon exit is now subject to SHUTDOWNEXIT setting [#3084, #2133]
  • NEWS.adoc, clients/upsmon.c, clients/upsmon.h, common/nutconf.cpp, common/nutwriter.cpp, conf/upsmon.conf.sample.in, docs/config-notes.txt, docs/man/upsmon.conf.txt, include/nutconf.hpp: clients/upsmon.h, conf/upsmon.conf.sample.in, etc: Introduced a SHUTDOWN_HOSTSYNC notification message [#3084]
  • conf/upsmon.conf.sample.in, docs/man/upsmon.conf.txt: revise documentation of FINALDELAY [#3084] Notably, both primary and secondary upsmon doshutdown() to handle FSD.
  • clients/upsmon.c: doshutdown(), runparent(): debug-log just before executing shutdowncmd [#3084]
  • clients/upsmon.c: runparent(): when waiting for a child to exit, and we know its PID, react to the end of specifically that process [#3084]
  • clients/upsmon.c: doshutdown(), runparent(): Take note of start timestamp before calling SHUTDOWNCMD [#3084]
  • clients/upsmon.c: doshutdown(): debug-log about waiting for FINALDELAY [#3084]
  • clients/upsmon.c: set_pdflag(): log if POWERDOWNFLAG is not configured or is being written now [#3084]
  • clients/upsmon.c: doshutdown(), runparent(): initialize "time(&start)" always [#3084] Avoid (semi-bogus) warnings from clang that variable 'start' may be uninitialized when used here in difftime() later on.
  • clients/upsmon.c: truly deal with SHUTDOWNEXIT timeout as such, not a countdown [#3084]
  • clients/upsmon.c: revise tracking pid_pipechild when parent exits [#3084]
  • clients/upsmon.c: fix whitespace markup in decls

2.36. 2025-09-24 Jim Klimov <jimklimov+nut@gmail.com>

  • clients/upsmon.c: add interaction between upsmon parent and child if SHUTDOWNEXIT is non-trivial [#3084]
  • clients/upsmon.c: revise comments and log messages in forceshutdown(), doshutdown(), start_pipe() [#3084]
  • clients/upsmon.c: start_pipe(), notify(): revise parent/child logging around the fork() [#3084]
  • clients/upsmon.c, clients/upssched.c, drivers/upsdrvctl.c: call first setproctag() after setting up nut_debug_level [#3084]
  • common/common.c, include/common.h: refactor and optimize getprocname(getpid()) calls with caching getmyprocname() and getmyprocbasename() [#3084]
  • common/common.c, include/common.h, clients/upsmon.c, clients/upssched.c, drivers/upsdrvctl.c: move proctag_cleanup() into common code and auto-register during first use of setproctag() [#3084]
  • drivers/upsdrvctl.c, NEWS.adoc: introduce logging of self-assigned forked process tags [#3084]
  • clients/upssched.c, NEWS.adoc: introduce logging of self-assigned forked process tags [#3084]
  • clients/upsmon.c: improve debugging messages of forceshutdown() [#3084]
  • clients/upsmon.c, NEWS.adoc: introduce logging of self-assigned forked process tags [#3084]
  • common/common.c, include/common.h, NEWS.adoc, docs/nut.dict: introduce logging of self-assigned forked process tags [#3084]

2.37. 2025-09-23 Jim Klimov <jimklimov+nut@gmail.com>

  • ci_build.sh: honour CI_CCACHE_USE=no more diligently
  • NEWS.adoc, clients/upssched.c, conf/upssched.conf.sample.in, docs/man/upssched.conf.txt: clients/upssched.c: revise CANCEL-TIMER, introduce CANCEL-TIMER-MATCHED [#3097]
  • scripts/misc/notifyme-debug: fix shell typo
  • clients/upssched.c: fix START-TIMER-SHARED [#3097]
  • clients/upssched.c: revise logging of timer events [#3097]

2.38. 2025-09-22 Jim Klimov <jimklimov+nut@gmail.com>

  • clients/upssched.c: start_timer(): revise START-TIMER-SHARED behavior [#3097]
  • clients/upssched.c: fix CI suggestions [#3097]
  • clients/upssched.c: log-trace through, and fix, removetimers() and connection loss due to a recent bug there [#3097]
  • clients/upssched.c: send_to_one(): improve debugging [#3097]
  • clients/upssched.c: collect_string(): fix the iteration logic [#3097]
  • clients/upssched.c, docs/man/upssched.txt, NEWS.adoc: introduce upssched -l mode [#3097]
  • docs/man/upssched.conf.txt: PIPEFN: chain the paragraphs of one description (indent them correctly) [#3097]
  • NEWS.adoc, clients/upssched.c, conf/upssched.conf.sample.in, docs/man/upssched.conf.txt, tests/NIT/upssched.conf.in: clients/upssched.c, conf/upssched.conf.sample.in, docs/man/upssched.conf.txt, NEWS.adoc: introduce support for DEBUG_MIN in upssched.conf [#3097]
  • clients/upssched.c: update © header with major contributors
  • clients/upssched.c: in messages that refer to upsmon, append its man page section
  • clients/upssched.c, NEWS.adoc, conf/upssched.conf.sample.in, docs/man/upssched.conf.txt: let timers pass forward the UPSNAME and NOTIFYTYPE again - now with relevant values; introduce START-TIMER-SHARED [#3092, #3097]

2.39. 2025-09-21 Jim Klimov <jimklimov+nut@gmail.com>

  • clients/upssched.c: update comments [#3092]
  • clients/upssched.c: rename global upsname ⇒ ups_name to be on par with global notify_type [#3092]
  • docs/man/nut.txt, docs/nut.dict: describe NUT layer 3.5 - role of the drivers during shutdown
  • docs/man/nut.txt: suggest more packaged user-names for NUT daemons
  • NEWS.adoc, drivers/nutdrv_qx.c, drivers/nutdrv_qx.h: drivers/nutdrv_qx.{c,h}, NEWS.adoc: define an internal QX_FLAG_MAPPING_HANDLED, introduce analyze_mapping_usage() method [#3095]
  • drivers/nutdrv_qx.c: fix whitespace
  • drivers/usbhid-ups.c: analyze_mapping_usage(): rephrase last suggestion with also checking and building recent NUT code [#3082, #3095]

2.40. 2025-09-19 Jim Klimov <jimklimov+nut@gmail.com>

  • drivers/snmp-ups.c, drivers/usbhid-ups.c: drivers/snmp-ups.c: account SU_FLAG_MAPPING_HANDLED and do analyze_mapping_usage() [#3095]
  • NEWS.adoc, drivers/snmp-ups.h: drivers/snmp-ups.{c,h}, NEWS.adoc: define an internal SU_FLAG_MAPPING_HANDLED [#3095]
  • drivers/snmp-ups.c: fix markup
  • drivers/snmp-ups.h: modernize a few comments
  • drivers/snmp-ups.c: suggest in log how to improve a driver where only IETF auto-matched [#3095]
  • drivers/hidtypes.h: update a comment [#3082]
  • drivers/usbhid-ups.c: fix whitespace
  • drivers/usbhid-ups.c: offload analyze_mapping_usage() to a method [#3082, #3095] Note the activity is now still limited to when debug logging is enabled.

2.41. 2025-09-18 Jim Klimov <jimklimov+nut@gmail.com>

  • drivers/usbhid-ups.c, NEWS.adoc: suggest in log how to improve a driver with too few mappings defined/used [#3082]
  • NEWS.adoc, docs/ci-farm-do-setup.adoc, docs/ci-farm-lxc-setup.txt, docs/config-notes.txt, docs/config-prereqs.txt, docs/configure.txt, docs/daisychain.txt, docs/design.txt, docs/documentation.txt, docs/download.txt, docs/features.txt, docs/hid-subdrivers.txt, docs/net-protocol.txt, docs/new-clients.txt, docs/new-drivers.txt, docs/nut-names.txt, docs/nut-versioning.adoc, docs/nutdrv_qx-subdrivers.txt, docs/outlets.txt, docs/scheduling.txt, docs/security.txt, docs/snmp-subdrivers.txt, docs/sock-protocol.txt, docs/support.txt: docs/*.txt: add asciidoc comments with links to nut-website rendered contents of most interesting pages
  • docs/maintainer-guide.txt: avoid pushing final release tags to upstream more than once, really!
  • scripts/Makefile.am: do not EXTRA_DIST the generated scripts/Windows/Makefile — the .in template suffices Thanks to @gdt for the heads-up.

2.42. 2025-09-12 Jim Klimov <jimklimov+nut@gmail.com>

  • clients/upsmon.c: doshutdown(): log more loudly that exit_flag is raised, so shutdownexitdelay does not apply currently [#3084]

2.43. 2025-09-11 Jim Klimov <jimklimov+nut@gmail.com>

  • clients/upsmon.c, NEWS.adoc: doshutdown(): collapse non-zero shutdownexitdelay handling into one clause, and ping the data server(s) while in the loop [#3084]
  • clients/upsmon.c: more logging about ways to exit() the program, and why/when it happened [#3084]

2.44. 2025-09-10 Jim Klimov <jimklimov+nut@gmail.com>

  • scripts/python/module/Makefile.am: emit log note that .pypi-dist-pip-wheel goal does not produce sdist archives [#3056]
  • scripts/python/module/Makefile.am: fix typo in comment
  • NEWS.adoc: fixed PyPI publication to include sdist tarball [#3056]
  • .github/workflows/PyNUTClient.yml: fix shell markup [#3056]
  • .github/workflows/PyNUTClient.yml: actually install "setuptools" module with "pip" [#3056]
  • .github/workflows/PyNUTClient.yml: allow manually running the GHA task

2.45. 2025-09-08 Jim Klimov <jimklimov+nut@gmail.com>

  • docs/hid-subdrivers.txt, docs/nut.dict: docs/hid-subdrivers.txt: updating existing drivers: suggest newly logged discrepancies of "seen vs. used" data [#3082]
  • drivers/nutdrv_atcl_usb.c: when suggesting other drivers and configs, refer to build-aware man page sections
  • docs/hid-subdrivers.txt: fix a bit of markup
  • clients/upslog.c, NEWS.adoc: update help() and failure messages to suggest -m *,-
  • drivers/usbhid-ups.c: process_boolean_info(): handle OB=!OL and OL=!OB here (when the bit is being set) [#3080]
  • drivers/usbhid-ups.c: upsdrv_initups(): upsdebugx() at verbosity 0 (always) if there are too few mappings known or used via USB HID [#3082]
  • drivers/apc-hid.c, NEWS.adoc, scripts/upower/95-upower-hid.hwdb: declare support for APC 0x051d:0x0005 as a USB HID device [#3047]
  • drivers/nutdrv_atcl_usb.c: upsdrv_initups() failure mode: suggest using nutdrv_qx(8) or blazer_usb(8) driver instead [#1021, #2152 follow-up]
  • data/driver.list.in: add Voltronic Power USB ID 0665:5161 as nutdrv_qx supported (per driver source comments)
  • data/driver.list.in: add "Various" USB interface chip names or IDs 0665:5161 and 0001:0000 as nutdrv_qx or rarely nutdrv_atcl_usb supported
  • data/driver.list.in: add Salicru SPS 500 ONE USB ID 0665:5161 as nutdrv_qx supported [#3079]
  • data/driver.list.in: add Belkin USB ID 0665:5161 as nutdrv_qx supported (per driver source comments)
  • drivers/usbhid-ups.c: upsdrv_initups(): fix variable name for the snprintf() return value [#3083]
  • drivers/usbhid-ups.c: upsdrv_initups(): also report how many hid2nut mappings are known vs. how many were used using USB HID [#3082]
  • drivers/usbhid-ups.c: upsdrv_initups(): generalize the report of unused report descriptor entries to "completely unused" vs. "partially unused" (e.g. Feature vs Input) [#3082]
  • drivers/usbhid-ups.c, drivers/hidtypes.h, NEWS.adoc: check if the subdriver code (mappings) and the device report sit together well [#3082]
  • drivers/usbhid-ups.c: callback(): update logged message that not only Manufacturer, but possibly an explicit Model, may be not-supported
  • NEWS.adoc: update about usbhid-ups suggestion to iterate "subdriver" values
  • drivers/usbhid-ups.c: upsdrv_initups(): check that if no ups_status bit was set, suggest that wrong "subdriver" is used then [#3080, #3061, #2058]
  • drivers/usbhid-ups.c: callback(): add log messages to stress that the dump of Report Descriptor actually seen, and its later hid_ups_walk() with a particular subdriver, may not match up well [#3061]
  • drivers/usbhid-ups.c: upsdrv_initups(): add log messages to help trace logical progress through the code [#3061]
  • drivers/usbhid-ups.c: possibly_supported(): suggest iterating "subdriver" values [#2058]
  • NEWS.adoc, drivers/usbhid-ups.c, drivers/usbhid-ups.h: drivers/usbhid-ups.c: do not assume that "!online"=="offline" [#3080]
  • drivers/usbhid-ups.c: fix indentation (cosmetic)
  • drivers/usbhid-ups.c: ups_status_set(): revise code markup/style

2.46. 2025-09-07 Jim Klimov <jimklimov+nut@gmail.com>

  • drivers/mge-hid.c, NEWS.adoc: Improved support for Eaton 5S1500LCD (US version). [#2380]
  • NEWS.adoc, docs/config-prereqs.txt, docs/configure.txt, docs/developers.txt, docs/download.txt, docs/maintainer-guide.txt, docs/man/apcsmart.txt, docs/man/belkin.txt, docs/man/genericups.txt, docs/man/mge-shut.txt, docs/man/upsdrvsvcctl.txt, docs/man/upsmon.conf.txt, docs/man/upssched.conf.txt, docs/man/upsset.cgi.txt, docs/man/usbhid-ups.txt, docs/new-drivers.txt, docs/outlets.txt, docs/packager-guide.txt, docs/scheduling.txt, scripts/Windows/README.adoc, scripts/external_apis/enphase/README.adoc: Reword multiple docs to avoid admonition blocks with invalid sentences
  • docs/Makefile.am: spellcheck: help avoid admonition blocks with invalid sentences (after rendering as a box)
  • docs/download.txt: revise markup for Windows downloads
  • docs/download.txt: revise info about/from Repology
  • docs/download.txt: revise note about official releases
  • docs/download.txt: revise part about source archives from github

2.47. 2025-09-06 desertwitch <24509509+desertwitch@users.noreply.github.com>

  • drivers/nutdrv_qx_megatec.c: trim battery.runtime variable

2.48. 2025-09-05 Jim Klimov <jimklimov+nut@gmail.com>

  • .github/workflows/codeql.yml: fix syntax for codeql queries

2.49. 2025-09-04 Jim Klimov <jimklimov+nut@gmail.com>

  • .github/workflows/codeql.yml: Revert ".github/workflows/codeql.yml: use modern "language" ID "c-cpp"" This reverts commit 972358ec7663007419f0b1926d30f9f5a494d910.
  • .github/workflows/codeql.yml: enable ccache per scenario, follow experience from wmnut#24
  • .github/workflows/codeql.yml: enable more codeql queries
  • .github/workflows/codeql.yml: relocate comments, drop dead code
  • .github/workflows/codeql.yml: avoid man-db update in APT actions
  • .github/workflows/codeql.yml: report the location and version of compiler used
  • .github/workflows/codeql.yml: add a way to vary matrix.build-mode for codeql
  • .github/workflows/codeql.yml: only init CodeQL just before the actual build, not before other filesystem changes
  • .github/workflows/codeql.yml: use modern "language" ID "c-cpp" "c" and "cpp" are older names, now aliases to this one
  • .github/workflows/codeql.yml: revise markup and comments of the matrix definition
  • .github/workflows/codeql.yml: Allow manually running the action, e.g. if disabled after some quietness in the source

2.50. 2025-09-03 Laurent Bigonville <bigon@bigon.be>

  • docs/Makefile.am: Fix installation of the pdf files

2.51. 2025-09-03 Jim Klimov <jimklimov+nut@gmail.com>

  • docs/developers.txt: clarify use of "void" argument lists

2.52. 2025-09-02 Jim Klimov <jimklimov+nut@gmail.com>

  • tools/nut-usbinfo.pl: update comment
  • tools/nut-usbinfo.pl: use binmode for written files to have same markup regardless of builder OS
  • ci_build.sh: when reporting host envvars, use backslashes to facilitate copy-paste reproduction of CI builds
  • ci_build.sh: when reporting CONFIGURING NUT, use backslashes to facilitate copy-paste reproduction of CI builds
  • configure.ac, docs/configure.txt, m4/nut_check_python.m4, NEWS.adoc: allow to configure Python module install location more generally [#3062]
  • scripts/python/app/NUT-Monitor-py2gtk2.in, scripts/python/app/NUT-Monitor-py3qt5.in, scripts/python/app/NUT-Monitor-py3qt6.in: scripts/python/app/NUT-Monitor-py*.in: try to honour a customized PyNUT(Client) module path [#3062]

2.53. 2025-09-02 Hector Martin <marcan@marcan.st>

  • drivers/apc_modbus.c: apc_modbus: Fix invalid memory access for USB vendor/product/serial

2.54. 2025-08-31 Jim Klimov <jimklimov+nut@gmail.com>

  • configure.ac, docs/configure.txt, m4/nut_check_python.m4, NEWS.adoc: allow to configure PyNUT(Client) install location [#3062]

2.55. 2025-08-09 Colin Dean <colindean@users.noreply.github.com>

  • docs/download.txt, docs/nut.dict: Include macOS with Mac OS X Apple shortened the name to "OS X" in 2011 and then changed it to "macOS" in 2016 to align with the branding of Apple’s other operating systems. https://en.wikipedia.org/w/index.php?title=MacOS&oldid=1304698699
  • docs/download.txt: Update download.txt with link to Homebrew formula for macOS nut has been in Homebrew since 2014.

2.56. 2025-08-08 Jim Klimov <jimklimov+nut@gmail.com>

  • NEWS.adoc, UPGRADING.adoc: prepare for v2.8.5.x iterations
  • NEWS.adoc, UPGRADING.adoc, docs/docinfo.xml.in: Revert "NEWS.adoc, UPGRADING.adoc, docs/docinfo.xml.in: finalize text before NUT v2.8.4 release" This reverts commit 8f14140bbc395baa108bd06a9f664bd0a6f00bc8.
  • tools/gitlog2version.sh: for development, set fallback NUT_VERSION_DEFAULT=2.8.4.1
  • configure.ac: for now do not require (pre-)release tagged commits to build changelog by default - keep doing it on systems where we can though
  • configure.ac: rephrase the message about --enable-docs-changelog [#3019, #3053]
  • ci_build.sh: limit default "configure --enable-docs-changelog=no" for CI builds on systems where CANBUILD_DOCS_ALL!=yes
  • ci_build.sh: add support for WITH_CHANGELOG envvar to pass down as configure --enable-docs-changelog=…
  • .github/workflows/codeql.yml: configure --disable-docs-changelog in CI builds
  • configure.ac: for (pre-)release builds we default nut_enable_docs_changelog auto⇒yes - do so loudly, and default --with-doc man⇒auto as well for all builds to have a chance to try this
  • docs/maintainer-guide.txt: update the guide
  • docs/maintainer-guide.txt: commit that in tools/gitlog2version.sh: for development, set fallback NUT_VERSION_DEFAULT=X.Y.Z.1
  • docs/maintainer-guide.txt: remind to double-check that release NUT_VERSION_DEFAULT in tools/gitlog2version.sh must be a triplet

2.57. 2025-07-30 Jim Klimov <jimklimov+nut@gmail.com>

  • docs/qa-guide.adoc: mention OBS [#1209]
  • obs/README.adoc, obs/Makefile.am, Makefile.am, configure.ac: document the "obs" directory and cover it with scripting [#1209]
  • docs/qa-guide.adoc: move CodeQL up (alphabetically, and before semi-defunct Travis)
  • docs/nut-versioning.adoc, docs/developers.txt: rename to "NUT Semantic Versioning" consistently

2.58. 2024-01-31 Charles Lepple <clepple+nut@gmail.com>

  • drivers/tripplite_usb.c: add battery.charge for Protocol 3017 Reference: #2258

2.59. 2024-01-25 Charles Lepple <clepple+nut@gmail.com>

  • drivers/tripplite_usb.c: Protocol 3017 adjustments Reference: #2258 SMX1200XLHG is 230V / 50 Hz

2.60. 2023-02-28 Jim Klimov <jimklimov+nut@gmail.com>

  • common/str.c: str_ends_with(): update origin attribution

2.61. 2022-02-10 Jim Klimov <jim@jimklimov.com>

  • obs/debian.rules: packaging/debian/rules: define a systemdtmpfilesdir
  • obs/debian.rules: packaging/debian/rules: report PKG_CONFIG_PATH default
  • obs/debian.control: packaging/debian/control: update "libmodbus5" dependency name for Debian 11

2.62. 2022-02-09 Jim Klimov <jim@jimklimov.com>

  • obs/debian.changelog, obs/debian.control, obs/debian.nut-server.install, obs/debian.nut-server.manpages, obs/nut-linux-i2c.install, obs/nut-linux-i2c.manpages, obs/nut-modbus.install, obs/nut-modbus.manpages, obs/nut.dsc: packaging/debian: update for nut-modbus and nut-linux-i2c driver packages

2.63. 2021-08-13 Clément <perrettecl@users.noreply.github.com>

  • obs/nut.dsc: Update nut.dsc

2.64. 2021-08-12 Clément <perrettecl@users.noreply.github.com>

  • obs/debian.control: Update debian.control

2.65. 2021-05-18 Clappier, Eric <EricClappier@Eaton.com>

  • obs/debian.libnutclientstub-dev.install: Remove lib static for libnutclientstub dev install
  • obs/debian.rules: Fix issue in debian rules for libnutclientstub

2.66. 2021-05-17 Clément <clementperrette@eaton.com>

  • obs/debian.control, obs/debian.libnutclientstub-dev.install, obs/debian.libnutclientstub1.install, obs/debian.libnutclientstub1.lintian-overrides: Add new package for nut client stub

2.67. 2021-05-04 Jim Klimov <jim@jimklimov.com>

  • obs/pkgsrc.obs: pkgsrc.obs: tell OBS pusher to append gitdate to version (first line must be from a specific range of values)
  • obs/pkgsrc.obs: pkgsrc.obs: tell OBS pusher to append gitdate to version

2.68. 2021-02-10 Jim Klimov <jim@jimklimov.com>

  • obs/debian.nut-client.links, obs/debian.rules: obs packaging: avoid warnings from systemd-sysv about legacy init scripts without a service unit

2.69. 2021-01-21 Jim Klimov <jim@jimklimov.com>

  • obs/debian.control, obs/nut.dsc: debian.rules, nut.dsc: rather ask for dh-python | dh-python2 | dh-python3 \| dh-pypy
  • obs/debian.control, obs/nut.dsc: debian.rules, nut.dsc: ask for dh_python2 | dh_python3 \| dh_pypy
  • obs/debian.rules: debian.rules: clarify that any python 2/3 is okay, but we need an interpreter called "python" to be generic
  • obs/debian.control: debian.control: clarify that any python 2/3 is okay, but we need an interpreter called "python" to be generic
  • obs/nut.dsc: nut.dsc: clarify that any python 2/3 is okay, but we need an interpreter called "python" to be generic

2.70. 2021-01-20 Jim Klimov <jim@jimklimov.com>

  • obs/debian.control, obs/nut.dsc: FTY OBS packaging: require libsystemd-dev in the build root (to use pkgconfig systemd queries)

2.71. 2020-03-14 Jim Klimov <jim@jimklimov.com>

  • obs/debian.nut-monitor.install: Fix formal 42ity packaging for nut-monitor.png icon (recent master branch added different resolutions)

2.72. 2019-12-06 Jim Klimov <jim@jimklimov.com>

  • obs/debian.rules: debian.rules : fix away debian. prefix for *.in templates
  • obs/debian.Makefile.in, …n.nut-client.init ⇒ debian.nut-client.init.in}, …mmon.postinst ⇒ debian.nut-common.postinst.in}, …nut-common.prerm ⇒ debian.nut-common.prerm.in}, obs/debian.nut-common.tmpfiles, obs/debian.nut-common.tmpfiles.in, …n.nut-server.init ⇒ debian.nut-server.init.in}, …nut-server.prerm ⇒ debian.nut-server.prerm.in}, obs/debian.rules: Introduce "runbasedir" in debian packaging on OBS to use /run or /var/run as appropriate

2.73. 2019-04-12 Jim Klimov <jim@jimklimov.com>

  • obs/debian.control, obs/nut.dsc: Debian packaging: explicitly request libssl*-dev so OBS is not confused for Debian 9 options
  • obs/nut.spec: nut.spec : do not fail making build dir trees
  • obs/debian.control, obs/nut.dsc: Debian packaging: explicitly request libjpeg-dev so OBS is not confused for Debian 9 options

2.74. 2019-04-03 Jim Klimov <jim@jimklimov.com>

  • obs/debian.rules: debian.rules : update SO_MAJOR_LIBUPSCLIENT for 42ity packaging

2.75. 2019-02-20 Jim Klimov <jim@jimklimov.com>

  • obs/debian.rules: debian.rules : make sure wanted SONAMES exist (numbers remained unchanged)
  • obs/debian.control, obs/debian.libnutclient0.lintian-overrides, …bnutclient0.install ⇒ debian.libnutclient1.install}, obs/debian.libnutclient1.lintian-overrides, obs/debian.rules, obs/nut.dsc: Problem: libnutclient not found in consumer packaged builds Solution: update the hardcoded pathnames in recipes, leave some comments for improvement

2.76. 2018-12-06 Jim Klimov <jim@jimklimov.com>

  • obs/debian.control: debian.control : nut-ipmi should have run-time deps on IPMI libs
  • obs/debian.control: debian.control : rephrase nut-server description

2.77. 2018-10-05 Jim Klimov <jim@jimklimov.com>

  • obs/debian.nut-server.postinst: debian.nut-server.postinst : REPORT_RESTART_42=no when reconfiguring
  • obs/debian.nut-server.postinst: nut-driver-enumerator : use --reconfigure to remake units from scratch in Debian postinstall

2.78. 2018-09-28 Jim Klimov <jim@jimklimov.com>

  • obs/debian.nut-client.postinst, obs/debian.nut-common.postinst, obs/debian.nut-server.postinst: nut-(client|server\|common).postinst : skip DEBHELPER in our case

2.79. 2018-09-27 Jim Klimov <jim@jimklimov.com>

  • obs/debian.control: debian.control : "nut-server" should have no business requiring "nut-client"
  • obs/debian.control: debian.control : have "nut" metapackage explicitly depend on nut-common to pre-create things
  • obs/debian.control: debian.control : new nut-common has no opinion about old nut-hal-drivers
  • obs/debian.nut-client.postinst, obs/debian.nut-common.postinst, obs/debian.nut-server.postinst: debian.nut-*.post/pre-inst/rm : do not fail package installation if could not start services
  • obs/debian.nut-client.postinst, obs/debian.nut-client.prerm, obs/debian.nut-common.postinst, obs/debian.nut-common.prerm, obs/debian.nut-server.postinst, obs/debian.nut-server.prerm: debian.nut-*.post/pre-inst/rm : call /bin/systemctl only on systems where it is available, and do not block on attempts to start the services

2.80. 2018-09-26 Jim Klimov <jim@jimklimov.com>

  • obs/debian.control: debian.control : reference nut-common
  • obs/debian.rules: debian.rules : deliver one nut-common.conf tmpfiles config instead of two same files for client and server
  • obs/debian.control: debian.control : update sub-driver packages to rely on just the nut-server package, not nut metapackage
  • obs/debian.control: debian.control : clarify where packages provide clients for "a local or remote NUT server"
  • obs/debian.nut-client.prerm, obs/debian.nut-common.prerm, obs/debian.nut-server.prerm: Add systemd shutdown of installed units during uninstallation of the packages
  • obs/debian.nut-client.postinst, obs/debian.nut-common.postinst, obs/debian.nut-server.postinst: Add systemd startup of installed units
  • obs/debian.nut-client.postinst, obs/debian.nut-common.postinst, obs/debian.nut-server.postinst: Add systemd registration of installed units
  • obs/debian.control, obs/debian.nut-cgi.postinst, obs/debian.nut-client.postinst, obs/debian.nut-common.install, obs/debian.nut-common.postinst, obs/debian.nut-common.prerm, …-client.tmpfiles ⇒ debian.nut-common.tmpfiles}, obs/debian.nut-server.postinst, obs/debian.nut-server.tmpfiles, obs/debian.rules: Introduce (debian) nut-common package for user account and shared FS objects

2.81. 2018-09-06 Jim Klimov <jim@jimklimov.com>

  • obs/nut.spec: nut.spec : do not use the configure macro
  • obs/nut.spec: nut.spec : do not use the configure macro

2.82. 2018-09-05 Jim Klimov <jim@jimklimov.com>

  • obs/nut.spec: nut.spec : do not redefine (differently) paths set by %configure macro, try to set them directly
  • obs/nut.spec: nut.spec : whitespace
  • obs/nut.spec: nut.spec : remove commented-away references to private OBS patches that are not used anymore

2.83. 2018-09-03 Jim Klimov <jim@jimklimov.com>

  • obs/debian.nut-server.install, obs/nut.spec: nut.spec : fix RPM packaging for OBS

2.84. 2018-01-15 Jim Klimov <jim@jimklimov.com>

  • obs/nut.spec: nut.spec : avoid "nut" vs "nut-drivers-net" conflict over gen-snmp-subdriver.sh

2.85. 2018-01-03 Jim Klimov <jim@jimklimov.com>

  • obs/nut.spec: nut.spec : publish augeas files

2.86. 2018-01-02 Jim Klimov <jim@jimklimov.com>

  • obs/debian.control, obs/debian.rules, obs/nut.dsc: Debian packaging : require pkg-config, and provide some fallbacks if systemd dirs are unknown
  • obs/nut.spec: nut.spec : suse wants a package
  • obs/nut.spec: nut.spec : dist augeas files
  • obs/debian.rules, obs/nut.spec: Packaging : pass the systemd*dir arguments to configure script
  • obs/nut.spec: nut.spec : use proper systemdshutdowndir relevant for current distro/arch
  • obs/nut.spec: nut.spec : fix "bindir" macro to "_bindir"

2.87. 2017-12-31 Jim Klimov <jim@jimklimov.com>

  • obs/debian.rules: debian.rules : avoid re-configuring before "make install" again
  • obs/debian.rules, obs/nut.spec: packaging : use --with-docs=man=dist-auto

2.88. 2017-10-19 Jim Klimov <jim@jimklimov.com>

  • obs/debian.compat, obs/debian.rules: Use DH_COMPAT=10 to enable parallel build support by default

2.89. 2017-10-13 Jim Klimov <jim@jimklimov.com>

  • obs/debian.rules: debian.rules : enable parallelized packaging

2.90. 2017-04-12 Jim Klimov <jim@jimklimov.com>

  • obs/debian.nut-server.install: Drop remaining references to oldmge-shut

2.91. 2016-10-06 Arnaud Quette <arnaud.quette@free.fr>

  • obs/nut.spec: Distribute gen-snmp-subdriver.sh with nut-snmp for RPM
  • obs/debian.nut-snmp.install, obs/debian.rules: Distribute gen-snmp-subdriver.sh with nut-snmp

2.92. 2016-09-22 Jim Klimov <jim@jimklimov.com>

  • obs/debian.rules: debian.rules : skip even the manpages if the host cannot build them
  • obs/debian.rules: debian.rules : whitespace fixes
  • obs/debian.rules, obs/nut.dsc, obs/nut.spec: nut.dsc / nut.spec : do not request rebuild and revalidation of DMF files - they were tested in Jenkins NUT-master job (remove build dependency on pycparser and speed up the build)
  • obs/nut.spec: nut.spec : try to fix inability to detect LUA on some RPM buildhosts

2.93. 2016-09-14 Jim Klimov <jim@jimklimov.com>

  • obs/debian.libnutscan1.install, obs/debian.nut-snmp.install: debian.nut-snmp.install debian.libnutscan1.install : fix conflict for dmfnutscan resource dirs delivered by both packages
  • obs/nut.spec: nut.spec : fix mixed spaces vs tabs
  • obs/debian.nut-snmp.install, obs/nut.spec: RPM/DEB : deliver the sorted symlinks in packages

2.94. 2016-08-19 Jim Klimov <jim@jimklimov.com>

  • obs/debian.control, obs/nut.dsc, obs/nut.spec: OBS: Try to rectify package numbering and dependencies of sub-packages for Debian
  • obs/nut.dsc, obs/nut.spec: Build Requires python-pycparser
  • obs/nut.spec: OBS nut.spec : make manpages optional
  • obs/nut.spec: OBS nut.spec : fix LUA requirement at == 5.1 (not >= 5.1)
  • obs/nut.spec: nut.spec : make asciidoc a common dependency
  • obs/debian.rules, obs/nut.spec: OBS : try to call autogen.sh before configuring sources
  • obs/nut.spec: OBS nut.spec : use common tarball filename pattern
  • obs/nut.dsc: OBS nut.dsc : comment away DEBTRANSFORM of teh tarball
  • obs/debian.nut-snmp.install, obs/nut.spec: Update OBS packaging to deliver bin/nut-scanner-reindex-dmfsnmp
  • obs/debian.nut-snmp.install, obs/debian.rules, obs/nut.spec: Update packaging files to install DMF data files
  • obs/control: Seems OBS mkpac.sh wants a file named "control" in any debian-pkg directory type (obs/ too)

2.95. 2016-08-18 Jim Klimov <jim@jimklimov.com>

  • obs/debian.Makefile.am, obs/debian.Makefile.in, obs/debian.NEWS, obs/debian.changelog, obs/debian.compat, obs/debian.control, obs/debian.copyright, obs/debian.description.subst, obs/debian.gbp.conf, obs/debian.hotplug, obs/debian.libnutclient-dev.install, obs/debian.libnutclient-dev.manpages, obs/debian.libnutclient0.install, obs/debian.libnutclient0.lintian-overrides, obs/debian.libnutscan-dev.install, obs/debian.libnutscan1.install, obs/debian.libups-nut-perl.install, obs/debian.libupsclient-dev.install, obs/debian.libupsclient-dev.manpages, obs/debian.libupsclient4.install, obs/debian.nut-cgi.README.Debian, obs/debian.nut-cgi.docs, obs/debian.nut-cgi.install, obs/debian.nut-cgi.manpages, obs/debian.nut-cgi.postinst, obs/debian.nut-cgi.postrm, obs/debian.nut-client.init, obs/debian.nut-client.install, obs/debian.nut-client.links, obs/debian.nut-client.lintian-overrides, obs/debian.nut-client.maintscript, obs/debian.nut-client.manpages, obs/debian.nut-client.postinst, obs/debian.nut-client.preinst, obs/debian.nut-client.tmpfiles, obs/debian.nut-doc.doc-base.nut-developer-guide, obs/debian.nut-doc.doc-base.nut-faq, obs/debian.nut-doc.doc-base.nut-packager-guide, obs/debian.nut-doc.doc-base.nut-user-manual, obs/debian.nut-doc.install, obs/debian.nut-ipmi.install, obs/debian.nut-ipmi.manpages, obs/debian.nut-monitor.install, obs/debian.nut-monitor.menu, obs/debian.nut-monitor.xpm, obs/debian.nut-powerman-pdu.install, obs/debian.nut-powerman-pdu.manpages, obs/debian.nut-server.dirs, obs/debian.nut-server.init, obs/debian.nut-server.install, obs/debian.nut-server.manpages, obs/debian.nut-server.postinst, obs/debian.nut-server.postrm, obs/debian.nut-server.preinst, obs/debian.nut-server.prerm, obs/debian.nut-server.tmpfiles, obs/debian.nut-snmp.docs, obs/debian.nut-snmp.install, obs/debian.nut-snmp.manpages, obs/debian.nut-xml.install, obs/debian.nut-xml.manpages, obs/debian.nut.README.Debian, obs/debian.nut.TODO.Debian, obs/debian.nut.docs, obs/debian.python-nut.install, obs/debian.rules, obs/debian.series, obs/debian.watch, obs/nut.changes, obs/nut.dsc, obs/nut.spec: Added packaging metadata used by OBS as of 2016-08-18 (except debian.series)