From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail02.haj.ipfire.org (localhost [IPv6:::1]) by mail02.haj.ipfire.org (Postfix) with ESMTP id 4cQXPp5Sz6z32Vl for ; Mon, 15 Sep 2025 17:41:02 +0000 (UTC) Received: from mail01.ipfire.org (mail01.haj.ipfire.org [172.28.1.202]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519) (Client CN "mail01.haj.ipfire.org", Issuer "R13" (verified OK)) by mail02.haj.ipfire.org (Postfix) with ESMTPS id 4cQXPl2KTZz2xMD for ; Mon, 15 Sep 2025 17:40:59 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mail01.ipfire.org (Postfix) with ESMTPSA id 4cQXPk2pj6z3pD; Mon, 15 Sep 2025 17:40:58 +0000 (UTC) DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=ipfire.org; s=202003ed25519; t=1757958058; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=Y10oQ1wer2350XS8bmyMI5zVO8ukXdmU62tpW1U8yxE=; b=eHNYiCXkzYTnP/gFjitrz10miOI7/kt++81d5NE3bOLxfd0d6L8a/KQ4jHPg+RSh9oD+jy qy3WbZKiivuiCWBg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ipfire.org; s=202003rsa; t=1757958058; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=Y10oQ1wer2350XS8bmyMI5zVO8ukXdmU62tpW1U8yxE=; b=GoMsQGpMTSfTzB5e1PxYTd9kqYmjuZQOOqtL1RhKp8H5HEqALPuHwd78cNxrfKbDkB9for rqvcIE7s3chZcdOrw2e0ROEgzXtW0lZsgsq3ZveSk/CzZeHFcvhofRm35OPD1FsORx1M+K r09GtnKUcRZ8AUhmAW09WPjL60ZAo1aoVByZwZe/P295zg/ysfU85B5uFVj2P/1P9fQyKR +zlAhfhtcMD4m4FUb0n2GN8lmgZ/vAxFKkvVW5tU0OR/gMQmOWziJ5G4i+FQVCSyMdWCLg r/z4mKSWEtXLe8hbLf7w/KrQUnP/gIXvGKdSPZzeCDDDOww4gd1xA9pjwesg0A== From: Adolf Belka To: development@lists.ipfire.org Cc: Adolf Belka Subject: [PATCH 1/2] nut: Update to version 2.8.4 Date: Mon, 15 Sep 2025 19:40:54 +0200 Message-ID: <20250915174055.2688465-1-adolf.belka@ipfire.org> Precedence: list List-Id: List-Subscribe: , List-Unsubscribe: , List-Post: List-Help: Sender: Mail-Followup-To: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit - Update from version 2.8.3 to 2.8.4 - Update of rootfile - sobump requires shipping of collectd - Changelog 2.8.4 - Bug fixes for fallout possible due to "fightwarn" effort in 2.8.0+: * In `usbhid-ups` sources, introduced optional `HU_FLAG_PARAM_REQUIRED` for `setvar()` or `instcmd()` handling (and a `HU_TYPE_CMD_PARAM_REQUIRED` shortcut) for setting in the mapping table flags, to specify variables or instant commands that require an argument (either from caller or a non-`NULL` default in the run-time table after device data discovery); if the flag is not set, a zero value is assumed. Incomplete code was a regression of NUT v2.8.3 causing some instant commands to fail. [#2860, #2955] - Fix fallout of development in NUT v2.8.0 and/or v2.8.1 and/or v2.8.2 and/or v2.8.3: * Fixed a regression in recipes of NUT v2.8.3 release (as compared to v2.8.2), where `configure --with-docs=all` no longer failed a run of the `configure` script when some of the required rendering tools were not in fact available. [#2842, fixed by #2921] * Some recipe improvements in earlier releases led to `make check` always running a spelling check (if tools are available), even if the explicit `configure --disable-spellcheck` option was used. Now it would not run if disabled (e.g. to speed up CI builds in scenarios that focus on other aspects of the code base), although developers can still use the explicit `make spellcheck*` goals, when tools are in fact available. [#2973] * A change in `Makefile.am` recipes to evaluate some driver names in the `DRIVERLIST` variables inspected by `configure` script, rather than having all their names hard-coded like before, led to inability to `configure --with-drivers=dummy-ups`. [#2825, #2927, fixed by PR #2929] * A problem noted with `upsdrvquery` (since NUT v2.8.1) message logging at high debug verbosity levels (5+) with very large blocks of content has exposed a deficiency in variable-argument handling, and specifically adaptive resizing of the output buffer or truncation of logged inputs (which is something NUT code tried to do since the beginning of time), and could lead to "segmentation fault" crashes on some platforms. [issue #2948, PR #2963] * Documentation build recipes overly zealously pre-processed source files, which was not applicable for each and every document type we have (e.g. binary images for illustrations); this caused grief with some toolkits. [issue #2989] - common code: * Revised common `writepid()` to use `altpidpath()` as location for the PID file creation, if the default `rootpidpath()` is not accessible (e.g. daemon was not initially started as `root`). Likewise updated short PID file based signal sending to consult both locations. [#1717] * Linux may report a `/proc/X/exe` symlink with an embedded "(deleted)" suffix, if the binary was removed (or replaced) since the running process started. This confused our code which verifies that when it is sending a signal to a PID, that PID does reflect the expected NUT program. [#3021] * Refactored NUT "common" sources to reference `nut_version.h` macros from a smaller C source file, to minimize the compilation unit size impacted by development iterations. [issue #2097] * Common code hardening: added sanity-checking for dynamically constructed or selected formatting strings with variable-argument list methods (typically used with log printing, `dstate` setting, etc.) [#2450, #3016] - Warn if `%n` formatting string is used -- it is deprecated in some newer distros due to security concerns. * Refactored repetitive implementations of `inet_ntopSS()` (nee `inet_ntopW()` in `upsd.c`) and `inet_ntopAI()` methods into `common.c`, so now they can be re-used or expanded more easily. [#2916] - `upsd` updates: * Fixed two bugs about printing the "further (ignored) addresses resolved for this name": the way to extract IP address string was not portable and misfired on some platforms, and the way to print had a theoretical potential for buffer overflow. [#2915] * Print arguments of a processed command into the debug log, to help track down what unsupported queries are about, etc. (but only endeavor to spend time, RAM and CPU on this if debug verbosity is high enough). Hide the sensitive commands' parameters unless verbosity is unusually high. [#3023] - `upsdrvquery` API updates [#2969]: * Added `upsdrvquery_oneshot_conn()` for issuing one-shot queries using an existing `udq_pipe_conn_t *` connection. The caller manages the connection's lifecycle, and the function includes a best-effort call to restore broadcast mode after the query to return the connection as it was. * Added `upsdrvquery_oneshot_sockfn()` for initiating one-shot queries using a socket filename. Shares internal logic with the existing `upsdrvquery_oneshot()`, which uses a UPS and driver name, respectively. * Introduced `upsdrvquery_restore_broadcast()` to explicitly restore broadcast mode (`BROADCAST 1`) on a connection, helping return it to a consistent and talkative state. * Revised connection ownership handling: internal functions like `upsdrvquery_prepare()` and `upsdrvquery_request()` no longer close connections they do not own. Responsibility for cleanup is now delegated to the caller to avoid unintended side effects and better align with expected usage patterns. - common driver code: * Update reports of failed socket file creation, to help troubleshooting some error cases in the field. [#2959] * Removed workarounds trying to migrate legacy driver raised `ALARM` status tokens into modern `alarm_*` function logic. Rather, we keep supporting them as separate from the modern logic, seeing as `upsmon` does not care where the token itself was raised for its notifications. Driver-code related test-cases were updated to reflect these changes. [issue #2928, PRs #2931 and #2934] * Introduced some macros in `drivers/upshandler.h` for common syslog level definitions and message wording for beginning and failing `instcmd()` or `setvar()` operations consistently in different drivers. As a related change, operations that intend to turn off or restart the load, or can do that by side effect (e.g. calibration if batteries are old or dead), would explicitly `upslogx(LOG_CRIT,...)` by default before commencing. [#2957] * Fixed a couple of ancient memory leaks: one "shared" during driver program initialization, and one specific to `dummy-ups` wind-down. [#2972] * Added a `suggest_NDE_conflict()` method so drivers which lack access to the expected device can consistently suggest that this may be because of running both an NDE-wrapped service unit and a manually launched driver program at the same time. Currently added to `libusb{0,1}.c` code, but may later be expanded to e.g. serial drivers and other media, when their behavior in such situations gets identified. [follow-up to issue #477, PR #3041] - `apc_modbus` driver updates: * The time stamp and inter-frame delay accounting was fixed, alleviating one of the problems reported in issue #2609. [PR #2982] * Fix missing variables due to mismatching format string. [PR #3013] - `bcmxcp` driver updates: * The latching on to a previous replace battery status was fixed, with its alarm state variable now correctly being reset; previously a factually replaced battery did not clear the alarm and the whole driver needed to be restarted. [issue #2999, PR #3002] - `clone`, `clone-outlet`, `nhs_ser` driver and `nutdrv_qx_ablerex` subdriver updates: * Refactored to follow modern handling of status and alarm conditions, aligning with current driver design practices. This includes fixing copy-paste related issues in alarm reporting and removing some alarm messages that should instead be reflected as status flags. [#2936] - `dummy-ups` driver updates: * A new instruction `ALARM` was added for the `Dummy Mode` operation of the driver, enabling simulation of UPS alarm states more closely in line with modern, real-world UPS driver implementations. This follows the updated principle of keeping alarm states decoupled from the `ups.status` variable, with alarms now raised via common alarm functions rather than direct manipulation. [issue #2928, PR #2936] - `nutdrv_qx` driver updates: * Added support for "preprocess"/"process" methods called from mapping tables to report back to the driver that an argument value was not supported, so `setvar()` or `instcmd()` can not proceed safely and should return `STAT_SET_CONVERSION_FAILED` or `STAT_INSTCMD_CONVERSION_FAILED`. [#3017] * Introduced `innovart33` protocol support for Ippon Innova RT 3/3 topology UPSes. [#2938] * Updated `megatec` protocol for more detailed responses to `I` query which may return `ups.serial` (after a shorter `device.mfr`) and the `battery.runtime` (after a shorter `device.model`). Note that the expected response is shorter than in other dialects (38 vs. 39 bytes), so if this change breaks anything for your UPS that reported the values above correctly (e.g. the `ups.firmware` version becomes shorter or none of these are reported), please let NUT developers know. [#2980] * Revised `voltronic` protocol to suppress alarm "UPS is in ECO Mode", using "buzzword mode" settings more correctly than in the previous iteration, shipped in NUT v2.8.3 release (as PR #2750 for issue #2708). [issue #2494] * Introduced a `voltronic-axpert` subdriver for Voltronic Axpert inverters which speak the P30 protocol, currently in a highly experimental state: with initial support for query commands, but most values are "hidden" from default NUT builds by being defined in `experimental.*` namespace, and should also be enabled by `configure --with-unmapped-data-points`. Development was based on work done in the Voltronic Sunny subdriver in https://github.com/nickma82/nut/tree/nutdrv_qx_voltronic-sunny_rebased%2Bcommand [#1407] - `phoenixcontact_modbus` driver updates: * Added more settings that can be tuned -- support for shutdown variables, UPS mode selector, PC reset delay after main power recovers, and automatic switch to battery mode (and back) if main power is below or above a defined threshold (see the new "Configurable Values" section in the man page). They can be configured via `default.*` values in `ups.conf`. [#2986] - `pijuice` driver updates: * Converted to NUT standard use of `status_set()` with single-token values. [issue #2708] - `snmp-ups` driver updates: * Added support for "fun"/"nuf" methods called from mapping tables to report back to the driver that an argument value was not supported, so `setvar()` or `instcmd()` can not proceed safely and should return `STAT_SET_CONVERSION_FAILED` or `STAT_INSTCMD_CONVERSION_FAILED`. [#3017] * Fixed `ups.test.date` to be semi-static in `apc-mib` mapping, so it would be queried more than once per driver up-time. [issue #3011] * Fixed debug-logging around `SU_FLAG_STATIC` entries to clarify when they get skipped. [issue #3011] - `usbhid-ups` driver updates: * Added support for "fun"/"nuf" methods called from mapping tables to report back to the driver that an argument value was not supported, so `setvar()` or `instcmd()` can not proceed safely and should return `STAT_SET_CONVERSION_FAILED` or `STAT_INSTCMD_CONVERSION_FAILED`. [#3017] * `hid_ups_walk(HU_WALKMODE_INIT)`: report if exactly one of "fun" or "nuf" dynamic value mapping methods is defined in a one-line table, and this may preclude reads/writes of that variable. [#2956] * The `cps-hid` subdriver's existing mechanism for fixing broken report descriptors was extended to cover a newly reported case of nominal UPS power being incorrectly reported due to an unrealistically low maximum threshold, as seen with a EC850LCD device. [issue #2917, PR #2919] * Further revision of "ECO mode" related code in `mge-hid` subdriver, following up from work started for NUT v2.8.3 release. [PR #2956] * Added APC BVKxxxM2 and BKxxxM2-CH to list of devices where `lbrb_log_delay_sec=N` may be necessary to address spurious LOWBATT and REPLACEBATT events. [PR #2942, PR #3007, issue #2347, issue #3006] - New NUT drivers: * Introduced a `ve-direct` driver for Victron Energy UPS/solar panels monitoring. Most specific reported values are in an `experimental.*` namespace, as a community we need to come up with standard naming for those via `docs/nut-names.txt`. [#440] * Introduced a `nutdrv_hashx` driver for numerous devices from Ablerex, Atlantis Land, Epyc, Infosec, ION, PowerWalker, Right Power Technology, Salicru, UPS Solutions and other vendors (originally shipped with a "PowerMaster+", "PowerMaster" or "PowerGuide" software companion suite). This seems to be a protocol developed by Cyber Energy for serial-port devices, subsequently used by different vendors in their own products or re-branded Cyber Energy creations. [#2940] * Introduced a `failover` driver for monitoring multiple UPS driver sockets and seamless switching out of UPS data in a failover situation, includes support for end-to-end tracked instant commands and also variable updating. [#2962] * Introduced USB (`powervar_cx_usb`) and Serial (`powervar_cx_ser`) drivers for Powervar CUSPP protocol, tested with GTS (USB) and UPM (USB, Serial) models. [#2988] - The `nut-driver-enumerator.sh` script (NDE) updates: * Now NDE internally tracks dependency of one driver on another one that should be locally running to serve the "original" data points (`clone`, `clone-outlet`, `dummy-ups`, `failover`). It should create "soft" dependencies between respective service instances to order their start-up sequence. [#2962] * Fixed NDE to not consider "masked" systemd units as non-existent or as syntactically failed instantiated unit names. [#3033] - NUT Monitor GUI: * Ported Python 3 version to Qt6, now shipped alongside Qt5 for systems with either or both, maximizing compatibility with old and new setups. [#2946] - `upsmon` client: * Clearer debug logging of `SHUTDOWNCMD` and `NOTIFYCMD` that would be used (or warnings that none was set); flush output buffers after these messages and after each main loop cycle, so any emitted text is seen in a timely manner. [issue #3003, PR #3008] - The `nutshutdown` script (end-game integration for UPS power-off in case of FSD initiated by `upsmon`) was updated to consider `MODE=none` set in `nut.conf` and bail out quietly. [issue #2935, PR #3008] - Manual page recipes and contents: * Introduced handling (possibly rewriting) for man page section "Overviews, conventions, and miscellaneous" (commonly number 7), to deliver support for `man nut` queries (NUT overview manual page also created). [#2945] * A new `configure --with-docs-man-dir-as-base` option was introduced so that directories for man page sections can now be automatically named as either "base" number of the section (e.g. `man1`) or by full section name (`man1m`), as different OS distributions have different preferences in this regard. [#2950] * Option to `configure --enable-docs-man-for-progs-built-only` was added, to differentiate NUT builds that deliver man pages for only built programs (legacy default) or for all of them (as needed for docs sites). [#2976] * Option to `configure --enable-docs-changelog` was added, specifically to allow developer iterations to not waste CPU time rebuilding the huge `ChangeLog*` files whenever their Git index changes. [#3019] * Options to `configure --with-docs-changelog-start` and/or `configure --with-docs-changelog-end` were added to allow developers to customize the size of `ChangeLog*` files when they are generated. Default starting value is `auto` which applies the legacy default `v2.6.0` to release/pre-release builds, or when local Git version info could not be retrieved, and the most-recent release tag (or `master` as fallback) for usual build iterations. Default ending value is `HEAD` for the current git commit at the moment the ChangeLog is (re-)generated. Balancing against the option to not build `ChangeLog*` files at all, this couple allows quicker builds that exercise all relevant recipe code paths. [#3019] - Extended the `gitlog2changelog.py` helper script to report start/end commits actually used, and to allow callers to tweak them better (not only `HEAD` for the end of range); this may be of interest to other projects which use this script. Allow `configure` to disable generation of either certain `ChangeLog*` rendering formats or completely, to speed up developer iterations (much time is wasted when dev-testing new code, due to git index changes if NUT was configured to build with documentation). [#3019] - The `BUILD_TYPE=default-all-errors ci_build.sh` script handling was revised to simplify code, and to default in CI builds to a quicker mode which randomly mixes the selected SSL, USB and UNMAPPED variants (and relies on the dozens of NUT CI farm runs per iteration to likely cover all possible combinations), which should roughly halve the CI build times. Default activity for developer builds should remain as it was -- to try each such "axis" sequentially. [#2973] - Revised generation of links to external manual pages in HTML rendering of NUT manual pages (previous recipe iterations left DocBook XML `ulink` tag "as is", which was not understood by web browsers). [follow-up to PR #2797] - Made the distro-dependent URL template for man pages configurable. [follow-up to PR #2797] - Revised `make install-as-root` to fall back to legacy ways of enabling services, if `systemctl preset-all` fails (assumed due to a systemd 252 bug). [#3022] - Added a `make check-parallel-builds` recipe to help troubleshoot recipes in sub-directories, and improved build-ability of existing NUT sources starting from scratch there. This is a workflow useful for NUT development (e.g. to focus only on drivers, or tests, or nut-scanner) but not so much for end-user packaging where everything builds from the root directory. [PR #3030, follows up from PR #2825, highlights why issue #2584 better be solved] - Revised `appveyor.yml` to run CI builds faster (forfeit MSYS2 ecosystem updates and some other steps) and more likely fit in one-hour allocation. Also have it install `mingw-w64-x86_64-python-pyqt6` so the `NUT-Monitor` application can get packaged (would need a capable Python run-time though). [#3046] Signed-off-by: Adolf Belka --- config/rootfiles/packages/nut | 9 +++++++-- lfs/nut | 6 +++--- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/config/rootfiles/packages/nut b/config/rootfiles/packages/nut index 4367797bf..6bcd2a553 100644 --- a/config/rootfiles/packages/nut +++ b/config/rootfiles/packages/nut @@ -27,6 +27,7 @@ usr/bin/clone-outlet usr/bin/dummy-ups usr/bin/etapro usr/bin/everups +usr/bin/failover usr/bin/gamatronic usr/bin/genericups usr/bin/isbmex @@ -44,12 +45,15 @@ usr/bin/nhs_ser usr/bin/nut-scanner usr/bin/nutconf usr/bin/nutdrv_atcl_usb +usr/bin/nutdrv_hashx usr/bin/nutdrv_qx usr/bin/nutdrv_siemens-sitop usr/bin/oneac usr/bin/optiups usr/bin/powercom usr/bin/powerpanel +usr/bin/powervar_cx_ser +usr/bin/powervar_cx_usb usr/bin/rhino usr/bin/richcomm_usb usr/bin/riello_ser @@ -69,6 +73,7 @@ usr/bin/upslog usr/bin/upsrw usr/bin/upssched-cmd usr/bin/usbhid-ups +usr/bin/ve-direct usr/bin/victronups #usr/include/nut-scan.h #usr/include/nutclient.h @@ -89,8 +94,8 @@ usr/lib/libnutclientstub.so.1 usr/lib/libnutclientstub.so.1.0.1 #usr/lib/libnutscan.la #usr/lib/libnutscan.so -usr/lib/libnutscan.so.3 -usr/lib/libnutscan.so.3.0.0 +usr/lib/libnutscan.so.4 +usr/lib/libnutscan.so.4.0.0 #usr/lib/libupsclient.la #usr/lib/libupsclient.so usr/lib/libupsclient.so.7 diff --git a/lfs/nut b/lfs/nut index ffd4601ac..a86b1694f 100644 --- a/lfs/nut +++ b/lfs/nut @@ -26,7 +26,7 @@ include Config SUMMARY = Network UPS Tools Core (Uninterruptible Power Supply Monitoring) -VER = 2.8.3 +VER = 2.8.4 THISAPP = nut-$(VER) DL_FILE = $(THISAPP).tar.gz @@ -34,7 +34,7 @@ DL_FROM = $(URL_IPFIRE) DIR_APP = $(DIR_SRC)/$(THISAPP) TARGET = $(DIR_INFO)/$(THISAPP) PROG = nut -PAK_VER = 14 +PAK_VER = 15 DEPS = @@ -50,7 +50,7 @@ objects = $(DL_FILE) $(DL_FILE) = $(DL_FROM)/$(DL_FILE) -$(DL_FILE)_BLAKE2 = 515e829286b123610a856003a8838a022ae365b193988477086a683b9da0a99b3b1cf048cecd75c764c8a9a03856e966bd9d82333475670d1df43899d9b8a7bf +$(DL_FILE)_BLAKE2 = 1a9e86c112055b623811e1747aa420ebb8022189c2e43f38c29cca93171d59b895d1ff5487d8f325c79833c6f6a76bffd849fb179db158bb2a1fbf86952dd797 install : $(TARGET) -- 2.51.0