If you’re upgrading from an earlier version, see the UPGRADING.adoc file.
Please note that web and source document links, product and service names listed in historic entries of past releases may no longer be relevant.
For a complete and more detailed list of changes, please refer to the ChangeLog file (generated for release archives), or to the Git version control history for "live" codebase.
https://github.com/networkupstools/nut/milestone/9
https://github.com/networkupstools/nut/milestone/11
Fix fallout of development in NUT v2.8.0 and/or v2.8.1 and/or v2.8.2:
NUT_DEBUG_LEVEL
and "-D" CLI option handling to start of
driver programs for issue #2259 in NUT v2.8.2 release misfired with
regard to data-dump mode (it no longer caused foreground by default).
[#2408]
nut-driver-enumerator.sh
improvements misfired in v2.8.2 release
with an overlooked bit of shell syntax, and caused nut-driver@upsname
instances to not auto-restart when ups.conf
is edited. [#682, #2410]
nut-scanner
in v2.8.2
broke detection of (in-)ability to find and query "Old NUT" servers via
libupsclient.so
(internal flag got always enabled). [#2246]
upsmon
v2.8.1 setting of OFFDURATION
[PR #2108, issue #2104,
revisiting PR #2055, issue #2044] was overly zealous and impacted also
the OB
state in cases where communications to the data server were
severed and DEADTIME
setting was not honored. [PR #2462, issue #2454]
drivername -c reload
(e.g. facilitated by nut-driver-enumerator
script and service when editing ups.conf
) led to disconnected Unix
sockets and a tight polling loop that hogged CPU. While the underlying
bug is ancient, it took recent development to hit it as a practical
regression. [issue #1904, issue #2484]
localtime_r()
and gmtime_r()
for some platform builds where
a *_s()
variant was available was not handled correctly. [PR #2583]
allow_killpower
did not actually work as an
ups.conf
flag (only as a protocol command). [issue #2605, PR #2606]
upsdrvquery.c
code was not complete for the case of indefinite
select()
wait timeout. Now upsdrvquery_read_timeout()
fixed private
use of struct timeval={-1,-1}
as a trigger to select(..., NULL)
,
as logged in one part of code and not handled in the other, for the
indefinite wait [#1922, #2392, #2686, #2670]
disable_fix_report_desc
option introduced for usbhid-ups
driver
since NUT v2.8.1 was not applied for early dialog with the device while
its report descriptors were being discovered. Now this flag, as well as
interruptsize
and interruptonly
, are considered before we first try
to open the USB device handle. [#1575, #1512]
cps_fix_report_desc()
we intended to fix-up input and output voltages
in certain cases against high voltage transfer, we only fixed-up one of
them. [#1245]
upsd
should now handle TRACKING
value of STAT_CONVERSION_FAILED
introduced in NUT v2.8.2 for the socket protocol (between driver and
data server), by returning "ERR INVALID-ARGUMENT", so there is no change
for the network protocol definition. [#2182]
SEMVER, know thyself!
VERSION_DEFAULT
file, among provisions for packager tuning. [#1949]
docs/nut-versioning.adoc
NUT_WEBSITE_BASE
dependent on codebase maturity
(development or release snapshot); many programs now display such
references in their command-line usage help, method suggest_doc_links()
was introduced for this purpose. [issue #722, PR #2733]
A technologically and practically interesting revamp of NUT mesh of
automake (Makefile.am
)
recipes was completed, allowing for a more parallelizable build routine
on multi-CPU machines — utilizing more cores and completing in less
"wall-clock" time that the standard SUBDIRS
driven approach — when
running make -j (N)
from the project root directory to build everything
enabled by the configure
script.
This was tested with several (GNU, BSD, Sun) implementations of the
"make" program on the few dozen platforms that NUT CI farm tests on.
Notably, GNU make 4.x and newer seems to process parallel high-level
goals and sub-make
runs better than the competition (including GNU
make 3.x).
It is not a radical rewrite like some other research suggested, and so retains
the general structure and certain benefits and flexibility of that standard
automake
approach, including developer build workflows with a bespoke
Makefile
in every significant directory. This also retains (and builds
upon) the benefits of older work done in NUT, for builds in one directory
to depend on libraries and other artifacts built (once) in another.
Overall, NUT CI farm build times got 25%+ shorter (which is important as some scenarios had hit the 1-hour timeout imposed by providers of free CI hosting coupled with the weak machines provided in their free layer), and we suppose this is an interesting case for other projects to draw inspiration from for their recipe refactoring. [PR #2825]
The make dist
goal now takes more care to require availability of the man
pages to put into the prepared distribution archive. These may come either
from the current build, or inherited from its sources (if using a tarball
initially) on a platform without tooling required for man page generation.
This requirement compromises usability of make distcheck
on platforms without
such tools from sources without pre-built man pages (e.g. builds from git),
so a couple of new goals were introduced in PR #2842:
- make distcheck-fake-man
generates placeholder files named like pre-built
man pages for any missing files, just for the purpose of constructing
a sane-looking dist archive to distcheck
strictly otherwise;
- make distcheck-ci
is routed to distcheck
or distcheck-fake-man
based on build circumstances (ability to build man pages or presence
of pre-built pages, or lack of either);
- Similarly, make dist-ci
is routed to provide a strict or faked tarball;
- Earlier defined goals like distcheck-light
or distcheck-valgrind
now
take advantage of these mechanisms to also produce usable dist archives
for their relaxed or purpose-specific tests.
upsnotify()
common code introduced in recent NUT releases (integrating
with service management frameworks, etc.) was a bit cryptic when it reported
a failure to notify (e.g. when not running as a service currently), fixed
now to report human-friendly text instead of internal enum codes. Follow-up
to [issue #1590, PR #1777, PR #2136]
port
, invalid trailing keywords…)
upsd
, upsmon
: reduce "scary noise" about failure to fopen()
the PID file (which most of the time means that no previous instance of
the daemon was running to potentially conflict with), especially useless
since in recent NUT releases the verdicts from sendsignal*()
methods
are analyzed and lead to layman worded situation reports in these programs.
[issue #1782, PR #2384]
-FF
command-line option (e.g. wrapped into the
systemd units to stay "foregrounded" and save a PID file anyway) should
now also handle an existing PID file to interact with the earlier instance
of the driver program, if still running (e.g. started manually). [#2384]
-k
CLI option) should
now try harder to kill off a daemonized sibling, if it still runs (and
did not handle a driver.killpower
INSTCMD well). [#2666]
driver.exit
command for a protocol equivalent of sending a SIGTERM
, e.g. when
a newer instance of the driver program tries to start. [#1903, #2392]
NUT_QUIET_INIT_BANNER
envvar (presence or "true" value) can now
prevent the tool name and NUT version banner from being unilaterally
printed out when NUT programs start. [issues #1789 vs. #316; #2573]
NUT_QUIET_INIT_LISTENER
envvar (presence or "true" value) can
prevent the socket name from being unilaterally printed out when NUT
drivers start. [#2764]
upsdrvctl
should now warn if executed on systems where NUT was
built with support for service management frameworks like systemd or SMF,
so nut-driver service units prepared by nut-driver-enumerator
would
conflict with manually-executed driver programs. This warning can be
hushed by exporting a NUT_QUIET_INIT_NDE_WARNING
environment variable
with any value.
upsdrvctl
with a list
operation (or -l
option) to report
manageable device configuration names (possible <ups>
arguments to
start
, stop
etc. operations), or to confirm a single name that it
is known, and a status
operation for more information. [#2567]
riello_ser updates:
localcalculation
option to compute battery.runtime
and
battery.charge
if the device provides bogus values [issue #2390,
following in the footsteps of #1692, #1685 done for riello_usb
]
(similar to runtimecal
in some other drivers, may be refactored
to that configuration and logic model in later NUT releases)
apcsmart updates:
strncpy()
and avoid potential overflows that are
possible with strcpy()
used before. [PR #2564]
nutdrv_qx updates:
1a86:7523
)
as known supported by nutdrv_qx
(Megatec protocol) since at least
NUT v2.7.4 release. [#2395]
innovart31
protocol support for Innova RT 3/1 UPSes. [#2712, #2798]
q2
and q6
protocol support; currently also based/tested
on Innova devices, but other models than RT 3/1. [#2798]
gtec
subdriver and protocol, tested over USB with a
Gtec ZP120N device. [#2818]
hunnox_protocol()
to honour the optional novendor
setting for
devices that are confused by such query, e.g. DEXP LCD EURO 1200VA. [#2839]
battery.runtime
value. [#2765]
GPIO drivers:
WITH_LIBGPIO_VERSION
C macro (in
config.h
) to differentiate the library variants. [issue #2833]
usbhid-ups
and netxml-ups
updated to handle "No battery installed!"
alarm also to set the RB
(Replace Battery) value in ups.status
.
This may cause dual triggering of notifications (as an ALARM
generally
and as an important REPLBATT
status in particular) in upsmon
, but
better safe than sorry. [#415]
usbhid-ups updates:
onlinedischarge_log_throttle_hovercharge
in the NUT
v2.8.2 release was found to be incomplete. [#2423, follow-up to #2215]
interrupt_pipe_no_events_tolerance=N
setting to
optionally prevent UPS lockup, indicated by continuous "Got 0 HID Objects"
situation as a clue, by reconnecting on stale data. Note that while some
devices just report information upon subsequent poll and just have nothing
urgent to declare with an USB interrupt, others (e.g. APC BXnnnnMI) were
seen to lock up until a full connection restart. [#2671, #2681]
lbrb_log_delay_sec=N
setting to delay propagation of
LB
or LB+RB
state (buggy with APC BXnnnnMI devices circa 2023-2024).
This may work better with flags like onlinedischarge_calibration
and
lbrb_log_delay_without_calibrating
for some devices. [#2347]
possibly_supported()
message method for devices
with VendorID=0x06da
(Phoenixtec), seen in some models supported by
MGE HID or Liebert HID, updated to suggest trying nutdrv_qx
. [#334]
mge_model_names[]
was extended for Eaton 9E, 5PX and 5SC
series (largely guessing, feedback and PRs for adaptation to actual
string values reported by devices via USB are welcome), so these devices
would now report battery.voltage
and battery.voltage.nominal
.
Also a device from 5S series (5S1200AU) was tested, although it identifies
as an "Ellipse PRO" in USB metadata. [#2380]
ups.beeper.status
support for Masterpower MF-UPS650VA using the
MGE HID subdriver. [#2662]
0x09D6:0x0001
devices using the MGE HID subdriver
assuming devices made by KSTAR (alternately using MGE vendor ID). [#2661]
powercom-hid
subdriver sent UPS shutdown commands in wrong byte order,
at least for devices currently in the field. A toggle was added to set
the old behavior (if some devices do need it), while a fix is applied
by default: powercom_sdcmd_byte_order_fallback
. [PR #2480]
cps-hid
subdriver now supports more variables, as available on e.g.
CP1350EPFCLCD model, including temperature. [PRs #2540, #2711]
pollonly
flag and default a shorter pollfreq
for CPS devices, to try avoiding device-driven timeouts. [#1689]
Also adjust default offdelay
and ondelay
to reasonable values,
and warn the users with CPS devices if their configured values are
not multiples of 60. [#432, #1394]
cps-hid
subdriver, cps_fix_report_desc()
method should now handle
mismatched LogMax
ranges for input and output voltages, whose USB Report
Descriptors are wrongly encoded by some firmware versions. [#1512]
cps-hid
subdriver, try to fix frequency scaling based on the values
we see from the device and/or configuration overrides (low, nominal, high)
so 499.0 Hz
reading that comes from some firmware versions gets reported
properly as 49.9Hz
. [#2717]
usb_communication_subdriver_t
) are now set back to
their default values during enumeration after probing each subdriver.
Having an unrelated device connected with a VID:PID matching the
arduino-hid
subdriver prevented use of an actual usb-hid
device due to
changes made to this struct during probe. [#2611]
USB-capable drivers generally:
(nut_)libusb_get_string: Success
due to either
reading an empty string or getting a success code 0
from libusb.
This difference should now be better logged, and not into syslog. [#2399]
nut_usb_get_string()
method which can do a
fallback en_US
query for devices which report a broken "langid" language
identifier value. This notably manifested in inability to query the device
Manufacturer, Model and Serial Number values with some buggy device firmware
or hardware. [PR #2604, issues #1925, #414]
usbhid-ups
driver; but should also apply out of the box to same
discovery logic in blazer_usb
, nutdrv_qx
, riello_usb
and
tripplite_usb
drivers.
nut-scanner
and libnutscan
. [issue #2615]
richcomm_usb
,
nutdrv_atcl_usb
) and for general code to collect string readings and
other data points, and to configure the fallback locale or choose one
if several are served by the device. [issues #2613, #2614, #2615]
LIBUSB_DEBUG=INTEGER
setting in ups.conf
(as well as an environment variable that can be generally set via
nut.conf
or service unit methods or init script), to enable
troubleshooting of LibUSB itself. [issue #2616]
assumed_LogMax
(typically when firmware
encoding logic is wrong, and -1
is resolved by parser). [#1512, #1040]
snmp-ups updates:
baytech-rpc3nc-mib
serving same basic data points as were available in baytech-mib.c
,
but checking for a different model OID subtree and different OIDs for
the device model information. [#2779]
netvision-mib
: sync netvision_output_info
with currently
available SOCOMECUPS-MIB.txt
. [#2803]
COMMFAULT
and ALARM
(for a specific status bit); instead, it will set modern
ups.alarm
with values COMMFAULT
and/or DEVICEALARM
(and raise
an ALARM
in ups.status
for either, as standard alarms go). [#2708]
hwmon_ina219
specifically
made for Texas Instruments INA219 chip as exposed in the Linux "hwmon"
subsystem of its "sysfs" interface (and talking I2C under the hood), this
approach seems to have good potential to expand into covering more devices
and perhaps platforms. [#2430]
Introduced ECO
status concept for "ECO mode" (or "High Efficiency" mode,
or "Energy Saver System"…) as named and defined by hardware vendors.
One common aspect is that this is a balance of electrical efficiency vs.
robust outage protection (which may be overkill for IT equipment whose
PSU can survive several milliseconds on capacitors alone) which can be
selected at run-time. Previously such choice was made at the time of
purchase, with the UPSes only supporting some one protection strategy.
[issue #2495, PR #2637]
upsmon
client with ability to report entering and exiting
the ECO mode if reported by the driver;
usbhid-ups
driver.
Introduced handling for the ALARM
status, which already existed as a
common denominator for devices seen with active ups.alarm
variables.
UPS devices in an ALARM
status are generally considered volatile and
may be considered critical/dead by the upsmon
client earlier than in
other statuses (e.g. in no-communication situations). It has to be noted
that there is no common standard for what constitutes an alarm and such
alarm states were also previously observed for less severe reasons. This
depends on the manufacturer/device-specific implementation in the driver.
[issues #415, #2657, PR #2658]
upsmon
client with ability to report entering and exiting
the ALARM status if reported by the driver;
upsmon
client with setting to toggle whether an ALARM
status can prompt the UPS to become critical in certain situations.
libupsclient
API methods added, upscli_str_add_unique_token()
and
upscli_str_contains_token()
, to help C NUT clients process ups.status
and
similarly structured strings same way as NUT core code base. [#2852, #2859]
upsmon:
POWERDOWNFLAG
must be explicitly set in the
configuration file, there is no built-in default in the binary program
(the settings facilitated by the configure
script during build "only"
impact the upsmon.conf.sample
, init-scripts and similar files generated
from templates). [issue #321, PR #2383]
OBLBDURATION
(seconds) setting to optionally delay raising
the alarm for immediate shutdown in critical situation. [#321]
parse_status()
by not checking further strings if we had
a match; report unexpected tokens in debug log. [#415]
do_notify()
method to support formatting strings
with two %s
placeholders, to use if certain use-cases pass any extra
information (e.g. not just "we have alarms" but their values too). [#415]
ups.status
tokens, reporting them
as "OTHER" notification type (whenever the set of such tokens appears
or changes) or "NOTOTHER" when they disappear. [#415]
upslog:
-s <system>
and -l <logfile>
) along with newer tuple(s) for multiple-system logging
(repeatable -m <system,logfile>
), previously the single-system options
were overridden by the tuple(s); now they become part of the list.
upsname
in the system=upsname[@hostname[:port]]
parameter may
be an asterisk *
to query for devices currently served by the hostname.
%UPSHOST%
in a custom formatting string).
%UPSHOST%
when multiple systems are being logged.
%t
for a TAB character can now be used in the formatting string.
-N
to prefix %UPSHOST%%t
before the format string (whether
default or custom). Useful when logging many systems into same target.
-D
for debugging (and foregrounding by default), like with
other NUT daemons.
More systemd integration:
nut-sleep.service
unit which stops nut.target
when a
system sleep was requested, and starts it when the sleep is finished.
This helps avoid NUT shutting down a woken-up system just because its
power state was critical before the sleep (called as a SHUTDOWNCMD
implementation by the end-user), and a next-read timestamp was not seen
(deemed to be a stale UPS, meaning lost communications during critical
state, so must go down ASAP). While not as elegant as native systemd
"inhibitor interface" support, this approach does work. [#1833, #1070]
upsmon
client via new
Inhibit()
method in common.c
. [#1070]
upsmon
would behave better in face of any significant and unexpected clock
jumps (on POSIX builds so far), even if they are not suspend/hibernate
events (or they were but we could not have an inhibit lock). Now they
should be handled similar (avoid stale UPS data and rash decisions)
for summer/winter time change on non-UTC deployments, a debugger
suspending the upsmon
process, etc. [#2597]
upsd:
upsd_cleanup()
is now traced, to more easily see that the daemon is
exiting (and/or start-up has aborted due to configuration or run-time
issues). Warning about "world readable" files clarified. [#2417]
LISTEN
on an invalid host name (e.g. localhost:3493
or
1.2.3.4/24
) is now logged in a more actionable manner. [#2665]
nut-scanner:
the tool relies on dynamic loading of shared objects (library files)
orchestrated at run-time rather than pre-compiled, to avoid excessively
huge package footprints. This however relies on knowing (or sufficiently
safely guessing) the library file names to use, and short libname.so
is not ubiquitously available. With the new m4
macro AX_REALPATH_LIB
we can store and try to use the file name which was present on the build
system, while we search for a suitable library. [#2431]
A different but functionally equivalent trick is done for libupsclient
during a NUT build.
* fixed support for IPv6 addresses (passed in square brackets) for both
-s
start/-e
end command-line options, and for -m cidr/mask
option.
[issue #2512, PR #2518]
* newly added support to scan several IP addresses (single or ranges)
with the same call, by repeating command-line options; also -m auto{,4,6}
can be specified (once) to select IP (all, IPv4, IPv6) address ranges of
configured local network interfaces.
An /ADDRLEN
suffix can be added to the option, to filter out discovered
subnets with too many bits available for the host address part (avoiding
millions of scans in the extreme cases).
[issue #2244, issue #2511, PR #2509, PR #2513, PR #2517]
* implemented parallel scanning for IPMI bus, otherwise default scan for
all supported buses with -m auto
takes unbearably long. [#2523]
* bumped version of libnutscan
to 2.6.0, it now includes a few more
methods and symbols from libcommon
. [issue #2244, PR #2509]
* do not actively suggest vendor(id)
, product(id)
, and serial
options
for bcmxcp_usb
, richcomm_usb
and nutdrv_atcl_usb
drivers for now
[#1763, #1764, #1768, #2580]
all drivers should now support the optional sdcommands
setting with
a site-local list of instant commands to handle upsdrv_shutdown()
,
which may be useful in cases when the driver’s built-in commands
(or their order) do not meet the goals of particular NUT deployment.
This can also help with shutdown endgame testing, using a mock command like
starting the beeper (where supported) to verify that the UPS communications
happen as expected, without compromising the load connected to the UPS.
Also defined EF_EXIT_SUCCESS
and EF_EXIT_FAILURE
in include/common.h
to avoid magic numbers in code like set_exit_flag(-2)
, and revised whether
it is getting set at all in "killpower" vs. other cases, based on new
handling_upsdrv_shutdown
internal flag.
during this overhaul, many older drivers got their first ever supported
INSTCMD such as shutdown.return
, shutdown.stayoff
or load.off
. Default
logic that was previously the content of upsdrv_shutdown()
methods was often
relocated into new shutdown.default
INSTCMD definitions. [#2670]
common code:
upscli_splitname()
should now recognize upsname:port
typos (missing
the @hostname
part) and error out gracefully.
NUT_DEBUG_SYSLOG
environment variable to tweak activation
of syslog message emission (and related detachment of stderr
when
backgrounding), primarily useful for NIT and perhaps systemd. Most
methods relied on logging bits being set, so this change aims to be
minimally invasive to impact setting of those bits (or not) in the
first place. [#2394]
root
-owned daemons now use not the hard-coded PIDPATH
value set
by the configure
script during build, but can override it with a
NUT_PIDPATH
environment variable in certain use-cases (such as
tests). [#2407]
STATEPATH
via ups.conf
to match upsd
custom configuration ability; the data server would prefer the value
from ups.conf
over the one in upsd.conf
, if both are present.
Note that NUT_STATEPATH
environment variable trumps both. [issue #694]
progname
string defined in the respective NUT
source file, so a boolean NUT_IGNORE_CHECKPROCNAME
environment
variable support was added to optionally disable this verification.
Also the NUT daemons should request to double-check against their
run-time process name (if it can be detected). [issue #2463]
m4
macros to check during configure
phase for the
platform, and a nut_bool.h
header with nut_bool_t
type to use
during build, to avoid the numerous definitions of Boolean types
and values (or macros) in the NUT codebase. [issue #1176, issue #31]
distcheck-something
targets did not inherit DISTCHECK_FLAGS
properly. [#2541]
status_get()
in NUT driver state API, to check if a status
token string had been set recently, and to avoid duplicate settings;
fixed status_set()
for multi-token arguments. [PR #2565, issue #2708]
LOGOUT
command for cleaner
disconnection handling. [#2572]
clang-18
and newer revisions of
gcc-13
+ whose static analyzers on NUT CI farm complained about some
imperfections after adding newer OS revisions to the population of
build agents. [#2585, #2588]
clang-19
brought new findings about mismatched formatting
strings and int
-ish parameters of respective methods.
Overall, had to change formatting strings in some cases, variable types
in others (e.g. flags or notification types do not make sense as signed)
and added casting in a few places that remained, because:
%x
style formatting requires an unsigned int
variable
int
by default
uint16_t
, done in some
cases, are up-scaled into int
by default
char
's, unsigned
or not, seem to be also up-scaled into int
docs/nut-names.txt
with items defined by 42ITy NUT fork. [#2339]
configure
script to use default (target-specific) values of
CFLAGS
, LIBS
etc. when probing relevant settings for each third-party
dependency; as a consequence, on systems that support building for many
targets, we check relevant build-ability for that target and not for the
building system itself. [issue #2673, PR #2675]
scripts/external_apis
with an example script integrating a
non-native protocol with NUT; that example can be installed using
configure --enable-extapi-enphase
. [issue #2807, PR #2813]
scripts/valgrind
with a helper script and suppression file to
ignore common third-party problems. [#2511]
configure --with-valgrind=PATH
vs. detection of its usability;
fixed some portability issues with detection of usability per se, tried
--with-valgrind=auto
the default to auto-detect and use the feature
(in tests) wherever possible, but too many NUT CI farm agents disagreed;
so for now the default is no
. [#2823]
stdout
buffer immediately for sane logging (especially on Windows). [PR #2699]
nut.exe
(the NUT for Windows wrapper for all-in-one service)
to be more helpful with command-line use (report that it failed to start
as a service, have a help message, pass debug verbosity to launched NUT
programs…) and add a man page for it. [issue #2432, PR #2446]
scripts/Windows/build-mingw-nut.sh
helper script was extended to
use nut_build_${ARCH}
and nut_install_${ARCH}
directories by default,
with the older nut_build
and nut_install
short names becoming just a
symbolic link to the latest executed build: this should help compare the
differences of 32/64-bit builds, without them stepping on each other’s toes.
PyNUTClient
module should no longer rely on presence of a telnetlib
module in the build or execution environment (deprecated in Python 3.11,
removed since Python 3.13). [issue #2183, PR #2792]
PyNUTClient
module tarball should now use a
lower-cased file name (and immediate versioned directory name inside) to
match the requirements of PEP-0625.
The Python module name (and its directory) should remain camel-cased. [#2773]
NUT-Monitor
Python UI client.
NUT-Monitor
Python UI client itself was revised to report the
PACKAGE_VERSION
and NUT_WEBSITE_BASE
strings in the "About" dialog
contents; localization support for the dialog and some other resources
was revised to work in Py3Qt5 variant of the script. [#722]
enabled installation of built single-file PDF and HTML (including man page
renditions) under the configured docdir
. It seems previously they were
only built (if requested) but not installed via make
, unlike the common
man pages which are delivered automatically. [#2445]
NOTE: The `html-chunked` documents are currently still not installed.
./configure --with-doc=man=dist-auto
to use distributed
manual page files if present; only fall back to build them if we can. [#2473]
make distcheck-light-man
recipe to require verification that the
manual page files can be built using the prepared "tarball" archive. [#2473]
ChangeLog
products and their intermediate files more than once (but
still react to git
metadata changes during development), and to sanity
check the resulting final document (currently only for html-single
mode).
As part of this, the CHANGELOG_REQUIRE_GROUP_BY_DATE_AUTHOR
setting was
added (for make
calls and used by tools/gitlog2changelog.py.in
script),
and it defaults to true
allowing for better ordered documents at the cost
of some memory during document generation. [#2510]
configure
script options to specify that
manual sections on the target platform differ from (Linux-based) defaults
hard-coded into page sources; this should allow to simplify NUT packaging
recipe maintenance in distributions (no more updating patches for changed
or added documentation sources).
config.nut_report_feature.log
and be installed into shared documentation
of a NUT package) are now better grouped as miscellaneous features and
detection results, then drivers and programs/tools. [#2676]
common/Makefile.am
build product for a new internal library
libcommonstr.la
which allows a smaller selection of helper methods
for tools like nut-scanner
which do not need the full libcommon.la
nor libcommonclient.la
. [#2478, #2491]
drivers/Makefile.am
build product for a new internal library
libserial-nutscan.la
to simplify tools/nut-scanner/Makefile.am
recipes.
[#2490]
snmp-ups
and netxml-ups
drivers now explicitly brings linker
dependency on chosen SSL libraries. [#2479]
configure --with-modbus+usb
option to require an USB-capable
libmodbus, and defaulted a couple of specific situations as if this was
required (implicitly): configure --with-modbus --with-usb
and
either --with-drivers=*apc_modbus*
(actually implies --with-modbus
)
or --with-modbus-includes=... --with-modbus-libs=...
as a way to avoid surprises with custom NUT builds aiming to have an
USB-capable apc_modbus
driver (currently this requires a custom-built
libmodbus). Also fixed (re-)detection of libmodbus RTU USB support with
static libmodbus builds. [#2666]
brought keyword dictionaries of nutconf
and augeas
NUT configuration
file parsers up to date; restored automated checks for augeas
lenses.
[issue #657, issue #2294]
NOTE: Some known issues remain with augeas lens definitions so currently they should be able to parse common simple use-cases but not certain types of more complex configurations (e.g. some line patterns that involve too many double-quote characters) which are valid for NUT proper. [link:https://github.com/networkupstools/nut/issues/657[#657]]
pkg-config
program
should now ignore host *.pc
files and avoid confusion.
m4
/configure.ac
sources updated to handle a much larger build scope on MacOS. Also
migrated the builders to Apple Silicon from x86 (deprecated by CircleCI).
Disabled HOMEBREW_NO_AUTO_UPDATE
to gain 40 min per build at cost of
slightly older environment. [#2502, #1579]
scripts/fuse/execfuse-nut
now. [#2591]
make install-as-root
to create directories not directly
populated by make install
and NUT build artifacts, apply permissions
and (on some platforms) restart services involved with NUT. [#1298]
https://github.com/networkupstools/nut/milestone/10
Fix fallout of development in NUT v2.8.0 and/or v2.8.1:
INSTCMD
processing of commands without parameters nor
TRACKING
identifier. [#2155]
upsmon
recognition of CAL
state could linger after the calibration
activity was completed by the hardware, which led to mis-processing of
shutdown triggers. Also, notification was added to report "finished
calibration". [issue #2168, PR #2169]
upsmon
recognition of OFF
state as a trigger for FSD (forced shut
down) criticality considered also the input line state, which may be
an independently evolving circumstance. [issue #2278, PR #2279]
upsmon
support for POLLFAIL_LOG_THROTTLE_MAX
did not neuter the
applied setting when live-reloading configuration, so commenting it
away in upsmon.conf
did not have the effect of resetting the logging
frequency to default. It also did not reset the counters to certainly
follow the new configuration for existing faults. [issue #2207, PR #2209]
upsmon
support for POLLFAIL_LOG_THROTTLE_MAX
had an off-by-one error
(e.g. reporting "Data stale" or "Driver not connected" every 30 sec with
POLLFAIL_LOG_THROTTLE_MAX 5
and POLLFREQ 5
settings). [#2207]
user=root
in their configuration) failed to apply group ownership and permissions
to their Unix socket file for interaction with the local data server.
[#2185, #2096]
scripts/python/app/NUT-Monitor
referenced py3qt3
instead of the correct py3qt5
. It also tries to check both py2gtk2
and py3qt5
implementations verbosely, even if one is not installed.
[#2199, #2201]
DesktopFileName
in scripts/python/app/NUT-Monitor-py3qt5
,
this binds the application with the desktop file and allow the Open
Desktop compatible implementation to display the proper icon and
application name. [#2205]
apc_modbus
strictly required USB support even if
building NUT without it. [#2262]
CFLAGS
and CXXFLAGS
should again be honoured. [PR #2306]
configure
script option --with-debuginfo
. Note that default autoconf
behavior usually embeds moderate optimizations and debug information on
its own. [PR #2310]
usbhid-ups
subdriver belkin-hid
which in practice
relied on the broken older behavior; more details in its entry below.
[PR #2371]
nut-usbinfo.pl, nut-scanner and libnutscan:
libnutscan
was bumped from 2.2.0 to 2.5.0
during evolution of this NUT release.
alt_driver_names
in nutscan_device_t
structure
for ability to suggest a comment with other possibly compatible driver
names in configuration snippets generated by nut-scanner
; practical
support implemented for USB connected drivers.
comment_tag
and a method to nutscan_add_commented_option_to_device()
, instead of
hacks in prepared config data which broke some use-cases. [#2221]
-U
for USB scan can now be specified several times
to increase the detail level about hardware link to the device (this was
previously always suggested, but may be not reliable if USB enumeration
gets changed over time). [#2221]
$datadir
e.g. /usr/local/share/nut
and need to be pasted into your /boot/loader.conf.local
). [#2159]
nutdevN
device section names
when called separately to scan different media buses (one at a time).
Now the "bus" name would be embedded (e.g. non-colliding nutdev-usb1
and nutdev-snmp1
). [#2247]
.dev
and .seq
files) located in your sysconfig directory, and prepare configuration
sections with the simulation driver (currently dummy-ups
). [#2246]
dummy-ups
as driver when scanning NUT "bus"
with Old or Avahi method. [#2236, #2245]
ALLOW_NOT_ALL_LISTENERS
setting was added to control this behavior. [#723]
NUT CI improvements:
ccache
namespace concept, where possible. [#2256]
--without-usb
. [#2263]
libgd
discovery (for CGI etc. builds). [#2287]
aspell
TeX module detection more reliable. [#2206]
main driver core codebase:
nutdrv_qx
built for serial-only support), and built
in fact without USB support but used for USB devices, with some more
information to make troubleshooting easier. [issue #2259, PR #2260]
-D
CLI option and/or
the NUT_DEBUG_LEVEL
environment variable now check those earlier in
their life-time, so that initialization routine can be debugged. [#2259]
usb_config_index
usb_hid_rep_index
, usb_hid_desc_index
, usb_hid_ep_in
and
usb_hid_ep_out
hardware connection settings via ups.conf
options.
This is treated as experimental, not all code paths may be actually
using such values from struct usb_communication_subdriver_t
rather
than hard-coded defaults. Discovery of correct values is up to the
user at the moment (using lsusb
, internet search, luck…) [#2149]
nut-driver-enumerator (NDE) service/script:
--daemon-after
variant which parses the configuration once before
daemonization and this has a chance to fail while not forked off, as
well as to allow only completing the service unit initialization when
everything is actually ready to work (so further dependencies can start
at the proper time). [#682]
ups.conf
. [PR #2297, issues #2282 and #2258]
snmp-ups driver:
usbhid-ups driver:
arduino-hid
subdriver was enhanced from "initial bare bones" experimental
set of mapped data points to support some 20 more mappings to make it more
useful as an UPS driver, not just a controller developer sandbox. [#2188]
cps-hid
subdriver now supports devices branded as Cyber Energy and built
by cooperation with Cyber Power Systems. [#2312]
belkin-hid
subdriver now supports Liebert PSI5 devices which have a
different numeric reading scale than earlier handled models. [issue #2271,
PR #2272, PR #2369] Generally the wrong-scale processing was addressed,
including a regression in NUT v2.8.0 which led to zero values
in voltage data points which NUT v2.7.4 reported well [#2371]
onlinedischarge
configuration flag name was too ambiguous and got
deprecated (will be supported but no longer promoted by documentation),
introducing onlinedischarge_onbattery
as the meaningful alias. [#2213]
OL+DISCHRG
state should now be throttled
(see the driver manual page for more details) [#2214, #2215]:
battery.charge
is available, make the message when entering the
state and then only if the charge differs from that when we posted
the earlier message (e.g. really discharging) and is under
onlinedischarge_log_throttle_hovercharge
value (defaults to 100%);
onlinedischarge_log_throttle_sec
, by default 30 sec if battery.charge
is not reported by the device (should be frequent by default, in case
the UPS-reported state combination does reflect a bad power condition).
nutdrv_qx driver:
battery_voltage_reports_one_pack
configuration flag
introduced in NUT v2.8.1. [originally by PR #1279; fixed by PR #2324,
issue #2325]
tools/gitlog2changelog.py.in
script was revised, in particular to
convert section titles (with contributor names coming from Git metadata)
into plain ASCII character set, for dblatex
versions which do not allow
diacritics and other kinds of non-trivial characters in sections. This can
cause successful builds of ChangeLog.pdf
file on more platforms, but at
expense of a semi-cosmetic difference in those names. [PR #2360, PR #2366]
https://github.com/networkupstools/nut/milestone/8
*.adoc
pattern
to facilitate automatic rendering in GitHub and IDE GUIs, and adding recipe
support for GitHub issue/PR links. This NEWS
file is now proper asciidoc
rendered into release-notes.pdf
(and HTML versions). [issue #1953, PR #2048]
Internally, the documents would use a new way to define cross-linking to
other pages and their chapters, to facilitate different renderers (including
GitHub UI), and file names created for "chunked HTML" documentation format
will no longer have the "chapter number, section number" format which is
not easy to maintain over time with independent builds of documentation
in NUT and the actual and historic snapshots for nut-website for example.
Chapter/Section names will be adapted to produce "chunked HTML" file names
instead. Documentation links rendered in GitHub UI should point to the HTML
pages served by a current iteration of the NUT website. [PR #226, PR #669]
configure --enable-spellcheck
toggle should add spelling checks
to make check
(by default, if tools are available) to facilitate quicker
acceptance of contributions. [#2067]
Published a new maintainer GPG key to sign tags and release artifacts, and possibly git commits as well, as part of solution for issue #1410. You can pull it from common OpenPGP servers with the following command:
:; gpg --recv-key DE0184DA7043DCF7 gpg: key DE0184DA7043DCF7: public key "Jim Klimov (Doing FOSS since last millennium) <jimklimov@gmail.com>" imported gpg: Total number processed: 1 gpg: imported: 1
as part of https://github.com/networkupstools/nut/issues/1410 solution.
Bug fixes for fallout possible due to "fightwarn" effort and other evolution in NUT v2.8.0 release:
upsdebugx()
and similar methods were converted to macros in #685
to avoid useless data manipulations and requests for logged information,
whose results would be ignored instantly because the debug level is
too low. As issue #1455 and PR #1495 found, in two cases the called
commands did "meaningfully" modify data — so without debug logs the
program misbehaved. A known regression for upscode2
driver; might
be or not be a problem with upsd
server in NUT v2.8.0 release,
fixed for NUT v2.8.1.
cyberpower-mib
(for snmp-ups
driver) sources was
arranged in NUT v2.8.0 release in a way that precluded the driver
logic from looking at all of its entries. Also a fix for instant
command definitions had in fact broken them due to other development.
Regressions fixed for NUT v2.8.1 [#1432, #2029]
dummy-ups
driver for NUT
v2.8.0 release misfired on some platforms. Regression fixed for NUT
v2.8.1 [#1420]
configure
script for custom builds [#1467]
upsdrvctl
can pass debugging level through to the launched
driver(s), they would by default stay in the foreground. This can
complicate (or simplify, when intentional) the management of service
instances. Now there are explicit upsdrvctl
options for choosing
this (-F
/-B
), although default behavior is retained. Note that
explicit foregrounding mode also keeps upsdrvctl
tool from exiting
and would not wait for one driver to complete initialization before
starting another in case of mass-management loop to start all drivers
(without specifying the single device) [#1759, #1806, #1875]
apcsmart
and apcsmart-old
handled invalid data too zealously
and aborted instead of skipping over it, like they did before [#2015]
riello_ser
and riello_usb
misfired [#2137]
libupsclient
parser of device
and host names to crash upon bad inputs (e.g. poorly resolved environment
variables in scripts). Now it should fail more gracefully [#2052]
configure --enable-inplace-runtime
option should set default values
for --sysconfdir
, --with-user
and --with-group
options to match an
existing NUT deployment — for users who are trying if a custom build
of recent codebase solves their practical issues. For "quick tests", a
shortcut operation ./ci_build.sh inplace
was added [#1714]
NUT_DEBUG_PID
envvar (presence) support was added to add current
process ID to tags with debug-level identifiers. This may be useful
when many NUT daemons write to the same console or log file. [#2118]
nutdrv_qx updates:
battery_voltage_reports_one_pack
driver option was added for devices
which "natively" report a battery.voltage
for a single battery pack or
cell, not for the whole assembly [#1279]
voltronic_qs_protocol
should now accept both "V" (as before)
and newly "H" dialects, which otherwise seem interchangeable [#1623]
armac
subdriver was enhanced to support devices with a different
response pattern than previously expected per initial contribution.
It was tested to work with Vultech V2000 and Armac PF1 series. [#1978]
nutdrv_qx and blazer updates:
usbhid-ups updates:
subdriver
configuration option, to select the
USB HID subdriver for the device manually where automatic match
does not suffice (e.g. new devices for which no vendorid
/productid
pair was built into any driver, or for different-capability devices
with same interface chips, notably "phoenixtec/liebert" and "mge") [#1369]
powerfactor
without a namespace (bug
in 2.8.0 release), fixed to outlet.powerfactor
usbhid-ups
driver should now reconnect if libusb
returned a
memory allocation error [#1422] (seen as "Can’t retrieve Report 0a:
Resource temporarily unavailable"), which can cause practical problems
in the field — the driver otherwise interpreted the situation as
ups.status
being OL OFF
and cut the power supply.
UPS.Battery.ManufacturerDate
to map
to battery.mfr.date
(not battery.date
which is the maintenance
replacement date) [#1644]
onlinedischarge_calibration
option for UPSes that report
OL+DISCHRG
when they are in calibration mode [#2104]
riello_usb updates:
upsid
to match the
specific device (not all firmware/hardware models support this) [#2075]
apcupsd-ups:
apc_modbus driver was introduced, to cover the feature gap between existing NUT drivers for APC hardware and the actual USB-connected devices (or their firmwares) released since roughly 2010, which deprecated standard USB HID support in favor of Modbus-based protocol which is used across the board (also with their network management cards). The new driver can monitor APC UPS devices over TCP and Serial connections, as well as USB with a patched libmodbus (check https://github.com/EchterAgo/libmodbus/commits/rtu_usb for now, PR pending). [#139, #2063]
dummy-ups:
repeater_disable_strict_start
option to disable the driver
exiting upon encountering any kind of error at startup (as repeater).
This option should allow for collective upsdrvctl
startup despite
individual target UPS to be repeated or upsd
not having come up yet.
[#2132]
NUT for Windows:
scripts/Windows/build-mingw-nut.sh
[#1489]
ci_build.sh
script and
Makefile
checks as used across the board for local developer builds,
Linux/illumos/FreeBSD/OpenBSD/… on dedicated NUT CI farm on Fosshost,
and MacOS on CircleCI [#1552]
snmp-ups updates:
ups.status
) between
Eaton UPSs, and rename mibs from pw
to eaton_pw_nm2
, and from
pxgx_ups
to eaton_pxg_ups
[#1715]
baytech-mib.c
subdriver: fixed baytech_outlet_status_info[]
set
of valid outlet status values [#1871]
cyberpower-mib.c
subdriver: support devices which report the shorter
Vendor OID as their sysOID, e.g. "CyberPower PowerPanel Personal" [#1997]
and support more data points including hardware status alarms [#1982]
bestfortress
driver shutdown handling was fixed to use a non-trivial
default timeout [#1820]
optiups
driver only gave accurate voltage information with 120VAC
models and assumed a 12V battery when calculating capacity. There is
a protocol command that gives a (fixed) voltage which correlates with
the voltage selection DIP switches on the back of the UPS, taking into
account whether it is a 120 or 240VAC model. Likewise, now the battery
capacity fix is applied globally, based on whether or not the battery
voltage is greater than 20V. [#2089]
GPIO drivers [#1855]:
generic_gpio_libgpiod
driver using libgpiod
backend was added
(defaults to be required on Linux, optional on other platforms)
make install
of PyNUT module and NUT-Monitor desktop
application [#1462, #1504]
riello_usb
and richcomm_usb
[#1763] and updated man pages
of all USB drivers using these options to include the same description
[#1766]
allow_duplicates
flag for common USB matching options which
may help monitor several related no-name devices (although without knowing
reliably which one is which… better than nothing) [#1756]
nut-scanner
program should now suggest same configuration fields as
those used by common USB matching options in (most of the) drivers, e.g.
adding "device" to the generated configuration section [#1790]
SIGTERM
quickly are now retried with
SIGKILL
[#1424]
driver.state
to help readers determine
whether it is initializing, reconnecting, or running regular loops [#1767]
LD_LIBRARY_PATH
as a preferred possible override
to built-in paths (note that most operating systems advise against setting
this variable unless troubleshooting, although other systems rely on it)
[#805]
upsdebugx()
should now be less
limited in the sizes of messages that they can print, such as path names
that may be quite long. Note that the OS methods manipulating the strings,
and receivers such as logging systems, may still impose limits of their own.
nut-scanner
usage and debug printouts now include the loadable library
search paths, to help troubleshooting especially in multi-platform builds;
pre-filtering of the built-in paths was introduced (to walk only existing
and unique directory names) [#317]
lt_dlopen()
implementation on the current
platform would find library files better [#805]
libltdl
in configure
script updated with fallback code to
find it on systems that deliver the library to /usr/local/lib
(e.g. on
FreeBSD) [#1577]
configure --with-nut-scanner
toggle was added, specifically
so that build environments requesting --with-all
but lack libltdl
would
abort and require either to install the dependency or explicitly forfeit
the tool (some distro packages missed it quietly in the past) [#1560]
nut-scanner
program should now by default warn about serial numbers
which do not make much sense (are duplicate, empty, all same character, etc)
[#1810]
usb_resetter
script
has been contributed to scripts/usb_resetter
(the script itself is tracked
externally on GitHub), along with a configuration example for Linux+systemd
[#1887]
Some fixes for builds on older OSes with less functional default system
shell interpreters - now autogen.sh
supports a CONFIG_SHELL
envvar
to inject its value into generated configure
script [#1736]
grep
with -E
support on Solaris as detailed
in https://github.com/networkupstools/nut/issues/1736 comments)
configure
script, reference init-script and packaging templates updated
to eradicate @PIDPATH@/nut
ambiguity in favor of @ALTPIDPATH@
for the
unprivileged processes vs. @PIDPATH@
for those running as root [#1719]
configure
script enhanced: --with-unmapped-data-points
option allows
to build SNMP and USB-HID subdrivers with entries discovered by the scripts
which generated them from data walks, but developers did not rename yet
to NUT mappings conforming to docs/nut-names.txt standards [#1699]
PyNUT.py version bumped to 1.5.0 with some improvements:
ListClients()
method fixed (was broken in many ways), and is now
CI-tested [#549]
DeviceLogin()
method added (mostly as aid to CI-test ListClients()
in a practically relevant manner, so far)
nutclient C++ library:
listDeviceClients()
and deviceGetClients(dev)
to Client
classes, and Device::getClients()
to match PyNUT capabilities [#549]
libnutclientstub
which is an
implementation of a NUT TCP client in C++ with in-memory data store.
upsclient C library:
NUT_QUIET_INIT_SSL
environment variable to hide
the infamous "Init SSL without certificate database" warning [#1662]
upsd.conf
listing of LISTEN
addresses was previously inverted
(the last listed address was applied first), which was counter-intuitive
and fixed for this release [#2012]
upsd
configured to listen on IPv6 addresses should handle only
IPv6 (and not IPv4-mappings) to avoid surprises and insecurity; it
will now warn if a host name resolves to several addresses (and will only
listen on the first hit, as before in such cases) [#2012]
LISTEN *
directives became specified, to try
handling both IPv4 and IPv6 "any" address (subject to upsd
CLI options
to only choose one, and to OS abilities). When both address families are
enabled, the upsd
data server will first try to open an IPv6 socket
asking for disabled IPv4-mapped IPv6 address support (if the OS honors
that), and then an IPv4 socket (which may fail if the IPv6 socket already
covers it anyway); in other words, you can end up with one or two separate
listening sockets. [#2012]
upsmon client changes include:
upsmon
behavior [#1761, #1680…], including new
ability to configure default POWERDOWNFLAG location — packagers are
encouraged to pick optimal location for their distributions (which
remains mounted at least read-only late in shutdown) and a new optional
POLLFAIL_LOG_THROTTLE_MAX setting [#529, #506]
upsmon
should now recognize OFF
and BYPASS
flags in ups.status
and report that these states begin or end. The OFF
state usually means
than an administrative action happened to power off the load, but the UPS
device is still alive and communicating (USB, SNMP, etc.); corresponding
MONITOR
'ed amount of power sources are considered not being "fed" for
the power value calculation purposes. The BYPASS
state is now treated
similarly to ONBATT
: currently this UPS "feeds" its load, but if later
communications fail, it is considered dead. This may have unintended
consequences for devices (or NUT drivers) that do not report these modes
correctly (e.g. an APC calibration routine seems to start with a few
seconds of "OFF" state), so the reported status is only considered as a
loss of feed if it persists for more than OFFDURATION
seconds. [#2044,
#2104]
SHUTDOWNEXIT no
configuration toggle for systems which
require a long time to stop their workload such as virtual machines.
Since the disconnection of a "secondary" client is treated by the
"primary" system as permission to proceed with its own shutdown and
power-off for the UPS, the original (now merely default) behavior to
call SHUTDOWNCMD
and immediately exit could be counter-productive.
An optional delay can also be introduced. [#2133]
upsmon
.
Extended Linux systemd support with optional notifications about daemon state (READY, RELOADING, STOPPING) and watchdog keep-alive messages [#1590]
NUT_QUIET_INIT_UPSNOTIFY=true
environment variable in init-scripts on platforms where such frameworks
are not expected. [#2136]
nut-server.service
as upsd.service
, and nut-monitor.service
as
upsmon.service
(so simple systemctl reload upsd
can work) [#1777]
BROADCAST (num)
keyword,
and a NOBROADCAST
as a shortcut for BROADCAST 0
. This allows clients
to toggle whether they want to receive send_to_all()
updates from a
driver, or only answers to requests they send [#1914]
make sockdebug
for easier developer access to the tool;
also if configure --with-dev
is in effect, it would now be installed to
the configured libexec
location. A man page was also added. [#1936]
Numerous daemons (upsd
, upsmon
, drivers, upsdrvctl
, upssched
)
which accepted -D
option for debug setting previously, now can also
honour a NUT_DEBUG_LEVEL=NUM
environment variable if no -D
arguments
were provided. Unlike those arguments, the environment variable does
not enforce that daemons run in foreground mode by default [#1915]
upssched
with enabled
debug does not stop reporting on stderr
! [#1965]
upssched
was discovered and fixed, where it ran a tight loop
stressing the CPU; it was presumably introduced between NUT v2.7.4 and
v2.8.0 releases [#1964, #1965]
# Set verbosity level 6: :; upsrw -s driver.debug=6 UPS # Set verbosity level 0 to disable the noise (even if debug_min is set): :; upsrw -s driver.debug=0 UPS1@localhost # Un-set the protocol override, honour CLI or config-file settings again: :; upsrw -s driver.debug=-1 remoteUPS@1.2.3.4
+
and a driver.killpower
instant command (for safety, must be unlocked by
driver.flag.allow_killpower
protocol setting or allow_killpower
configuration flag), which is now the first choice for driver -k
operations [#1917, #1923]
ups.conf
reloading in NUT drivers,
with a driver.reload-with-error
instant command (more commands and
signal handling may be available depending on platform), with a goal
of changing inconsequential settings like debug_min
for a running
driver. This can also benefit the drivers on systems managed by real-time
nut-driver-enumerator
and for simpler changes the drivers get only
reloaded and not redefined and restarted. Reload signals should also
be reasonably supported with upsdrvctl
tool. Relevant CLI options
for -c CMD
handing were added to drivers and upsdrvctl
, although
their availability may vary between operating systems [#1903, #1914, #1924]
SIGURG
(or SIGWINCH
on systems that lack
the former) on POSIX platforms to dump their current state information
and move on. Such report goes to stdout
of the driver process (may
be disconnected when background mode is used) — this can help with
troubleshooting [#1907]
main.c
code were enhanced to produce a libdummy_mockdrv.la
helper library during build (not intended to be installed nor distributed),
in order to facilitate creation of test programs which behave like a driver
[#1855]
size_t
, ssize_t
, uint16_t
,
time_t
etc.) in third-party client code that earlier sufficed to only
include NUT headers. Sort of regression by NUT 2.8.0 (note those consumers
still have to re-declare some numeric variable types used) [#1638, #1615]
COPYING
file was updated with licenses and attribution for certain
source code files and blocks coming from the Internet originally [#1758]
tools/gitlog2changelog.py.in
script was revised, in particular to
generate the ChangeLog
file more consistently with different versions
of Python interpreter, and without breaking the long file paths in the
resulting mark-up text [#1945, #1955]
Earlier discussions (mailing list threads, GitHub issues, etc.) could refer to this change set (too long in the making) as NUT 2.7.5.
DISABLE_WEAK_SSL=true
in upsd.conf to disable older/weaker
SSL/TLS protocols and ciphers: when NUT is built against relatively recent
versions of OpenSSL or NSS it will be restricted to TLSv1.2 or better.
For least-surprise, currently defaults to false
and complains in log
[PR #1043]
ALLOW_NO_DEVICE=true
(as an upsd.conf flag or environment
variable passed from caller of the program), to allow starting the data
server initially without any device configurations and reloading it later
to apply config changes on the fly [PR #766]
debug_min=NUM
setting (ups.conf, upsd.conf, upsmon.conf)
to specify the minimum debug verbosity for daemons. This allows "in-vivo"
troubleshooting of service daemons without editing init scripts or service
unit definitions.
synchronous
setting, which is the
new default now: auto
. Initially after driver start-up this mode
acts as the older default off
, but would fall back to on
in case
the driver fails to send reports to upsd
by overflowing the socket
buffer in async mode — so the next connections of this driver uptime
would be synchronized (potentially slower, but safer — blocking on
writes to the data server). This adaptation would primarily impact
and benefit devices with many (hundreds of) data points, such as
ePDUs and daisy chains. [issue #1309, PR #1315]
-F
/-B
), although default
behavior is retained. This change is used for simplified service unit
definitions.
Improvements for device discovery or driver "lock-picking", including general support for:
-s
option), to monitor a device which is not
detailed or mentioned in ups.conf
NUT_ALTPIDPATH
and NUT_STATEPATH
environment variables to override
the paths built into the driver binary [PR #473 and #507]
-d
option), to poll a device for one or
few (update_count ) loops, report discovered values (dump the data
tree in upsc-like format), and exit. This complements the nut-scanner
for finding and identifying devices.
support for new devices:
nutdrv_qx: several subdrivers added or improved, including:
snr
subdriver
in their ups.conf
settings because of USB chip using the same
values of VendorID/ProductID as fabula_subdriver, fuji_subdriver,
and krauler_subdriver.
add devices to HCL/DDL:
NUT-Monitor
name is retained for wrapper
script which calls one of these, such that the current system can execute
[PRs #1310, #1354]
usbhid-ups:
onlinedischarge
option for UPSes that report OL+DISCHRG
when wall power is lost [PR #811]
battery.mfr.date
for APC HID UPS [PR #1318]
snmp-ups:
input.phase.shift
variable
ondelay
(ups.delay.start
) and offdelay
(ups.delay.shutdown
) as timeticks support [PR #276]
nut-scanner: various improvements, including:
nobt
config parameter to skip battery check
on initialization/startup [PR #1256]
netxml-ups:
systemd support improvements:
PROTVER
as alias to NETVER
to report the protocol version in use.
Note that NUT codebase itself does not use this value and handles commands
and reported errors individually [issue #1347]
mode
as a driver argument, and separates the
notion of dummy-once
(new default for *.dev
files that do not change)
vs. dummy-loop
(legacy default for *.seq
and others) [issue #1385]
new protocol variables:
input.phase.shift
outlet.N.name
outlet.N.type
battery.voltage.cell.max
, battery.voltage.cell.min
battery.temperature.cell.max
, battery.temperature.cell.min
battery.status
battery.capacity.nominal
battery.date.maintenance
(and clarified purpose of battery.date
)
battery.packs.external
(and clarified purpose of battery.packs
)
experimental.*
namespace introduced [PR #1046] to facilitate
introduction of NUT drivers and their data points for which we do
not yet have concepts, or which the original driver contributors
did not map well per suitable NUT standards: this allows to balance
having those drivers available in the project vs. least surprise
for when the explicitly experimental names are changed to something
stable and standardized.
Proposed to track Date and Time values (still as "opaque strings") preferably in representations compatible to ISO-8601/RFC-3339 [PR #1076] (standards update; changes to actual codebase to be applied in the future)
Master/Slave terminology was deprecated in favor of Primary/Secondary
modes of upsmon
client:
upsd.users
and
upsmon.conf
) are supported as backwards-compatible settings,
but the obsoleted values are no longer documented.
upsmon
now
first trying to elevate privileges with PRIMARY <ups>
request,
and falling back to MASTER <ups>
just in case it talks to an
older build of an upsd
server.
net_master()
(as handler for MASTER
net command) in header and
C code for the sake of existing linked binaries, and returns the
OK MASTER-GRANTED
line to the older client that invoked it.
net_primary()
(as handler for PRIMARY
net command)
calls the exact same application logic, but returns OK PRIMARY-GRANTED
line to the client.
Build fixes:
pkg-config
to detect dependencies at configure time, as
well as fail-safe detection of presence of pkg-config (and its macros)
to survive and build without it too
upsdebugx()
were refactored as macros so there
is slightly less overhead when logging is disabled [PRs #685 and #1100]
--with-dev
and so may impact upsclient
and nutclient
(C++) consumers.
At the very least, binaries for those consumers should be rebuilt to remain
stable with NUT 2.8.0 and not mismatch int-type sizes and other arguments.
NUT command and variable naming scheme:
support for new devices:
snmp-ups:
Eaton:
macosx-ups:
nutdrv_qx:
nut-scanner:
solis:
usbhid-ups:
systemdsystemunitdir
nutdrv_qx:
tripplite_usb:
Eaton:
support for new devices:
support for new devices:
There was no public NUT 2.7.0 release.
usbhid-ups: final fix for APC Back UPS ES. APC Back UPS ES devices have buggy firmware, and this version does not cause a regression. The max_report variable should be set automatically based on the USB identification values.
maxreport
flag for usbhid-ups
driver, and as a
max_report_size
setting in code, as of NUT v2.8.2 release.
macosx-ups: new OS X Power Sources meta-driver
support for new devices:
Space
to ~
(Reported by Sebastian Pohle, Alioth bug #313636, CVE-2012-2944)
A separate patch, which applies to any faulty version, is also available:
http://trac.networkupstools.org/projects/nut/changeset/3633
For more information, refer to the Common Vulnerabilities and Exposures:
http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2012-2944
support for new devices:
support for new devices:
NUT now provides a tool, called nut-scanner, to discover supported devices, both local and remote. nut-scanner will help to ease the configuration step, and power infrastructure discovery. This development, sponsored by Eaton, supports the following methods:
support for new devices:
support for new devices:
Per original semantic versioning, there were no public NUT 2.5.x releases.
--with-doc
option help of configure
script, and
docs/configure.txt for more information.
support for new devices:
support for new devices:
support for new devices:
Per original semantic versioning, there were no public NUT 2.3.x releases.
preliminary support for Power Distribution Units (PDUs): NUT can now support PDUs, either natively (ie using NUT snmp-ups driver), or through a binding to the Powerman daemon. The list of supported PDUs is already quite long, including:
support for new devices:
support for new devices:
Per original semantic versioning, there were no public NUT 2.1.x releases.
support for new devices:
This release is a backport of the development version. Many changes have already been backported previously. Thus it is more a synchronization release, though it includes many bugfixes and support for new models.
support for new devices:
The fentonups driver now recognizes several more Megatec protocol units:
MONITOR ups-1@host-1 ... MONITOR ups-1@host-2 ... MONITOR ups-2@host-2 ... MONITOR ups-3@host-3 ...
More ancient history is not covered in detail here.
You can see docs/history.txt for more details.