This file lists changes that affect users who installed older versions of this software, or third-party integrations and library or data consumers. When upgrading from an older NUT version, be sure to check this file to see if you need to make changes to your system.
We welcome feedback from package maintainers — if you had to patch something out, or work around something in NUT code or recipes, please let us know in the issue tracker. Chances are, other distributions feel your pain, and some generalized solution belongs in the upstream project as an easy to use build configuration toggle to be shared by all interested downstream projects.
|
Note
|
For packaging (OS distribution or in-house) it is recommended to
primarily This is a good time to point out that for stricter packaging systems, it may
be beneficial to add |
-
Added a
configurescript option to--enable-shared-private-libswhich allows to deliver NUT common libraries as shared objects used by different NUT binaries, rather than linking just the used bits into each binary. This has some potential both for mayhem (so disabled by default) and for significant reduction of installation footprint. If enabled with a NUT packaging build, note there would be several more NUT shared library files to deliver with the packages (formally versioned and named by NUT release semantic version triplet). [issue #2800] -
Related to the above,
libupsclientwill remove the exported symbol fornut_debug_levelvariable in a later NUT release, and now introduces theupscli_set_debug_level()andupscli_get_debug_level()methods. [PR #3330] -
For ages, most recipes for building NUT had customized the
sysconfdirto be/etc/nut, which is not exactly the system configuration directory. This is finally deprecated, with new--with-confdirconfiguration option taking over the role of a full path to configuration files (by default${sysconfdir}${confdir_suffix}), and new--with-confdir-suffixallowing to specify just/nutor/upsthat would be tacked onto the default${sysconfdir}to resolve the${confdir}. Default behavior should be same as with previous builds: ifsysconfdiris customized (orprefixis kept at built-in default), theconfdir_suffixwill default to empty; otherwise it assumes the value of/${PACKAGE_NAME}to become/nutin most cases. A--with-confdir-examplesoption was also introduced, to help distributions that place*.conf.samplefiles into docs or other locations. [#3131] -
Source directory
data/htmlwas renamed todata/htmlcgiin order to better reflect its contents and purpose, compared to documentation-orientedhtml*directories (and recipe variable names). This may impact some packaging recipes which do not rely onmake installalone. Note that more files feature in the installation, e.g. a NUT logo rendition to use as favicon. [#3049, #3249] -
Some fixes were applied to HTML templates for NUT CGI clients. It can be useful for NUT deployments being upgraded to compare the files they have installed (and possibly customized) with the
*.html.samplefiles delivered by the new build. [PR #3180] -
Introduced a
@NUT_UPSSTATS_TEMPLATE@command which the NUT CGI template files now MUST start with (safety check that we are reading a template). While the deliveredupsstats*.html.samplefiles would include the change, ultimateupsstats*.htmltemplates deployed for end-users MUST be updated. [issue #3252, PR #3249] -
Dropped the
compilescript from Git sources. It originates from automake and is added to work area (if missing) duringautogen.shrituals anyway (asmakesays,'automake --add-missing' can install 'compile'when you run without it). It is still distributed as part ofmake disttarball. We are open to any feedback whether this removal impacts NUT rebuilds on any systems. [#1209] -
Default
PIDPATHis now more strictly/var/run, unless building on a system conforming to FHS-3.0 standard where that location is absent or is a symlink, while/runexists and is a true directory. Package recipes usually override--with-pidpathanyway to provide a dedicated location for NUTroot-owned daemon PID files. [#3099] -
The autoconf managed macro for
--with-portoption was renamed from plainPORTto less ambiguousNUT_PORTto avoid potential conflicts with any third-party code. If anyone did use this macro in their custom builds or integrations, some renaming (or stubbed definitions to the effect ofPORT=NUT_PORT) may be needed. [#3238] -
In drivers using the common
main.candmain.hframework, introduced avoid upsdrv_tweak_prognames(void)required method (may be no-op) to optionally tweakprognames[]entries now that there is certain support to accept program name aliases, not just one hard-coded string value. Any third-party drivers may require rebuilding to extend with this method. Any drivers that would undergo promotion with renaming can take advantage of this new facility to keep working under both old and new file names. [#3101] -
The
upsdrvquery*semi-internal API for talking on the driver socket was updated with default handling for SIGPIPE. If your consumer wants to catch it themselves, instead of usingerrno=EPIPEafter a failed call, you can useupsdrvquery_NOSIGPIPE=0to disable neutering of the signal inside the API itself. [PR #3277] -
Added new API methods and defined bitmap values for
libupsclientC binding to query and report SSL capabilities of the library build (none, OpenSSL, Mozilla NSS):upscli_ssl_caps_descr()andupscli_ssl_caps(). [PR #33xx] -
Fixed man page naming for
nutdrv_siemens-sitop(.8)(dash vs. underscore) to match the driver program name. Packaging recipes may have to be updated. Follow-up from slightly botched renaming in original contribution. [PR #545] -
The
configurescript would now probe (if it can) the operating systems for more user and group account names, such asupsmon,nutmon,ups,nut(last hit wins, separately for user and groups accounts) settling on one of those if detected instead ofnobody(and optionallynogroup). It would also warn ifnobodyornogroupend up being used for a build. This is not likely to affect package builds (which usually define the accounts to use), but may (hopefully positively) affect rebuilds of NUT on systems where an older version is already deployed. [#3173] -
The
configurescript should now try harder to report specifically the "purelib" location asPYTHON*_SITE_PACKAGES. Packaging recipes may have to be updated. [#1209] -
New supported values were introduced for
--with-python{,2,3}=auto-prio=NUM: this allows to auto-prioritize some one available Python interpreter. Default settings were changed from plainauto(allowing for multiplepython*interpreters andsite-packagelocations to be used), to prefer apython3if available, elsepython2, elsepython, and forget about others even if discovered. Packaging recipes may have to be updated, either to explicitly package the binding for several versions, or to not-deliver files no longer installed into the prototype area. [#1792] -
Added a
configurescript option to (primarily)--disable-threadingfor systems with detected but brokenlibpthreadsupport, which can causenut-scannerto crash while loading system libraries. [#3300] -
Introduced a new driver category for interaction with OS-reported UPS devices via D-Bus, with the
nut-upowerdriver as the first implementation. This driver requiresglib-2.0andgio-2.0development libraries to be available at build time. For packagers, this adds new dependencies if the build should include this driver. [PR #3279]
-
Introduced handling (possibly rewriting) for man page section "Overviews, conventions, and miscellaneous" (commonly number 7), to deliver support for
man nutqueries (NUT overview manual page also created). A newconfigure --with-docs-man-dir-as-baseoption 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. As a packager, you may have to update the recipes accordingly (especially if your platform rewrites section numbers). [#2945, #2950] -
Introduced
powervar-cs(Serial) andpowervar-cu(USB) drivers which share apowervar-cxmanual page, rendered once, with pages named after the driver aliased to it in post-processing. This may impact packaging, depending on its technology. Feel free to deliver file copies, symbolic or hard links as seems right for your platform. [#2988] -
Option to
configure --enable-docs-man-for-progs-built-onlywas 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] -
Added APC BVKxxxM2 to list of devices where
lbrb_log_delay_sec=Nmay be necessary to address spurious LOWBATT and REPLACEBATT events. [issue #2942] -
In
nutdrv_qx, updatedmegatecprotocol subdriver for more detailed responses toIquery which may returnups.serial(after a shorterdevice.mfr) and thebattery.runtime(after a shorterdevice.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. theups.firmwareversion becomes shorter or none of these are reported), please let NUT developers know. [#2980]
-
NUT development snapshots can now have more version components than the standard semantic versioning triplet, optionally adding the amount of commits on the development trunk since previous release, and the amount of commits on a feature branch that are unique to it. Release artifacts that have zeroes in both positions would have them stripped and still have the standard "semver" exposed, but the development snapshots can now be more reasonably upgraded with automated tooling. A copy of the current version information would be embedded into "dist" archives as a
VERSION_DEFAULTfile, so it can be used without git. Certain distros can benefit from aVERSION_FORCEDfile or aNUT_VERSION_FORCEDenvironment variable exported from their build system, e.g. viaecho NUT_VERSION_FORCED=1.1.1 > VERSION_FORCED. Unfortunately, some appliances tag all software the same with their firmware version; if this is required, a (NUT_)VERSION_FORCED_SEMVER envvar or file can help identify the actual NUT release version triplet used on the box. Please use it, it immensely helps with community troubleshooting! Documentation about this would be maintained indocs/nut-versioning.adoc[issue #1949] -
When packaging or custom-building for (Linux) distributions with systemd, you can now take advantage of
nut-systemd.presetfile to enable or disable certain NUT units by default; its comments document each choice. [issue #2721] -
A
nut-udev-settle.servicewas introduced to replace dependency on thesystemd-udev-settle.servicewhich is deprecated and causes warnings on some systems. It was shown to benefit NUT use-cases however. [#2638] -
Reference packages prepared by
make packageshould now separate thePACKAGE_VERSIONfrom the platform-dependent prefix by a dash character in the ultimate package file name. Previously they were glued together for some platform targets (HPUX, Solaris). Solaris SVR4 package file names should new differentiatei386vs.amd64andsparcvs.sparcv9, depending ontarget_cpuof the build. If you had any scripts relying on the older pattern, they may have to be updated. -
The
make distgoal now takes more care to require availability of the man pages to put into the prepared distribution archive. Development and CI builds on platforms unable to fulfill this goal can usemake distcheck-ci(andmake dist-ci) to fake presence of pre-built man pages with placeholder files, to complete other aspects ofdistcheckvalidation. [#2842] -
The PyPI distribution of the
PyNUTClientmodule 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. OS distribution package recipes that deliver the module separately (e.g. as part of Python ecosystem rather than NUT) may have to adjust. [#2773] -
The NUT-Monitor GUI application localization was updated;
make installshould now deliver alsoxx_YY.UTF-8pattern named symbolic links to the short-named directories and files involved, since some platforms insist on having those for translations to be found — this should be reflected in OS packaging recipes as well. [#2845] -
New
libupsclientAPI methods added:-
upscli_str_add_unique_token()andupscli_str_contains_token(), to help C NUT clients processups.statusand similarly structured strings same way as NUT core code base. [#2852, #2859] -
upscli_set_default_connect_timeout()to modify the internal timeout used byupscli_connect()(default 0 still means blocking connections, positive values should time-limit the connection attempts), andupscli_get_default_connect_timeout()to retrieve its copy. [#2847]
-
-
API versions of
libupsclientandlibnutscanexport more symbols now, and so were bumped to new "current" numbers; this may impact the naming of shared object files to be delivered by updated packaging. [#2895] -
Standard NUT clients including
upsc,upscmd,upsrw,upslog,upsmon,upsimage,upssetandupsstats) were updated to default with a 10-second connection establishment timeout in case of name resolution lags or unresponsive hosts (notably a problem withupsmoncontacting many remote systems at once). This may potentially impact NUT deployments which somehow relied on the blocking behavior of these clients; you can use theNUT_DEFAULT_CONNECT_TIMEOUTenvironment variable to fix this. [#2847] -
Several NUT clients including
upscmd,upsrw,upsimage,upsset,upsstats, andupslog(during reconnection), did notUPSCLI_CONN_TRYSSLso went plaintext even when secure connections were possible. Fixed to at least try being secure, same way asupscdoes for a long time. This may cause console or log messages when SSL can not be initialized, you can use theNUT_QUIET_INIT_SSLenvironment variable to suppress them where the cryptography is known to be not set up, so the warnings bring no value. [#2847] -
lib/*.pc.in: propagate-R/PATH(or equivalent — as detected by theconfigurescript for the currently used compiler and linker toolkits) inpkg-configmetadata pointing to NUT library installation location (by default not in system prefix) to help third-party clients link with us automatically. If this causes issues,--disable-ldflags-nut-rpath(-cxx)options (or--enable…="…"with specific linker arguments) can help. [#2782, #2865] -
Updated man page generation with
configurescript 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) -
upsmonshould now integrate natively with systemd-driven OS sleep events (built with systemd version 221 or newer "inhibitor interface"), so various hacks previously packaged into/usr/lib/systemd/system-sleep/scripts or units requiring/conflicting with thesleep.targetmay be obsolete. For fallback with older systemd, anut-sleep.serviceis provided now. [#1070, #2596, #2597] -
Added systemd and SMF service integration for
upslogas anut-loggerservice (disabled by default, needs aupslog.conffile to deliver theUPSLOG_ARGS=…setting for actual monitoring and logging). [#1803] -
Handling of per-UPS
ALARMstate was introduced toupsmon, allowing it to optionally treat it as a factor in deciding that the device is in a "critical" state (polled more often, assumed dead if communications are lost). Since it is up to devices and their NUT drivers what they would raise as an alarm (might be something as mundane as ECO mode being active), some alarms can contribute to unwanted/early shutdowns. For this reason a0|1settingALARMCRITICALwas introduced intoupsmon.conf(default is1), for such users to be able to prevent theirupsmonfrom treating theALARMstatus as overly severe when it is not in fact. [#2658, #415] -
usbhid-upsandnetxml-upsupdated to handle "No battery installed!" alarm also to set theRB(Replace Battery) value inups.status. This may cause dual triggering of notifications (as anALARMgenerally and as an importantREPLBATTstatus in particular) inupsmon, but better safe than sorry. [#415] -
usbhid-upssubdriverPowerCOM HIDseemingly sent UPSshutdownandstayoffcommands in wrong byte order, at least for devices currently in the field. Driver now sends the commands in a way that satisfies new devices; just in case a flag togglepowercom_sdcmd_byte_order_fallbackwas added to set the old behavior (if some devices do need it). [PR #2480] -
usbhid-upssubdriverCyberPower HIDdefaultpollfreqsped up to 12 seconds (common default is 30 seconds). Feedback is welcome if this improves connection stability or overwhelms the UPS controller instead. [issue #1689, PR #2718] -
usbhid-upssubdriverCyberPower HIDdefaultoffdelayis set to 60 andondelayto 120 seconds, in accordance with man page suggestions; users with custom settings not divisible by 60 will be loudly warned. [#1394] -
snmp-upssubdrivernetvision-mib: synchronizednetvision_output_infowith the currently availableSOCOMECUPS-MIB.txt; this can impact some other devices using that MIB (negatively, if the older mappings were indeed correct for any practical cases, and were not a typo). [#2803] -
nutdrv_qxfixedhunnox_protocol()to honour the optionalnovendorsetting for devices that are confused by such query (e.g. DEXP LCD EURO 1200VA); it may be remotely possible that some other devices could begin to misbehave due to this fix — please let us know then. [#2839] -
mge-utalkdriver will no longer set non-standard status valuesCOMMFAULTandALARM(for a specific status bit); instead, it will set modernups.alarmwith valuesCOMMFAULTand/orDEVICEALARM(and raise anALARMinups.statusfor either, as standard alarms go). If your clients (e.g. custom parsing scripts) for devices supported by this driver depended on those non-standard tokens inups.status, they would have to be updated to handle the new token values inups.alarminstead. [#2708] -
Added support for
lbrb_log_delay_sec=Nsetting to delay propagation ofLBorLB+RBstate (buggy with APC BXnnnnMI devices/firmwares issued circa 2023-2024 which flood the logs with spurious LOWBATT and REPLACEBATT events). This may work better for some devices when combined with flags likeonlinedischarge_calibrationandlbrb_log_delay_without_calibrating. [#2347] -
Enabled installation of built PDF and HTML (including man page renditions) files under the configured
docdir. It seems previously they were only built (if requested) but not installed viamake, unlike the common man pages which are delivered automatically. Packaging recipes can likely be simplified now. [#2445] -
A
NUT_DEBUG_SYSLOGenvironment variable was introduced to tweak activation of syslog message emission (and related detachment ofstderrwhen daemons are backgrounding), which can be useful for systemd service units. It can be set vianut.conffile for all standard consumers, or patched/dropped-in to systemd unit definitions specifically (less recommended, but may be easier to package). The positive effect would be avoiding duplicate logging as bothsyslogandstderrending up in the same journal. [#2394] -
A
CHANGELOG_REQUIRE_GROUP_BY_DATE_AUTHORsetting was added (formakecalls and used bytools/gitlog2changelog.py.inscript), and it defaults totrueallowing for better ordered documents at the cost of some memory during document generation. Resource-constrained builders (working from a Git workspace, not tarball archives) may have to set it tofalsewhen callingmakefor NUT. [#2510] -
Drivers should now be able to set
STATEPATHviaups.confto matchupsdcustom configuration ability; in fact, the data server would prefer the value fromups.confover the one inupsd.conf, if both are present. Note thatNUT_STATEPATHenvironment variable trumps both. [issue #694] -
NUT products like
nut-scanner, which dynamically load shared libraries at run-time without persistent pre-linking, should now know the library file names that were present during build (likely encumbered with version suffixes), and prefer them over plainlibname.sopatterns used previously (which on some platforms are only delivered by development packages as symlinks). Packaging recipes can likely be simplified now: some distros certainly did patch NUT source to similar effect). [#2431] -
Numerous changes to
nut-scannerand symbols that itslibnutscan.sodelivers have caused a library version bump. New methods have been added and one structure (nutscan_ipmi_t) updated in a (hopefully) backwards compatible manner. [PR #2523, issue #2244 and numerous PRs for it] -
The
nutconftool added to main codebase with NUT v2.8.2 release could be packaged as a single program (with just a dependency onlibnutscan), e.g. the library code with configuration file processing logic was built into it. Starting with NUT v2.8.3, thelibnutconfmay optionally be built as a standalone shared library, to deliver for development of integrations using--with-dev-libnutconfoption. In this case thenutconftool program would also depend on it for run-time linking. This may have to be considered in packaging recipes. [#2828] -
Internal API change for
sendsignalpid()andsendsignalfn()methods, which can impact NUT forks which build usinglibcommon.laand similar libraries. Added new last argument withconst char *progname(may beNULL) to check that we are signalling an expected program name when we work with a PID. With the same effort, NUT programs which deal with PID files to send signals (upsd,upsmon, drivers andupsdrvctl) would now default to a safety precaution — checking that the running process with that PID has the expected program name (on platforms where we can determine one). This might introduce regressions for heavily customized NUT builds (e.g. embedded in NAS or similar devices) whose binary file names differ significantly from aprognamedefined in the respective NUT source file, so a booleanNUT_IGNORE_CHECKPROCNAMEenvironment 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] -
More environment variable support was added to NUT programs, primarily aimed at wrappers such as init scripts and service unit definitions, allowing to tweak what (and whether) they write into debug traces, and so "make noise" or "bring invaluable insights" to logs or terminal; they can generally be used for services and init scripts via
nut.conf:-
See
NUT_IGNORE_CHECKPROCNAMEandNUT_DEBUG_SYSLOGabove. [#1915] -
See
NUT_DEFAULT_CONNECT_TIMEOUTabove. [#2847] -
A
NUT_QUIET_INIT_BANNERenvvar (presence or "true" value) prevents tool name and NUT version banner from being printed out when programs start. [issues #1789 vs. #316]
-
-
A
configurescript option to build--with-modbus+usbwas added to let the caller insist on the use of USB-capable libmodbus (or fail the NUT build attempt). Certain build arguments can default this option to become enabled (implicitly):configure --with-modbus --with-usband 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-capableapc_modbusdriver (currently this requires a custom-built libmodbus, can be a static build to avoid conflicts with OS). [#2666] -
A
configurescript option to--enable-NUT_STRARG-alwayswas added to enable theNUT_STRARGmacro (to handleNULLstring printing) even if system libraries seem to safely support this behavior natively. This should primarily help against overly zealous static analysis tools in recent compiler generations. [#2585]
-
Builds requested with a specific C/C language standard revision via `CFLAGS` and `CXXFLAGS` should again be honoured. There was a mishap with the `m4` scripting for `autoconf` which could have caused use of C11/C11 if compiler supported it, regardless of a request. [PR #2306]
-
Added generation of FreeBSD/pfSense quirks for USB devices supported by NUT (may get installed to
$datadire.g./usr/local/share/nutand need to be pasted into your/boot/loader.conf.local). [#2159] -
nut-scanner now does not propose active
bus,busportanddevicevalues when generating device configurations by default. They may appear as comments, or enabled by specifying the-Ucommand-line option several times. [#2221] -
The
tools/gitlog2changelog.py.inscript was revised, in particular to convert section titles (with contributor names) into plain ASCII character set, fordblatexversions which do not allow diacritics and other kinds of non-trivial characters in sections. A number of other projects seem to use the NUT version of the script, and are encouraged to look at related changes inconfigure.acandMakefile.amrecipes. [PR #2360, PR #2366]
-
NUT documentation recipes were revised, so many of the text source files were renamed to
*.adocpattern. Newly, arelease-notes.pdfand HTML equivalents are generated. Packages which deliver documentation may need to update the lists of files to ship. [#1953] Developers may be impacted by newconfigure --enable-spellchecktoggle (should add spelling checks tomake checkby default, if tools are available) to facilitate quicker acceptance of contributions. Packaging systems may now want to explicitly disable it, if it blocks package building (pull requests to update thedocs/nut.dictare a better and welcome solution). [#2067] -
Several improvements regarding simultaneous support of USB devices that were previously deemed "identical" and so NUT driver instances did not start for all of them:
-
Some more drivers should now use the common USB device matching logic and the 7
ups.confoptions for that [#1763], and man pages were updated to reflect that [#1766]; -
The
nut-scannertool should suggest these options in its generated device configuration [#1790]: hopefully these would now suffice for sufficiently unique combinations; -
The
nut-scannertool should also suggest sanity-check violations as comments in its generated device configuration [#1810], e.g. bogus or duplicate serial number values; -
The common USB matching logic was updated with an
allow_duplicatesflag (caveat emptor!) which may help monitor several related no-name devices on systems that do not discern "bus" and "device" values (although without knowing reliably which one is which… sometimes it is better than nothing) [#1756].
-
-
Work on NUT for Windows branch led to situation-specific definitions of what in POSIX code was all "file descriptors" (an
inttype). Now such entities are namedTYPE_FD,TYPE_FD_SERorTYPE_FD_SOCKwith some helper macros to name and determine "invalid" values (closed file, etc.) Some of these changes happened in NUT header files, and at this time it was not investigated whether the set of files delivered for third-party code integration (e.g. C/C++ projects binding withlibnutclientor `libupsclient) is consistent or requires additional definitions/files. If something gets broken by this, it is a bug to address in future [#1556] -
Further revision of public headers delivered by NUT was done, particularly to address lack of common data types (
size_t,ssize_t,uint16_t,time_tetc.) 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]-
For practical example of NUT consumer adaptation (to cater to both old and new API types) please see collectd/collectd#4043
-
-
Added support for
make installof PyNUT module and NUT-Monitor desktop application — such activity was earlier done by packages directly; now the packaging recipes may use NUT source-code facilities and package just symlinks as relevant for each distro separately [#1462, #1504] -
The
upsd.conflisting ofLISTENaddresses was previously inverted (the last listed address was applied first), which was counter-intuitive and fixed for this release. If user configurations somehow relied on this order (e.g. to prioritize IPv6 vs. IPv4 listeners), configuration changes may be needed. [#2012] -
The
upsdconfigured to listen on IPv6 addresses should handle only IPv6 (and not IPv4-mappings like it might have done before) to avoid surprises and insecurity — if user configurations somehow relied on this dual support, configuration changes may be needed to specify both desired IP addresses. Note that the daemon logs will now warn if a host name resolves to several addresses (and will only listen on the first hit, as it did before in such cases). [#2012] -
A definitive behavior for
LISTEN *directives became specified, to try handling both IPv4 and IPv6 "any" address (subject toupsdCLI options to only choose one, and to OS abilities). This use-case may be practically implemented as a single IPv6 socket on systems with enabled and required IPv4-mapped IPv6 address support, or as two separate listening sockets - logged messages to this effect (e.g. inability to listen on IPv4 after opening IPv6) are expected on some platforms. End-users may also want to reconfigure theirupsd.conffiles to remove some now-redundantLISTENlines. [#2012] -
Added support for
make sockdebugfor easier developer access to the tool; also ifconfigure --with-devis in effect, it would now be installed to the configuredlibexeclocation. A man page was also added. [#1936] -
NUT software-only drivers (dummy-ups, clone, clone-outlet) separated from serial drivers in respective Makefile and configure script options - this may impact packaging decisions on some distributions going forward [#1446]
-
GPIO category of drivers was added (
--with-gpioconfigure script option) - this may impact packaging decisions on some (currently Linux released 2018+) distributions going forward [#1855] -
An explicit
configure --with-nut-scannertoggle was added, specifically so that build environments requesting--with-allbut lackinglibltdlwould abort and require the packager either to install the dependency or explicitly forfeit building the tool (some distro packages missed it quietly in the past) [#1560] -
An
upsdebugx_report_search_paths()method in NUT common code was added, and exposed inlibnutscan.sobuilds in particular - API version for the public library was bumped [#317] -
Some environment variable support was added to NUT programs, primarily aimed at wrappers such as init scripts and service unit definitions, allowing to tweak what (and whether) they write into debug traces, and so "make noise" or "bring invaluable insights" to logs or terminal:
-
A
NUT_DEBUG_LEVEL=NUMenvvar allows to temporarily boost debugging of many daemons (upsd,upsmon, drivers,upsdrvctl,upssched) without changes to configuration files or scripted command lines. [#1915] -
A
NUT_DEBUG_PIDenvvar (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, such as in containers/plugins for Home Assistant, storage appliances, etc. [#2118] -
A
NUT_QUIET_INIT_SSLenvvar (presence or "true" value) preventslibupsclientconsumers (notoriouslyupsc) from reporting whether they have initialized SSL support. [#1662] -
A
NUT_QUIET_INIT_UPSNOTIFYenvvar (presence or "true" value) prevents daemons which can notify service management frameworks (such as systemd) about passing their lifecycle milestones, to not report loudly if they could not do so (e.g. running on a system without a framework, or misconfigured so they could not report and the OS would restart the false-positively "unresponsive" service). [#2136]
-
-
configurescript, reference init-script and packaging templates updated to eradicate@PIDPATH@/nutambiguity in favor of@ALTPIDPATH@for the unprivileged processes vs.@PIDPATH@for those running as root [#1719] -
The "layman report" of NUT configuration options displayed after the run of
configurescript can now be retained and installed by using the--enable-keep_nut_report_featureoption; packagers are welcome to make use of this, to better keep track of their deliveries [#1826, #1708] -
Renamed generated nut-common.tmpfiles(.in) ⇒ nut-common-tmpfiles.conf(.in) to install a /usr/lib/systemd-tmpfiles/*.conf pattern [#1755]
-
If earlier NUT v2.8.0 package recipes for your Linux distribution dealt with this file, you may have to adjust its name for newer releases.
-
Several other issues have been fixed related to this file and its content, including #1030, #1037, #1117 and #1712
-
-
Extended Linux systemd support with optional notifications about daemon state (READY, RELOADING, STOPPING) and watchdog keep-alive messages. Note that
WatchdogSec=values are currently NOT pre-set into systemd unit file templates provided by NUT, this is an exercise for end-users based on sizing of their deployments and performance of monitoring station [#1590, #1777] -
snmp-ups: some subdrivers (addressed using the driver parameter
mibs) were renamed:pwis noweaton_pw_nm2, andpxgx_upsiseaton_pxg_ups[#1715] -
The
tools/gitlog2changelog.py.inscript was revised, in particular to generate theChangeLogfile more consistently with different versions of Python interpreter, and without breaking the long file paths in the resulting mark-up text. Due to this, a copy of this file distributed with NUT release archives is expected to considerably differ on first glance from its earlier released versions (not just adding lines for the new release, but changing lines in the older releases too) [#1945, #1955]
-
Note to distribution packagers: this version hopefully learns from many past mistakes, so many custom patches may be no longer needed. If some remain, please consider making pull requests for upstream NUT codebase to share the fixes consistently across the ecosystem. Also note that some new types of drivers (so package groups with unique dependencies) could have appeared since your packaging was written (e.g. with modbus), as well as new features in systemd integration (
nut-driver@instancesand thenut-driver-enumeratorto manage their population), as well as updated Python 2 and Python 3 support (again, maybe dictating different package groups) as detailed below. -
Due to changes needed to resolve build warnings, mostly about mismatching data types for some variables, some structure definitions and API signatures of several routines had to be changed for argument types, return types, or both. Primarily this change concerns internal implementation details (may impact update of NUT forks with custom drivers using those), but a few changes also happened in header files installed for builds configured
--with-devand so may impactupsclientandnutclient(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. -
libusb-1.0: NUT now defaults to building against libusb-1.0 API version if the configure script finds the development headers, falling back to libusb-0.1 if not. Please report any regressions.
-
apcupsd-ups: When monitoring a remote apcupsd server, interpret "SHUTTING DOWN" as a NUT "LB" status. If you were relying on the previous behavior (for instance, in a monitor-only situation), please adjust your upsmon settings. Reference: #460
-
Packagers: the AsciiDoc detection has been reworked to allow NUT to be built from source without requiring asciidoc/a2x (using pre-built man pages from the distribution tarball, for instance). Please double-check that we did not break anything (see docs/configure.txt for options).
-
Driver core: options added for standalone mode (scanning for devices without requiring ups.conf) - see docs/man/nutupsdrv.txt for details.
-
oldmge-shut has been removed, and replaced by mge-shut.
-
New drivers for devices with "Qx" (also known as "Megatec Q*") family of protocols should be developed as sub-drivers in the
nutdrv_qxframework for USB and Serial connected devices, not as updates/clones of older e.g.blazerfamily andbestups. Sources, man pages and start-up messages of such older drivers were marked with "OBSOLETION WARNING". -
liebert-esp2: some multi-phase variable names have been updated to match the rest of NUT.
-
netxml-ups: if you have old firmware, or were relying on values being off by a factor of 10, consider the
do_convert_deciflag. See docs/man/netxml-ups.txt for details. -
snmp-ups: detection of Net-SNMP has been updated to use
pkg-configby default (if present), rather thannet-snmp-config(-32|-64)script(s) as the only option available previously. The scripts tend to specify a lot of options (sometimes platform-specific) in suggestedCFLAGSandLIBScompared to the packagedpkg-configinformation which also works and is more portable. If this change bites your distribution, please bring it up in https://github.com/networkupstools/nut/issues or better yet, post a PR. Also note that./configure --with-netsnmp-config(=yes)should set up the preference of the detected script overpkg-configinformation, if both are available, and--with-netsnmp-config=/path/namewould as well. -
snmp-ups: bit mask values for flags in earlier codebase were defined in a way that caused logically different items to have same numeric values. This was fixed to surely use different definitions (so changing numbers behind some of those macro symbols), and testing with UPS, ePDU and ATS hardware which was available did not expose any practical differences.
-
usbhid-ups: numeric data conversion from wire protocol to CPU representation in GetValue() was completely reworked, aiming to be correct on all CPU types. That said, regressions are possible and feedback is welcome.
-
nut-scanner: Packagers, take note of the changes to the library search code in common/common.c. Please file an issue if this does not work with your platform.
-
dummy-ups can now specify
modeas a driver argument, and separates the notion ofdummy-once(new default for*.devfiles that do not change) vs.dummy-loop(legacy default for*.seqand others) [issue #1385]-
Note this can break third-party test scripts which expected
*.devfiles to work as a looping sequence with aTIMERkeywords to change values slowly; now such files should get processed to the end once. Specifymode=dummy-loopdriver option or rename the data file used in theportoption for legacy behavior. Use/Test-cases which modified such files content externally should not be impacted.
-
-
Python: scripts have been updated to work with Python 3 as well as 2.
-
PyNUT module (protocol binding) supports both Python generations.
-
NUT-Monitor (desktop UI client) got separated into two projects: one with support for Python2 and GTK2, and another for Python3 and Qt5. On operating systems that serve both environments, either of these implementation should be usable. For distributions that deprecated and removed Python2 support, it is a point to consider in NUT packages and their build-time and installation dependencies. The historic filenames for desktop integration (
NUT-Monitorscript andnut-monitor.desktop) are still delivered, but now cover a wrapper script which detects the environment capabilities and launches the best suitable UI implementation (if both are available).
-
-
apcsmart: updates to CS "hack" (see docs/man/apcsmart.txt for details)
-
upsdebugx(): added
[D#]prefix to log entries with level > 0 so if any scripts or other tools relied on parsing those messages making some assumptions, they should be updated -
upsdebugx() and related methods are now macros, optionally calling similarly named implementations like s_upsdebugx() as a slight optimization; this may show up in linking of binaries for some customized build scenarios
-
libraries, tools and protocol now support a
TRACKINGID to be used with anINSTCMDorSET VARrequests; for details see docs/net-protocol.txt and docs/sock-protocol.txt -
upsrw: display the variable type beside ENUM / RANGE
-
Augeas: new
--with-augeas-lenses-dirconfigure option.
-
scripts/systemd/nut-server.service.in: Restore systemd relationship since it was preventing upsd from starting whenever one or more drivers, among several, was failing to start
-
Fix UPower device matching for recent kernels, since hiddev* devices now have class "usbmisc", rather than "usb"
-
macosx-ups: the "port" driver option no longer has any effect
-
Network protocol information: default to type NUMBER for variables that are not flagged as STRING . This point is subject to improvements or change in the next release 2.7.5. Refer to docs/net-protocol.txt for more information
-
The linkman:nutdrv_qx[8] driver will eventually supersede linkman:bestups[8]. It has been tested on a U-series Patriot Pro II. Please test the new driver on your hardware during your next maintenance window, and report any bugs.
-
If you are upgrading from a new install of 2.7.1 or 2.7.2, double-check the value of POWERDOWNFLAG in $prefix/etc/upsmon.conf - it has been restored to /etc/killpower as in 2.6.5 and earlier.
-
If you use upslog with a large sleep value, you may be interested in adding
killall -SIGUSR1 upslogto any OB/OL script actions. This will force upslog to write a log entry to catch short power transients. -
Be sure that your SSL keys are readable by the NUT system user. The SSL subsystem is now initialized after
upsdforks, to work around issues in the NSS library. -
The systemd nut-server.service does not Require nut-driver to be started successfully. This was previously preventing upsd startup, even for just one driver failure among many. This also matches the behavior of sysV initscripts.
-
upsdrvctl is now installed to $prefix/sbin rather than $driverexec. This usually means moving from /bin to /sbin, apart from few exceptions. In all cases, please adapt your scripts.
-
FreeDesktop Hardware Abstraction Layer (HAL) support was removed. Please adapt your packaging files, if you used to distribute the nut-hal-drivers package.
-
This is a good time to point out that for stricter packaging systems, it may be beneficial to add "--enable-option-checking=fatal" to the ./configure command line, in order to quickly pick up any other removed option flags.
-
The linkman:apcsmart[8] driver has been replaced by a new implementation. There is a new parameter, 'ttymode', which may help if you have a non-standard serial port, or Windows. In case of issues with this new version, users can revert to apcsmart-old.
-
The linkman:nutdrv_qx[8] driver will eventually supersede blazer_ser and blazer_usb. Options are not exactly the same, but are documented in the nutdrv_qx man page.
-
Mozilla NSS support has been added. The OpenSSL configuration options should be unchanged, but please refer to the linkman:upsd.conf[5] and linkman:upsmon.conf[5] documentation in case we missed something.
-
linkman:upsrw[8] now prints out the maximum size of variables. Hopefully you are not parsing the output of upsrw - it would be easier to use one of the NUT libraries, or implement the network protocol yourself.
-
The jNut source is now here: https://github.com/networkupstools/jNut
-
users are encouraged to update to NUT 2.6.5, to fix a regression in upssched.
-
mge-shut driver has been replaced by a new implementation (newmge-shut). In case of issue with this new version, users can revert to oldmge-shut. UPDATE: oldmge-shut was dropped between 2.7.4 and 2.8.0 releases.
-
users are encouraged to update to NUT 2.6.4, to fix upsd vulnerability (CVE-2012-2944: upsd can be remotely crashed).
-
users of the bestups driver are encouraged to switch to blazer_ser, since bestups will soon be deprecated.
-
apcsmart driver has been replaced by a new implementation. In case of issue with this new version, users can revert to apcsmart-old.
-
users of the megatec and megatec_usb drivers must respectively switch to blazer_ser and blazer_usb.
-
users of the liebertgxt2 driver are advised that the driver name has changed to liebert-esp2.
-
The default subdriver for the blazer_usb driver USB id 06da:0003 has changed. If you use such a device and it is no longer working with this driver, override the 'subdriver' default in 'ups.conf' (see man 8 blazer).
-
NUT ACL and the allowfrom mechanism has been replaced in 2.4.0 by the LISTEN directive and tcp-wrappers respectively. This information was missing below, so a double note has been added.
-
The nut.conf file has been introduced to standardize startup configuration across the various systems.
-
The cpsups and nitram drivers have been replaced by the powerpanel driver, and removed from the tree. The cyberpower driver may suffer the same in the future.
-
The al175 and energizerups drivers have been removed from the tree, since these were tagged broken for a long time.
-
Developers of external client application using libupsclient must rename their "UPSCONN" client structure to "UPSCONN_t".
-
The upsd server will now disconnect clients that remain silent for more than 60 seconds.
-
The files under scripts/python/client are distributed under GPL 3+, whereas the rest of the files are distributed under GPL 2+. Refer to COPYING for more information.
-
The generated udev rules file has been renamed with dash only, no underscore anymore (i.e. 52-nut-usbups.rules instead of 52_nut-usbups.rules)
-
The configure option "--with-lib" has been replaced by "--with-dev". This enable the additional build and distribution of the static version of libupsclient, along with the pkg-config helper and manual pages. The default configure option is to distribute only the shared version of libupsclient. This can be overridden by using the "--disable-shared" configure option (distribute static only binaries).
-
The UPS poweroff handling of the usbhid-ups driver has been reworked. Though regression is not expected, users of this driver are encouraged to test this feature by calling "upsmon -c fsd" and report any issue on the NUT mailing lists.
-
nothing that affects upgraded systems. (The below message is repeated due to previous omission)
-
Developers of external client application using libupsclient are encouraged to rename their "UPSCONN" client structure to "UPSCONN_t" since the former will disappear by the release of NUT 2.4.
-
users of the newhidups driver are advised that the driver name has changed to usbhid-ups.
-
users of the hidups driver must switch to usbhid-ups.
-
users of the following drivers (powermust, blazer, fentonups, mustek, esupssmart, ippon, sms) must switch to megatec, which replaces all these drivers. Please refer to doc/megatec.txt for details.
-
users of the mge-shut driver are encouraged to test newmge-shut, which is an alternate driver scheduled to replace mge-shut,
-
users of the cpsups driver are encouraged to switch to powerpanel which is scheduled to replace cpsups,
-
packagers will have to rework the whole nut packaging due to the major changes in the build system (completely modified, and now using automake). Refer to packaging/debian/ for an example of migration.
-
specifying '-a <id>' is now mandatory when starting a driver manually, i.e. not using upsdrvctl.
-
Developers of external client application using libupsclient are encouraged to rename the "UPSCONN" client structure to "UPSCONN_t" since the former will disappear by the release of NUT 2.4.
-
users of the newhidups driver: the driver is now more strict about refusing to connect to unknown devices. If your device was previously supported, but fails to be recognized now, add 'productid=XXXX' to ups.conf. Please report the device to the NUT developer’s mailing list.
-
nothing that affects upgraded systems.
-
users of the following drivers (powermust, blazer, fentonups, mustek, esupssmart, ippon, sms, masterguard) are encouraged to switch to megatec, which should replace all these drivers by nut 2.2. For more information, please refer to doc/megatec.txt
-
nothing that affects upgraded systems.
-
hidups users are encouraged to switch to newhidups, as hidups will be removed by nut 2.2.
-
The newhidups driver, which is the long run USB support approach, needs hotplug files installed to setup the right permissions on device file to operate. Check newhidups manual page for more information.
-
The cyberpower1100 driver is now called cpsups since it supports more than just one model. If you use this driver, be sure to remove the old binary and update your ups.conf 'driver=' setting with the new name.
-
The upsstats.html template page has been changed slightly to reflect better HTML compliance, so you may want to update your installed copy accordingly. If you’ve customized your file, don’t just copy the new one over it, or your changes will be lost!
-
The sample config files are no longer installed by default. If you want to install them, use 'make install-conf' for the main programs, and 'make install-cgi-conf' for the CGI programs.
-
ACCESS is no longer supported in upsd.conf. Use ACCEPT and REJECT.
-
Old way:
ACCESS grant all adminbox ACCESS grant all webserver ACCESS deny all all
-
New way:
ACCEPT adminbox ACCEPT webserver REJECT all
-
Note that ACCEPT and REJECT can take multiple arguments, so this will also work:
ACCEPT adminbox webserver REJECT all
-
-
The drivers no longer support sddelay in ups.conf or -d on the command line. If you need a delay after calling 'upsdrvctl shutdown', add a call to sleep in your shutdown script.
-
The templates used by upsstats have changed considerably to reflect the new variable names. If you use upsstats, you will need to install new copies or edit your existing files to use the new names.
-
Nobody needed UDP mode, so it has been removed. The only users seemed to be a few people like me with ancient asapm-ups binaries. If you really want to run asapm-ups again, bug me for the new patch which makes it work with upsclient.
-
'make install-misc' is now 'make install-lib'. The misc directory has been gone for a long time, and the target was ambiguous.
-
The newapc driver has been renamed to apcsmart. If you previously used newapc, make sure you delete the old binary and fix your ups.conf. Otherwise, you may run the old driver from 1.4.