networkupstools / nut

The Network UPS Tools repository. UPS management protocol Informational RFC 9271 published by IETF at https://www.rfc-editor.org/info/rfc9271 Please star NUT on GitHub, this helps with sponsorships!
https://networkupstools.org/
Other
1.66k stars 333 forks source link

NDE+systemd: `nut-driver@devicename` unit instances do not auto-reload with NUT v2.8.2 when `ups.conf` is edited #2410

Closed jimklimov closed 1 month ago

jimklimov commented 1 month ago

It was brought to my attention by @ericclappier-eaton et al, that NDE-driven reload-or-restart of nut-driver@ units did not work for them after upgrading to NUT v2.8.2 release (as packaged in the Debian-derived OS of choice, I believe).

This may potentially be related to work on #682 merged before the release, and if so - that would be a regression in this release. Possibly something broke even earlier, in 2.8.1.

I was able to reproduce the behavior on a development Proxmox system with current NUT master: editing or touching /etc/nut/ups.conf (with the NDE path units active and started) does trigger a call to the script and a reload of the nut-server unit; however it seems to do nothing about the driver units even when section content is edited (e.g. debug_min value changes):

:; systemctl enable nut-driver-enumerator.path
:; systemctl start nut-driver-enumerator.path

:; touch /etc/nut/ups.conf
Apr 18 22:36:45 pve systemd[1]: Starting Network UPS Tools - enumeration of configure-file devices into systemd unit instances...
Apr 18 22:36:45 pve nut-driver-enumerator[1780166]: === The currently defined service instances are:
Apr 18 22:36:45 pve nut-driver-enumerator[1780166]: dummy
Apr 18 22:36:45 pve nut-driver-enumerator[1780166]: eco650
Apr 18 22:36:45 pve systemd[1]: Reloading Network UPS Tools - power devices information server.
Apr 18 22:36:45 pve nut-driver-enumerator[1780166]: === The currently defined configurations in '/etc/nut/ups.conf' are:
Apr 18 22:36:45 pve nut-driver-enumerator[1780166]: dummy
Apr 18 22:36:45 pve nut-server[1780339]: Network UPS Tools upsd 2.8.2-60-gdeba0a96a
Apr 18 22:36:45 pve nut-driver-enumerator[1780166]: eco650
Apr 18 22:36:45 pve upsd[1180563]: mainloop: Interrupted system call
Apr 18 22:36:45 pve nut-driver-enumerator[1780166]: Reloading or restarting NUT data server to make sure it knows new configuration...
Apr 18 22:36:45 pve nut-server[1180563]: mainloop: Interrupted system call
Apr 18 22:36:45 pve nut-server[1180563]: SIGHUP: reloading configuration
Apr 18 22:36:45 pve nut-driver-enumerator[1780166]: Thu Apr 18 20:36:45 UTC 2024 : OK: No more changes to reconcile between systemd service instances and device configurations in '/etc/nut/ups.conf'
Apr 18 22:36:45 pve nut-server[1180563]: Applying debug level 0 from original command line arguments
Apr 18 22:36:45 pve upsd[1180563]: SIGHUP: reloading configuration
Apr 18 22:36:45 pve systemd[1]: Reloaded Network UPS Tools - power devices information server.
Apr 18 22:36:45 pve upsd[1180563]: Applying debug level 0 from original command line arguments
Apr 18 22:36:45 pve systemd[1]: nut-driver-enumerator.service: Succeeded.
Apr 18 22:36:45 pve systemd[1]: Finished Network UPS Tools - enumeration of configure-file devices into systemd unit instances.

Similarly with command-line execution of the nut-driver-enumerator.sh script which is more promising to debug the issue.

According to script's log, it still does see and compare lists of devices in ups.conf and configured as systemd unit instances, so this part works. And then it decides that there are No more changes to reconcile between systemd service instances and device configurations in '/etc/nut/ups.conf' which is the problem.

jimklimov commented 1 month ago

Interesting bits from a debug run:

[dummy] driver = dummy-ups

debug_min = 6

port = dummy.dev

[eco650] driver = "usbhid-ups" port = "auto" vendorid = "0463" productid = "FFFF" product = "Ellipse ECO" desc = "Eaton Ellipse ECO 650" serial = "000000000" vendor = "EATON" bus = "003"

pollonly

    #debug_min = 0
    debug_min = 2

* NDE artifacts (made a year ago and unchanged for way too long!)

:; cd /etc/systemd/system && grep . nut-driver@.service.d/

nut-driver@.service.d/nut-driver-enumerator-generated-checksum.conf:[Service] nut-driver@.service.d/nut-driver-enumerator-generated-checksum.conf:Environment='SECTION_CHECKSUM_GLOBAL=e66f236c1cb34ba08a795537493bc884'

nut-driver@dummy.service.d/nut-driver-enumerator-generated-devicename.conf:[Service] nut-driver@dummy.service.d/nut-driver-enumerator-generated-devicename.conf:Environment='DEVICE="dummy"'

nut-driver@eco650.service.d/nut-driver-enumerator-generated-checksum.conf:[Service] nut-driver@eco650.service.d/nut-driver-enumerator-generated-checksum.conf:Environment='SECTION_CHECKSUM=8a4a7aa5a28a7d38f1961f4d7c3913c9'

nut-driver@eco650.service.d/nut-driver-enumerator-generated-devicename.conf:[Service] nut-driver@eco650.service.d/nut-driver-enumerator-generated-devicename.conf:Environment='DEVICE="eco650"'

nut-driver@eco650.service.d/nut-driver-enumerator-generated.conf:# Customization generated Tue May 9 10:10:25 UTC 2023 by nut-driver-enumerator for NUT device 'eco650' nut-driver@eco650.service.d/nut-driver-enumerator-generated.conf:# DO NOT EDIT: This file would be removed or overwritten by that service nut-driver@eco650.service.d/nut-driver-enumerator-generated.conf:[Unit] nut-driver@eco650.service.d/nut-driver-enumerator-generated.conf:Description=Network UPS Tools - device driver for NUT device 'eco650' nut-driver@eco650.service.d/nut-driver-enumerator-generated.conf:Wants=systemd-udev.service systemd-udev-settle.service nut-driver@eco650.service.d/nut-driver-enumerator-generated.conf:After=systemd-udev.service systemd-udev-settle.service

:; ls -la nut-driver@.service.d/ -rw-r--r-- 1 root root 81 Apr 19 2023 nut-driver@.service.d/nut-driver-enumerator-generated-checksum.conf -rw-r--r-- 1 root root 39 Dec 1 15:32 nut-driver@dummy.service.d/nut-driver-enumerator-generated-devicename.conf -rw-r--r-- 1 root root 74 May 9 2023 nut-driver@eco650.service.d/nut-driver-enumerator-generated-checksum.conf -rw-r--r-- 1 root root 40 Dec 1 15:32 nut-driver@eco650.service.d/nut-driver-enumerator-generated-devicename.conf -rw-r--r-- 1 root root 364 May 9 2023 nut-driver@eco650.service.d/nut-driver-enumerator-generated.conf


* Sanitized config is slurped reasonably:
jimklimov commented 1 month ago

Compared to 2.8.0 snapshot on the same system - NDE script works as expected, so a regression somewhere. Full log:

NUT-2.8.0# sh -x scripts/upsdrvsvcctl/nut-driver-enumerator.sh
+ prefix=/usr/local/ups
+ [ -n  ]
+ NUT_CONFPATH=/etc/nut
+ [ -n  ]
+ SYSTEMD_CONFPATH=/etc/systemd/system
+ [ -n  ]
+ set
+ egrep ^(shell|version|t?csh)
+ egrep t?csh
+ DEPSVC_USB_SYSTEMD=systemd-udev.service systemd-udev-settle.service
+ DEPREQ_USB_SYSTEMD=Wants
+ DEPSVC_NET_FULL_SYSTEMD=network-online.target systemd-resolved.service ifplugd.service
+ DEPREQ_NET_FULL_SYSTEMD=Wants
+ DEPSVC_NET_LOCAL_SYSTEMD=network.target
+ DEPREQ_NET_LOCAL_SYSTEMD=Wants
+ SVCNAME_SYSTEMD=nut-driver
+ DEPSVC_USB_SMF=svc:/system/hotplug:default svc:/system/dbus:default svc:/system/hal:default svc:/milestone/devices:default
+ DEPREQ_USB_SMF=optional_all
+ DEPSVC_NET_FULL_SMF=svc:/network/physical svc:/milestone/name-services
+ DEPREQ_NET_FULL_SMF=optional_all
+ DEPSVC_NET_LOCAL_SMF=svc:/network/loopback:default
+ DEPREQ_NET_LOCAL_SMF=optional_all
+ SVCNAME_SMF=svc:/system/power/nut-driver
+ [ -z  ]
+ NUT_DRIVER_ENUMERATOR_CONF=/etc/nut/nut-driver-enumerator.conf
+ [ -s /etc/nut/nut-driver-enumerator.conf ]
+ [ -z  ]
+ UPSCONF=/etc/nut/ups.conf
+ [ -z  ]
+ AUTO_START=yes
+ printf \t
+ TABCHAR=
+ [ -z  ]
+ [ -x /usr/sbin/svcadm ]
+ [ -z  ]
+ [ -x /bin/systemctl ]
+ SERVICE_FRAMEWORK=systemd
+ [ -z  ]
+ TIMEOUT_CMD=
+ TIMEOUT_ARGS=
+ which timeout
+ TIMEOUT_CMD=timeout
+ TIMEOUT_ARGS=90s
+ UPSCONF_DATA=
+ UPSCONF_DATA_SDP=
+ UPSLIST_FILE=
+ UPSLIST_SVCS=
+ hook_registerInstance=
+ hook_unregisterInstance=
+ hook_refreshSupervizor=
+ hook_listInstances=
+ hook_listInstances_raw=
+ hook_validInstanceName=
+ hook_validFullUnitName=
+ hook_validInstanceSuffixName=
+ hook_getSavedMD5=
+ hook_setSavedMD5=
+ hook_restart_upsd=
+ hook_restart_drv=
+ hook_registerInstance=systemd_registerInstance
+ hook_unregisterInstance=systemd_unregisterInstance
+ hook_refreshSupervizor=systemd_refreshSupervizor
+ hook_listInstances=systemd_listInstances
+ hook_listInstances_raw=systemd_listInstances_raw
+ hook_validInstanceName=systemd_validInstanceName
+ hook_validFullUnitName=systemd_validFullUnitName
+ hook_validInstanceSuffixName=systemd_validInstanceSuffixName
+ hook_getSavedMD5=systemd_getSavedMD5
+ hook_setSavedMD5=systemd_setSavedMD5
+ hook_restart_upsd=systemd_restart_upsd
+ hook_restart_drv=systemd_restart_drv
+ calc_md5_file /etc/nut/ups.conf
+ [ -s /etc/nut/ups.conf ]
+ md5sum
+ awk {print $1}
+ _MD5=329a0839f13478c06217857d140a31c1
+ [ -n 329a0839f13478c06217857d140a31c1 ]
+ echo 329a0839f13478c06217857d140a31c1
+ UPSCONF_CHECKSUM_START=329a0839f13478c06217857d140a31c1
+ [ 0 = 0 ]
+ nut_driver_enumerator_main
+ upslist_readFile
+ UPSLIST_FILE=
+ [  = yes ]
+ upslist_normalizeFile
+ UPSCONF_DATA=
+ UPSCONF_DATA_SDP=
+ [ -n /etc/nut/ups.conf ]
+ [ -f /etc/nut/ups.conf ]
+ [ -r /etc/nut/ups.conf ]
+ [ ! -s /etc/nut/ups.conf ]
+ upslist_normalizeFile_filter
+ egrep -v (^$|^#)
+ sed -e s,^[   \ ]*,, -e s,^\#.*$,, -e s,[     \ ]*$,, -e s,^\([^=\    ]*\)[   \ ]*=[  \ ]*,\1=,g -e s,=\"\([^\        ]*\)\"$,=\1, -e s,^\(\[[^]      \ ]*\]\)[       \ ]*\(#.*\)*$,\1,
+ egrep -v ^$
+ egrep ([\[\=]|^[^     ]*$|^[^         ]*[     ]*\#.*$)
+ UPSCONF_DATA=debug_min=0
[dummy]
driver=dummy-ups
port=dummy.dev
[eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO"
desc="Eaton Ellipse ECO 650"
serial=000000000
vendor=EATON
bus=003
debug_min=2
+ [ -n debug_min=0
[dummy]
driver=dummy-ups
port=dummy.dev
[eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO"
desc="Eaton Ellipse ECO 650"
serial=000000000
vendor=EATON
bus=003
debug_min=2 ]
+ egrep ^(\[.*\]|driver=|port=)
+ UPSCONF_DATA_SDP=[dummy]
driver=dummy-ups
port=dummy.dev
[eco650]
driver=usbhid-ups
port=auto
+ [ -n debug_min=0
[dummy]
driver=dummy-ups
port=dummy.dev
[eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO"
desc="Eaton Ellipse ECO 650"
serial=000000000
vendor=EATON
bus=003
debug_min=2 ]
+ echo [dummy]
driver=dummy-ups
port=dummy.dev
[eco650]
driver=usbhid-ups
port=auto
+ egrep ^\[[^   \ ]*\]$
+ sed s,^\[\(.*\)\]$,\1,
+ sort -n
+ UPSLIST_FILE=dummy
eco650
+ [ -z dummy
eco650 ]
+ upslist_readSvcs before manipulations
+ systemd_listInstances
+ systemd_listInstances_raw
+ sed -e s/^.*@// -e s/\.service$//
+ sort -n
+ /bin/systemctl show nut-driver@* -p Id
+ egrep =nut-driver
+ sed s,^Id=,,
+ UPSLIST_SVCS=dummy
eco650
+ [ -z dummy
eco650 ]
+ RESTART_ALL=no
+ upssvcconf_checksum_unchanged
+ upsconf_getSection_MD5
+ upsconf_getSection
+ upslist_normalizeFile_once
+ [ -z debug_min=0
[dummy]
driver=dummy-ups
port=dummy.dev
[eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO"
desc="Eaton Ellipse ECO 650"
serial=000000000
vendor=EATON
bus=003
debug_min=2 ]
+ return 0
+ upsconf_getSection_content
+ CURR_SECTION=
+ SECTION_CONTENT=
+ RES=1
+ [ -n  ]
+ RES=0
+ read LINE
+ [  =  ]
+ [ -n  ]
+ SECTION_CONTENT=debug_min=0
+ read LINE
+ [  =  ]
+ break
+ [ -n debug_min=0 ]
+ echo debug_min=0
+ [ 0 = 0 ]
+ return 0
+ calc_md5 debug_min=0
+ echo debug_min=0
+ md5sum
+ awk {print $1}
+ _MD5=e66f236c1cb34ba08a795537493bc884
+ [ -n e66f236c1cb34ba08a795537493bc884 ]
+ echo e66f236c1cb34ba08a795537493bc884
+ systemd_getSavedMD5
+ PROP=SECTION_CHECKSUM
+ [ -n  ]
+ PROP=SECTION_CHECKSUM_GLOBAL
+ [ -s /etc/systemd/system/nut-driver@.service.d/nut-driver-enumerator-generated-checksum.conf ]
+ grep Environment='SECTION_CHECKSUM_GLOBAL= /etc/systemd/system/nut-driver@.service.d/nut-driver-enumerator-generated-checksum.conf
+ sed -e s,^Environment='SECTION_CHECKSUM_GLOBAL=,, -e s,'$,,
+ [ e66f236c1cb34ba08a795537493bc884 = e66f236c1cb34ba08a795537493bc884 ]
+ upslist_checksums_unchanged dummy
eco650 dummy
eco650
+ [ -z dummy
eco650 -o -z dummy
eco650 ]
+ _TMP_SVC=
+ systemd_validInstanceName dummy
+ calc_md5 dummy
+ echo dummy
+ md5sum
+ awk {print $1}
+ _MD5=f02e326f800ee26f04df7961adbf7c0a
+ [ -n f02e326f800ee26f04df7961adbf7c0a ]
+ echo f02e326f800ee26f04df7961adbf7c0a
+ echo MD5_f02e326f800ee26f04df7961adbf7c0a
+ DEVINST=MD5_f02e326f800ee26f04df7961adbf7c0a
+ [ dummy = dummy ]
+ upssvcconf_checksum_unchanged dummy dummy
+ upsconf_getSection_MD5 dummy
+ upsconf_getSection dummy
+ upslist_normalizeFile_once
+ [ -z debug_min=0
[dummy]
driver=dummy-ups
port=dummy.dev
[eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO"
desc="Eaton Ellipse ECO 650"
serial=000000000
vendor=EATON
bus=003
debug_min=2 ]
+ return 0
+ upsconf_getSection_content dummy
+ CURR_SECTION=
+ SECTION_CONTENT=
+ RES=1
+ [ -n dummy ]
+ read LINE
+ [  = dummy ]
+ read LINE
+ [ 1 = 0 ]
+ SECTION_CONTENT=[dummy]
+ CURR_SECTION=dummy
+ RES=0
+ continue
+ read LINE
+ [ dummy = dummy ]
+ [ -n [dummy] ]
+ SECTION_CONTENT=[dummy]
driver=dummy-ups
+ read LINE
+ [ dummy = dummy ]
+ [ -n [dummy]
driver=dummy-ups ]
+ SECTION_CONTENT=[dummy]
driver=dummy-ups
port=dummy.dev
+ read LINE
+ [ dummy = dummy ]
+ break
+ [ -n [dummy]
driver=dummy-ups
port=dummy.dev ]
+ echo [dummy]
driver=dummy-ups
port=dummy.dev
+ [ 0 = 0 ]
+ return 0
+ calc_md5 [dummy]
driver=dummy-ups
port=dummy.dev
+ echo [dummy]
driver=dummy-ups
port=dummy.dev
+ md5sum
+ awk {print $1}
+ _MD5=ee8819cc0e7231ae99a05e3b7ec54618
+ [ -n ee8819cc0e7231ae99a05e3b7ec54618 ]
+ echo ee8819cc0e7231ae99a05e3b7ec54618
+ systemd_getSavedMD5 dummy
+ PROP=SECTION_CHECKSUM
+ [ -n dummy ]
+ [ -s /etc/systemd/system/nut-driver@dummy.service.d/nut-driver-enumerator-generated-checksum.conf ]
+ echo Did not find '/etc/systemd/system/nut-driver@dummy.service.d/nut-driver-enumerator-generated-checksum.conf' with a SECTION_CHECKSUM
+ return 1
+ [ ee8819cc0e7231ae99a05e3b7ec54618 = Did not find '/etc/systemd/system/nut-driver@dummy.service.d/nut-driver-enumerator-generated-checksum.conf' with a SECTION_CHECKSUM ]
+ [ -z  ]
+ _TMP_SVC=dummy
+ [ dummy = eco650 ]
+ [ MD5_f02e326f800ee26f04df7961adbf7c0a = eco650 ]
+ systemd_validInstanceName eco650
+ calc_md5 eco650
+ echo eco650
+ md5sum
+ awk {print $1}
+ _MD5=725517ba9eb4f1b0435dff2aeff5e693
+ [ -n 725517ba9eb4f1b0435dff2aeff5e693 ]
+ echo 725517ba9eb4f1b0435dff2aeff5e693
+ echo MD5_725517ba9eb4f1b0435dff2aeff5e693
+ DEVINST=MD5_725517ba9eb4f1b0435dff2aeff5e693
+ [ eco650 = dummy ]
+ [ MD5_725517ba9eb4f1b0435dff2aeff5e693 = dummy ]
+ [ eco650 = eco650 ]
+ upssvcconf_checksum_unchanged eco650 eco650
+ upsconf_getSection_MD5 eco650
+ upsconf_getSection eco650
+ upslist_normalizeFile_once
+ [ -z debug_min=0
[dummy]
driver=dummy-ups
port=dummy.dev
[eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO"
desc="Eaton Ellipse ECO 650"
serial=000000000
vendor=EATON
bus=003
debug_min=2 ]
+ return 0
+ upsconf_getSection_content eco650
+ CURR_SECTION=
+ SECTION_CONTENT=
+ RES=1
+ [ -n eco650 ]
+ read LINE
+ [  = eco650 ]
+ read LINE
+ [  = eco650 ]
+ CURR_SECTION=[]
+ continue
+ read LINE
+ [ [] = eco650 ]
+ read LINE
+ [ [] = eco650 ]
+ read LINE
+ [ 1 = 0 ]
+ SECTION_CONTENT=[eco650]
+ CURR_SECTION=eco650
+ RES=0
+ continue
+ read LINE
+ [ eco650 = eco650 ]
+ [ -n [eco650] ]
+ SECTION_CONTENT=[eco650]
driver=usbhid-ups
+ read LINE
+ [ eco650 = eco650 ]
+ [ -n [eco650]
driver=usbhid-ups ]
+ SECTION_CONTENT=[eco650]
driver=usbhid-ups
port=auto
+ read LINE
+ [ eco650 = eco650 ]
+ [ -n [eco650]
driver=usbhid-ups
port=auto ]
+ SECTION_CONTENT=[eco650]
driver=usbhid-ups
port=auto
vendorid=0463
+ read LINE
+ [ eco650 = eco650 ]
+ [ -n [eco650]
driver=usbhid-ups
port=auto
vendorid=0463 ]
+ SECTION_CONTENT=[eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
+ read LINE
+ [ eco650 = eco650 ]
+ [ -n [eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF ]
+ SECTION_CONTENT=[eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO"
+ read LINE
+ [ eco650 = eco650 ]
+ [ -n [eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO" ]
+ SECTION_CONTENT=[eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO"
desc="Eaton Ellipse ECO 650"
+ read LINE
+ [ eco650 = eco650 ]
+ [ -n [eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO"
desc="Eaton Ellipse ECO 650" ]
+ SECTION_CONTENT=[eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO"
desc="Eaton Ellipse ECO 650"
serial=000000000
+ read LINE
+ [ eco650 = eco650 ]
+ [ -n [eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO"
desc="Eaton Ellipse ECO 650"
serial=000000000 ]
+ SECTION_CONTENT=[eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO"
desc="Eaton Ellipse ECO 650"
serial=000000000
vendor=EATON
+ read LINE
+ [ eco650 = eco650 ]
+ [ -n [eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO"
desc="Eaton Ellipse ECO 650"
serial=000000000
vendor=EATON ]
+ SECTION_CONTENT=[eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO"
desc="Eaton Ellipse ECO 650"
serial=000000000
vendor=EATON
bus=003
+ read LINE
+ [ eco650 = eco650 ]
+ [ -n [eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO"
desc="Eaton Ellipse ECO 650"
serial=000000000
vendor=EATON
bus=003 ]
+ SECTION_CONTENT=[eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO"
desc="Eaton Ellipse ECO 650"
serial=000000000
vendor=EATON
bus=003
debug_min=2
+ read LINE
+ [ -n [eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO"
desc="Eaton Ellipse ECO 650"
serial=000000000
vendor=EATON
bus=003
debug_min=2 ]
+ echo [eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO"
desc="Eaton Ellipse ECO 650"
serial=000000000
vendor=EATON
bus=003
debug_min=2
+ [ 0 = 0 ]
+ return 0
+ calc_md5 [eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO"
desc="Eaton Ellipse ECO 650"
serial=000000000
vendor=EATON
bus=003
debug_min=2
+ echo [eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO"
desc="Eaton Ellipse ECO 650"
serial=000000000
vendor=EATON
bus=003
debug_min=2
+ md5sum
+ awk {print $1}
+ _MD5=6b073941959221404dc6397afd2e8190
+ [ -n 6b073941959221404dc6397afd2e8190 ]
+ echo 6b073941959221404dc6397afd2e8190
+ systemd_getSavedMD5 eco650
+ PROP=SECTION_CHECKSUM
+ [ -n eco650 ]
+ [ -s /etc/systemd/system/nut-driver@eco650.service.d/nut-driver-enumerator-generated-checksum.conf ]
+ grep Environment='SECTION_CHECKSUM= /etc/systemd/system/nut-driver@eco650.service.d/nut-driver-enumerator-generated-checksum.conf
+ sed -e s,^Environment='SECTION_CHECKSUM=,, -e s,'$,,
+ [ 6b073941959221404dc6397afd2e8190 = 8a4a7aa5a28a7d38f1961f4d7c3913c9 ]
+ [ -z dummy ]
+ _TMP_SVC=dummy
eco650
+ [ -z dummy
eco650 ]
+ echo dummy
eco650
+ return 1
+ NEW_CHECKSUM=dummy
eco650
+ [ -n dummy
eco650 ]
+ echo Dropping old systemd service instance dummy whose section in config file has changed...
Dropping old systemd service instance dummy whose section in config file has changed...
+ systemd_unregisterInstance dummy
+ echo Removing instance: 'nut-driver@dummy' ...
Removing instance: 'nut-driver@dummy' ...
+ timeout 90s /bin/systemctl stop nut-driver@dummy.service
Warning: The unit file, source configuration file or drop-ins of nut-driver@dummy.service changed on disk. Run 'systemctl daemon-reload' to reload units.
+ /bin/systemctl disable nut-driver@dummy.service
Unit /etc/systemd/system/nut-driver@dummy.service is masked, ignoring.
+ rm -rf /etc/systemd/system/nut-driver@dummy.service.d
+ /bin/systemctl reset-failed nut-driver@dummy.service
+ echo Dropping old systemd service instance eco650 whose section in config file has changed...
Dropping old systemd service instance eco650 whose section in config file has changed...
+ systemd_unregisterInstance eco650
+ echo Removing instance: 'nut-driver@eco650' ...
Removing instance: 'nut-driver@eco650' ...
+ timeout 90s /bin/systemctl stop nut-driver@eco650.service
+ /bin/systemctl disable nut-driver@eco650.service
Removed /etc/systemd/system/nut-driver.target.wants/nut-driver@eco650.service.
+ rm -rf /etc/systemd/system/nut-driver@eco650.service.d
+ /bin/systemctl reset-failed nut-driver@eco650.service
Failed to reset failed state of unit nut-driver@eco650.service: Unit nut-driver@eco650.service not loaded.
+ upslist_readSvcs after updating for new config section checksums
+ systemd_listInstances
+ systemd_listInstances_raw
+ sed -e s/^.*@// -e s/\.service$//
+ /bin/systemctl show nut-driver@* -p Id
+ sort -n
+ egrep =nut-driver
+ sed s,^Id=,,
+ UPSLIST_SVCS=dummy
+ [ -z dummy ]
+ [ -n dummy ]
+ upslist_delSvcs
+ common_isFiled dummy
+ [ -n dummy
eco650 ]
+ [ dummy = dummy ]
+ return 0
+ [ no = yes ]
+ [ no = yes ]
+ [ -n dummy
eco650 ]
+ upslist_addSvcs
+ common_isRegistered dummy
+ [ -n dummy ]
+ [ dummy = dummy ]
+ return 0
+ common_isRegistered eco650
+ [ -n dummy ]
+ [ eco650 = dummy ]
+ systemd_validInstanceName eco650
+ calc_md5 eco650
+ echo eco650
+ md5sum
+ awk {print $1}
+ _MD5=725517ba9eb4f1b0435dff2aeff5e693
+ [ -n 725517ba9eb4f1b0435dff2aeff5e693 ]
+ echo 725517ba9eb4f1b0435dff2aeff5e693
+ echo MD5_725517ba9eb4f1b0435dff2aeff5e693
+ [ MD5_725517ba9eb4f1b0435dff2aeff5e693 = dummy ]
+ return 1
+ echo Adding new systemd service instance for power device [eco650]...
Adding new systemd service instance for power device [eco650]...
+ systemd_registerInstance eco650
+ DEVICE=eco650
+ SVCINST=eco650
+ /bin/systemctl enable nut-driver@eco650.service
Created symlink /etc/systemd/system/nut-driver.target.wants/nut-driver@eco650.service → /lib/systemd/system/nut-driver@.service.
+ echo Enabled instance: 'nut-driver@eco650' for NUT configuration section 'eco650'
Enabled instance: 'nut-driver@eco650' for NUT configuration section 'eco650'
+ DEPSVC=
+ DEPREQ=
+ upsconf_getMedia eco650
+ upsconf_getDriverMedia eco650
+ upsconf_getDriver eco650
+ GETSECTION=upsconf_getSection_SDP upsconf_getValue eco650 driver
+ [ -n driver ]
+ [ -n upsconf_getSection_SDP ]
+ CURR_SECTION=
+ RES=0
+ upsconf_getSection_SDP eco650
+ upslist_normalizeFile_once
+ [ -z debug_min=0
[dummy]
driver=dummy-ups
port=dummy.dev
[eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO"
desc="Eaton Ellipse ECO 650"
serial=000000000
vendor=EATON
bus=003
debug_min=2 ]
+ return 0
+ upsconf_getSection_content eco650
+ CURR_SECTION=
+ SECTION_CONTENT=
+ RES=1
+ [ -n eco650 ]
+ read LINE
+ [  = eco650 ]
+ CURR_SECTION=[]
+ continue
+ read LINE
+ [ [] = eco650 ]
+ read LINE
+ [ [] = eco650 ]
+ read LINE
+ [ 1 = 0 ]
+ SECTION_CONTENT=[eco650]
+ CURR_SECTION=eco650
+ RES=0
+ continue
+ read LINE
+ [ eco650 = eco650 ]
+ [ -n [eco650] ]
+ SECTION_CONTENT=[eco650]
driver=usbhid-ups
+ read LINE
+ [ eco650 = eco650 ]
+ [ -n [eco650]
driver=usbhid-ups ]
+ SECTION_CONTENT=[eco650]
driver=usbhid-ups
port=auto
+ read LINE
+ [ -n [eco650]
driver=usbhid-ups
port=auto ]
+ echo [eco650]
driver=usbhid-ups
port=auto
+ [ 0 = 0 ]
+ return 0
+ SECTION_CONTENT=[eco650]
driver=usbhid-ups
port=auto
+ shift
+ KEYS=driver
+ [ 1 -gt 0 ]
+ RES_L=0
+ VALUE=
+ echo [eco650]
driver=usbhid-ups
port=auto
+ egrep (^driver=|^driver$)
+ LINE=driver=usbhid-ups
+ echo driver=usbhid-ups
+ sed -e s,^driver=,, -e s,^\"\(.*\)\"$,\1, -e s,^'\(.*\)'$,\1,
+ VALUE=usbhid-ups
+ [ 0 = 0 ]
+ echo usbhid-ups
+ shift
+ [ 0 -gt 0 ]
+ [ 0 = 0 ]
+ return 0
+ return 0
+ CURR_DRV=usbhid-ups
+ printf %s\n%s\n usbhid-ups usb
+ return
+ _DRVMED=usbhid-ups
usb
+ echo usbhid-ups
usb
+ tail -n +2
+ return 0
+ _MED=usb
+ DEPSVC=systemd-udev.service systemd-udev-settle.service
+ DEPREQ=Wants
+ [ -n systemd-udev.service systemd-udev-settle.service ]
+ [ -n Wants ]
+ echo Adding 'Wants'+After dependency for 'eco650' on 'systemd-udev.service systemd-udev-settle.service'...
Adding 'Wants'+After dependency for 'eco650' on 'systemd-udev.service systemd-udev-settle.service'...
+ mkdir -p /etc/systemd/system/nut-driver@eco650.service.d
+ date -u
+ cat
+ [ 0 = 0 ]
+ echo OK
OK
+ upsconf_getSection_MD5 eco650
+ upsconf_getSection eco650
+ upslist_normalizeFile_once
+ [ -z debug_min=0
[dummy]
driver=dummy-ups
port=dummy.dev
[eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO"
desc="Eaton Ellipse ECO 650"
serial=000000000
vendor=EATON
bus=003
debug_min=2 ]
+ return 0
+ upsconf_getSection_content eco650
+ CURR_SECTION=
+ SECTION_CONTENT=
+ RES=1
+ [ -n eco650 ]
+ read LINE
+ [  = eco650 ]
+ read LINE
+ [  = eco650 ]
+ CURR_SECTION=[]
+ continue
+ read LINE
+ [ [] = eco650 ]
+ read LINE
+ [ [] = eco650 ]
+ read LINE
+ [ 1 = 0 ]
+ SECTION_CONTENT=[eco650]
+ CURR_SECTION=eco650
+ RES=0
+ continue
+ read LINE
+ [ eco650 = eco650 ]
+ [ -n [eco650] ]
+ SECTION_CONTENT=[eco650]
driver=usbhid-ups
+ read LINE
+ [ eco650 = eco650 ]
+ [ -n [eco650]
driver=usbhid-ups ]
+ SECTION_CONTENT=[eco650]
driver=usbhid-ups
port=auto
+ read LINE
+ [ eco650 = eco650 ]
+ [ -n [eco650]
driver=usbhid-ups
port=auto ]
+ SECTION_CONTENT=[eco650]
driver=usbhid-ups
port=auto
vendorid=0463
+ read LINE
+ [ eco650 = eco650 ]
+ [ -n [eco650]
driver=usbhid-ups
port=auto
vendorid=0463 ]
+ SECTION_CONTENT=[eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
+ read LINE
+ [ eco650 = eco650 ]
+ [ -n [eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF ]
+ SECTION_CONTENT=[eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO"
+ read LINE
+ [ eco650 = eco650 ]
+ [ -n [eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO" ]
+ SECTION_CONTENT=[eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO"
desc="Eaton Ellipse ECO 650"
+ read LINE
+ [ eco650 = eco650 ]
+ [ -n [eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO"
desc="Eaton Ellipse ECO 650" ]
+ SECTION_CONTENT=[eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO"
desc="Eaton Ellipse ECO 650"
serial=000000000
+ read LINE
+ [ eco650 = eco650 ]
+ [ -n [eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO"
desc="Eaton Ellipse ECO 650"
serial=000000000 ]
+ SECTION_CONTENT=[eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO"
desc="Eaton Ellipse ECO 650"
serial=000000000
vendor=EATON
+ read LINE
+ [ eco650 = eco650 ]
+ [ -n [eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO"
desc="Eaton Ellipse ECO 650"
serial=000000000
vendor=EATON ]
+ SECTION_CONTENT=[eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO"
desc="Eaton Ellipse ECO 650"
serial=000000000
vendor=EATON
bus=003
+ read LINE
+ [ eco650 = eco650 ]
+ [ -n [eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO"
desc="Eaton Ellipse ECO 650"
serial=000000000
vendor=EATON
bus=003 ]
+ SECTION_CONTENT=[eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO"
desc="Eaton Ellipse ECO 650"
serial=000000000
vendor=EATON
bus=003
debug_min=2
+ read LINE
+ [ -n [eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO"
desc="Eaton Ellipse ECO 650"
serial=000000000
vendor=EATON
bus=003
debug_min=2 ]
+ echo [eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO"
desc="Eaton Ellipse ECO 650"
serial=000000000
vendor=EATON
bus=003
debug_min=2
+ [ 0 = 0 ]
+ return 0
+ calc_md5 [eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO"
desc="Eaton Ellipse ECO 650"
serial=000000000
vendor=EATON
bus=003
debug_min=2
+ echo [eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO"
desc="Eaton Ellipse ECO 650"
serial=000000000
vendor=EATON
bus=003
debug_min=2
+ md5sum
+ awk {print $1}
+ _MD5=6b073941959221404dc6397afd2e8190
+ [ -n 6b073941959221404dc6397afd2e8190 ]
+ echo 6b073941959221404dc6397afd2e8190
+ systemd_setSavedMD5 eco650 6b073941959221404dc6397afd2e8190
+ PROP=SECTION_CHECKSUM
+ [ -n eco650 ]
+ mkdir -p /etc/systemd/system/nut-driver@eco650.service.d
+ cat
+ [ 0 = 0 ]
+ echo OK
OK
+ [ yes = yes ]
+ systemd_refreshSupervizor
+ /bin/systemctl daemon-reload
+ timeout 90s /bin/systemctl start --no-block nut-driver@eco650.service
+ echo Started instance: 'nut-driver@eco650' for NUT configuration section 'eco650'
Started instance: 'nut-driver@eco650' for NUT configuration section 'eco650'
+ systemd_refreshSupervizor
+ /bin/systemctl daemon-reload
+ upslist_readSvcs after checking for new config sections to define service instances
+ systemd_listInstances
+ systemd_listInstances_raw
+ sed -e s/^.*@// -e s/\.service$//
+ + sort -n
/bin/systemctl show nut-driver@* -p Id
+ egrep =nut-driver
+ sed s,^Id=,,
+ UPSLIST_SVCS=dummy
eco650
+ [ -z dummy
eco650 ]
+ upslist_readSvcs
+ systemd_listInstances
+ systemd_listInstances_raw
+ sed -e s/^.*@// -e s/\.service$//
+ /bin/systemctl show nut-driver@* -p Id
+ sort -n
+ egrep =nut-driver
+ sed s,^Id=,,
+ UPSLIST_SVCS=dummy
eco650
+ [ -z dummy
eco650 ]
+ [ -n dummy
eco650 ]
+ echo === The currently defined service instances are:
=== The currently defined service instances are:
+ echo dummy
eco650
dummy
eco650
+ [ -n dummy
eco650 ]
+ echo === The currently defined configurations in '/etc/nut/ups.conf' are:
=== The currently defined configurations in '/etc/nut/ups.conf' are:
+ echo dummy
eco650
dummy
eco650
+ [ yes = yes ]
+ systemd_restart_upsd
+ /bin/systemctl is-active nut-server
+ echo Restarting NUT data server to make sure it knows new configuration...
Restarting NUT data server to make sure it knows new configuration...
+ timeout 90s /bin/systemctl reload-or-restart nut-server
+ UPSLIST_EQ_RES=0
+ upslist_equals dummy
eco650 dummy
eco650
+ [ -n dummy
eco650 -a -z dummy
eco650 ]
+ [ -z dummy
eco650 -a -n dummy
eco650 ]
+ [ dummy
eco650 = dummy
eco650 ]
+ return 0
+ calc_md5_file /etc/nut/ups.conf
+ [ -s /etc/nut/ups.conf ]
+ md5sum
+ awk {print $1}
+ _MD5=329a0839f13478c06217857d140a31c1
+ [ -n 329a0839f13478c06217857d140a31c1 ]
+ echo 329a0839f13478c06217857d140a31c1
+ UPSCONF_CHECKSUM_END=329a0839f13478c06217857d140a31c1
+ [ 329a0839f13478c06217857d140a31c1 != 329a0839f13478c06217857d140a31c1 ]
+ [ 0 = 0 ]
+ date -u
+ echo Thu Apr 18 21:06:41 UTC 2024 : OK: No more changes to reconcile between systemd service instances and device configurations in '/etc/nut/ups.conf'
Thu Apr 18 21:06:41 UTC 2024 : OK: No more changes to reconcile between systemd service instances and device configurations in '/etc/nut/ups.conf'
+ [  = no ]
+ return 42
+ exit 42
jimklimov commented 1 month ago

It did not seem to restart the driver, though (with changed debug_min setting):

Apr 18 23:09:38 pve systemd[1]: Starting Network UPS Tools - enumeration of configure-file devices into systemd unit instances...
Apr 18 23:09:38 pve nut-driver-enumerator[1895069]: grep: /etc/systemd/system/nut-driver@*.service.d/nut-driver-enumerator-generated-devicename.conf: No such file or directory
Apr 18 23:09:38 pve nut-driver-enumerator[1895053]: Service instance 'nut-driver@dummy.service' did not have a device recorded into properties, setting to 'dummy'
Apr 18 23:09:38 pve nut-driver-enumerator[1895053]: OK
Apr 18 23:09:38 pve nut-driver-enumerator[1895053]: Service instance 'nut-driver@eco650.service' did not have a device recorded into properties, setting to 'eco650'
Apr 18 23:09:38 pve nut-driver-enumerator[1895053]: OK
Apr 18 23:09:39 pve nut-driver@eco650[1865973]:  178.113368        [D1] upsdrv_updateinfo...
Apr 18 23:09:39 pve nut-driver-enumerator[1895053]: === The currently defined service instances are:
Apr 18 23:09:39 pve systemd[1]: Reloading Network UPS Tools - power devices information server.
Apr 18 23:09:39 pve nut-driver-enumerator[1895053]: dummy
Apr 18 23:09:39 pve nut-server[1895233]: Network UPS Tools upsd 2.8.2-60-gdeba0a96a
Apr 18 23:09:39 pve upsd[1180563]: mainloop: Interrupted system call
Apr 18 23:09:39 pve nut-driver-enumerator[1895053]: eco650
Apr 18 23:09:39 pve nut-server[1180563]: mainloop: Interrupted system call
Apr 18 23:09:39 pve nut-server[1180563]: SIGHUP: reloading configuration
Apr 18 23:09:39 pve nut-driver-enumerator[1895053]: === The currently defined configurations in '/etc/nut/ups.conf' are:
Apr 18 23:09:39 pve nut-server[1180563]: Applying debug level 0 from original command line arguments
Apr 18 23:09:39 pve nut-driver-enumerator[1895053]: dummy
Apr 18 23:09:39 pve nut-driver-enumerator[1895053]: eco650
Apr 18 23:09:39 pve systemd[1]: Reloaded Network UPS Tools - power devices information server.
Apr 18 23:09:39 pve upsd[1180563]: SIGHUP: reloading configuration
Apr 18 23:09:39 pve nut-driver-enumerator[1895053]: Reloading or restarting NUT data server to make sure it knows new configuration...
Apr 18 23:09:39 pve upsd[1180563]: Applying debug level 0 from original command line arguments
Apr 18 23:09:39 pve nut-driver-enumerator[1895053]: Thu Apr 18 21:09:39 UTC 2024 : OK: No more changes to reconcile between systemd service instances and device configurations in '/etc/nut/ups.conf'
Apr 18 23:09:39 pve systemd[1]: nut-driver-enumerator.service: Succeeded.
Apr 18 23:09:39 pve systemd[1]: Finished Network UPS Tools - enumeration of configure-file devices into systemd unit instances.
Apr 18 23:09:40 pve nut-driver@eco650[1865973]:  178.863499        [D2] nut_libusb_get_interrupt: Connection timed out
Apr 18 23:09:40 pve nut-driver@eco650[1865973]:  178.863515        [D1] Got 0 HID objects...
Apr 18 23:09:40 pve nut-driver@eco650[1865973]:  178.863521        [D1] Quick update...

It did at least touch the NDE artifact files though:

:; ls -la  nut-driver@*.service.d/*
-rw-r--r-- 1 root root  81 Apr 19  2023 nut-driver@.service.d/nut-driver-enumerator-generated-checksum.conf
-rw-r--r-- 1 root root  39 Apr 18 23:09 nut-driver@dummy.service.d/nut-driver-enumerator-generated-devicename.conf
-rw-r--r-- 1 root root  74 Apr 18 23:06 nut-driver@eco650.service.d/nut-driver-enumerator-generated-checksum.conf
-rw-r--r-- 1 root root  40 Apr 18 23:09 nut-driver@eco650.service.d/nut-driver-enumerator-generated-devicename.conf
-rw-r--r-- 1 root root 364 Apr 18 23:06 nut-driver@eco650.service.d/nut-driver-enumerator-generated.conf

:; grep . nut-driver@*.d/*
nut-driver@.service.d/nut-driver-enumerator-generated-checksum.conf:[Service]
nut-driver@.service.d/nut-driver-enumerator-generated-checksum.conf:Environment='SECTION_CHECKSUM_GLOBAL=e66f236c1cb34ba08a795537493bc884'

nut-driver@dummy.service.d/nut-driver-enumerator-generated-devicename.conf:[Service]
nut-driver@dummy.service.d/nut-driver-enumerator-generated-devicename.conf:Environment='DEVICE="dummy"'

nut-driver@eco650.service.d/nut-driver-enumerator-generated-checksum.conf:[Service]
nut-driver@eco650.service.d/nut-driver-enumerator-generated-checksum.conf:Environment='SECTION_CHECKSUM=6b073941959221404dc6397afd2e8190'

nut-driver@eco650.service.d/nut-driver-enumerator-generated-devicename.conf:[Service]
nut-driver@eco650.service.d/nut-driver-enumerator-generated-devicename.conf:Environment='DEVICE="eco650"'

nut-driver@eco650.service.d/nut-driver-enumerator-generated.conf:# Customization generated Thu Apr 18 21:06:40 UTC 2024 by nut-driver-enumerator for NUT device 'eco650'
nut-driver@eco650.service.d/nut-driver-enumerator-generated.conf:# DO NOT EDIT: This file would be removed or overwritten by that service
nut-driver@eco650.service.d/nut-driver-enumerator-generated.conf:[Unit]
nut-driver@eco650.service.d/nut-driver-enumerator-generated.conf:Description=Network UPS Tools - device driver for NUT device 'eco650'
nut-driver@eco650.service.d/nut-driver-enumerator-generated.conf:Wants=systemd-udev.service systemd-udev-settle.service
nut-driver@eco650.service.d/nut-driver-enumerator-generated.conf:After=systemd-udev.service systemd-udev-settle.service

The only substantial change however was the modified checksum for eco650:

nut-driver@eco650.service.d/nut-driver-enumerator-generated-checksum.conf:Environment='SECTION_CHECKSUM=6b073941959221404dc6397afd2e8190'

...which matches the contents with debug_min=2 and did not seem to change with debug_min=0 activated later (that would be 8a4a7aa5a28a7d38f1961f4d7c3913c9 - which happens to be the previous checksum stored since last year):

:; echo '[eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO"
desc="Eaton Ellipse ECO 650"
serial=000000000
vendor=EATON
bus=003
debug_min=2' | md5sum

6b073941959221404dc6397afd2e8190  -
:; echo '[eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO"
desc="Eaton Ellipse ECO 650"
serial=000000000
vendor=EATON
bus=003
debug_min=0' | md5sum

8a4a7aa5a28a7d38f1961f4d7c3913c9  -
jimklimov commented 1 month ago

Likewise, NDE script from NUT v2.8.1 snapshot logged this:

# sh -x scripts/upsdrvsvcctl/nut-driver-enumerator.sh
+ prefix=/usr/local/ups
+ [ -n  ]
+ NUT_CONFPATH=/etc/nut
+ [ -n  ]
+ SYSTEMD_CONFPATH=/etc/systemd/system
+ [ -n  ]
+ set
+ grep -E ^(shell|version|t?csh)
+ grep -E t?csh
+ DEPSVC_USB_SYSTEMD=systemd-udev.service systemd-udev-settle.service
+ DEPREQ_USB_SYSTEMD=Wants
+ DEPSVC_NET_FULL_SYSTEMD=network-online.target systemd-resolved.service ifplugd.service
+ DEPREQ_NET_FULL_SYSTEMD=Wants
+ DEPSVC_NET_LOCAL_SYSTEMD=network.target
+ DEPREQ_NET_LOCAL_SYSTEMD=Wants
+ SVCNAME_SYSTEMD=nut-driver
+ DEPSVC_USB_SMF=svc:/system/hotplug:default svc:/system/dbus:default svc:/system/hal:default svc:/milestone/devices:default
+ DEPREQ_USB_SMF=optional_all
+ DEPSVC_NET_FULL_SMF=svc:/network/physical svc:/milestone/name-services
+ DEPREQ_NET_FULL_SMF=optional_all
+ DEPSVC_NET_LOCAL_SMF=svc:/network/loopback:default
+ DEPREQ_NET_LOCAL_SMF=optional_all
+ SVCNAME_SMF=svc:/system/power/nut-driver
+ [ -z  ]
+ NUT_DRIVER_ENUMERATOR_CONF=/etc/nut/nut-driver-enumerator.conf
+ [ -s /etc/nut/nut-driver-enumerator.conf ]
+ [ -z  ]
+ UPSCONF=/etc/nut/ups.conf
+ [ -z  ]
+ AUTO_START=yes
+ printf \t
+ TABCHAR=
+ [ -z  ]
+ [ -x /usr/sbin/svcadm ]
+ [ -z  ]
+ [ -x /bin/systemctl ]
+ SERVICE_FRAMEWORK=systemd
+ [ -z  ]
+ TIMEOUT_CMD=
+ TIMEOUT_ARGS=
+ which timeout
+ TIMEOUT_CMD=timeout
+ TIMEOUT_ARGS=90s
+ UPSCONF_DATA=
+ UPSCONF_DATA_SDP=
+ UPSLIST_FILE=
+ UPSLIST_SVCS=
+ hook_registerInstance=
+ hook_unregisterInstance=
+ hook_refreshSupervizor=
+ hook_listInstances=
+ hook_listInstances_raw=
+ hook_validInstanceName=
+ hook_validFullUnitName=
+ hook_validInstanceSuffixName=
+ hook_getSavedMD5=
+ hook_setSavedMD5=
+ hook_restart_upsd=
+ hook_restart_drv=
+ hook_registerInstance=systemd_registerInstance
+ hook_unregisterInstance=systemd_unregisterInstance
+ hook_refreshSupervizor=systemd_refreshSupervizor
+ hook_listInstances=systemd_listInstances
+ hook_listInstances_raw=systemd_listInstances_raw
+ hook_validInstanceName=systemd_validInstanceName
+ hook_validFullUnitName=systemd_validFullUnitName
+ hook_validInstanceSuffixName=systemd_validInstanceSuffixName
+ hook_getSavedMD5=systemd_getSavedMD5
+ hook_setSavedMD5=systemd_setSavedMD5
+ hook_restart_upsd=systemd_restart_upsd
+ hook_restart_drv=systemd_restart_drv
+ calc_md5_file /etc/nut/ups.conf
+ [ -s /etc/nut/ups.conf ]
+ md5sum
+ awk {print $1}
+ _MD5=fedc1d8abc159c5580adb97b9c3e429b
+ [ -n fedc1d8abc159c5580adb97b9c3e429b ]
+ echo fedc1d8abc159c5580adb97b9c3e429b
+ UPSCONF_CHECKSUM_START=fedc1d8abc159c5580adb97b9c3e429b
+ [ 0 = 0 ]
+ nut_driver_enumerator_main
+ upslist_readFile
+ UPSLIST_FILE=
+ [  = yes ]
+ upslist_normalizeFile
+ UPSCONF_DATA=
+ UPSCONF_DATA_SDP=
+ [ -n /etc/nut/ups.conf ]
+ [ -f /etc/nut/ups.conf ]
+ [ -r /etc/nut/ups.conf ]
+ [ ! -s /etc/nut/ups.conf ]
+ upslist_normalizeFile_filter
+ grep -E -v (^$|^#)
+ sed -e s,^[   \ ]*,, -e s,^\#.*$,, -e s,[     \ ]*$,, -e s,^\([^=\    ]*\)[   \ ]*=[  \ ]*,\1=,g -e s,=\"\([^\        ]*\)\"$,=\1, -e s,^\(\[[^]      \ ]*\]\)[       \ ]*\(#.*\)*$,\1,
+ grep -E -v ^$
+ grep -E ([\[\=]|^[^   ]*$|^[^         ]*[     ]*#.*$)
+ UPSCONF_DATA=debug_min=0
[dummy]
driver=dummy-ups
port=dummy.dev
[eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO"
desc="Eaton Ellipse ECO 650"
serial=000000000
vendor=EATON
bus=003
debug_min=0
+ [ -n debug_min=0
[dummy]
driver=dummy-ups
port=dummy.dev
[eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO"
desc="Eaton Ellipse ECO 650"
serial=000000000
vendor=EATON
bus=003
debug_min=0 ]
+ grep -E ^(\[.*\]|driver=|port=)
+ UPSCONF_DATA_SDP=[dummy]
driver=dummy-ups
port=dummy.dev
[eco650]
driver=usbhid-ups
port=auto
+ [ -n debug_min=0
[dummy]
driver=dummy-ups
port=dummy.dev
[eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO"
desc="Eaton Ellipse ECO 650"
serial=000000000
vendor=EATON
bus=003
debug_min=0 ]
+ echo [dummy]
driver=dummy-ups
port=dummy.dev
[eco650]
driver=usbhid-ups
port=auto
+ grep -E ^\[[^ \ ]*\]$
+ sed s,^\[\(.*\)\]$,\1,
+ sort -n
+ UPSLIST_FILE=dummy
eco650
+ [ -z dummy
eco650 ]
+ upslist_readSvcs before manipulations
+ systemd_listInstances
+ systemd_listInstances_raw
+ sed -e s/^.*@// -e s/\.service$//
+ /bin/systemctl show nut-driver@* -p Id
+ sort -n
+ grep -E =nut-driver
+ sed s,^Id=,,
+ UPSLIST_SVCS=dummy
eco650
+ [ -z dummy
eco650 ]
+ RESTART_ALL=no
+ upssvcconf_checksum_unchanged
+ upsconf_getSection_MD5
+ upsconf_getSection
+ upslist_normalizeFile_once
+ [ -z debug_min=0
[dummy]
driver=dummy-ups
port=dummy.dev
[eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO"
desc="Eaton Ellipse ECO 650"
serial=000000000
vendor=EATON
bus=003
debug_min=0 ]
+ return 0
+ upsconf_getSection_content
+ CURR_SECTION=
+ SECTION_CONTENT=
+ RES=1
+ [ -n  ]
+ RES=0
+ read LINE
+ [  =  ]
+ [ -n  ]
+ SECTION_CONTENT=debug_min=0
+ read LINE
+ [  =  ]
+ break
+ [ -n debug_min=0 ]
+ echo debug_min=0
+ [ 0 = 0 ]
+ return 0
+ calc_md5 debug_min=0
+ echo debug_min=0
+ md5sum
+ awk {print $1}
+ _MD5=e66f236c1cb34ba08a795537493bc884
+ [ -n e66f236c1cb34ba08a795537493bc884 ]
+ echo e66f236c1cb34ba08a795537493bc884
+ systemd_getSavedMD5
+ PROP=SECTION_CHECKSUM
+ [ -n  ]
+ PROP=SECTION_CHECKSUM_GLOBAL
+ [ -s /etc/systemd/system/nut-driver@.service.d/nut-driver-enumerator-generated-checksum.conf ]
+ grep Environment='SECTION_CHECKSUM_GLOBAL= /etc/systemd/system/nut-driver@.service.d/nut-driver-enumerator-generated-checksum.conf
+ sed -e s,^Environment='SECTION_CHECKSUM_GLOBAL=,, -e s,'$,,
+ [ e66f236c1cb34ba08a795537493bc884 = e66f236c1cb34ba08a795537493bc884 ]
+ upslist_checksums_unchanged dummy
eco650 dummy
eco650
+ [ -z dummy
eco650 -o -z dummy
eco650 ]
+ _TMP_SVC=
+ systemd_validInstanceName dummy
+ calc_md5 dummy
+ echo dummy
+ md5sum
+ awk {print $1}
+ _MD5=f02e326f800ee26f04df7961adbf7c0a
+ [ -n f02e326f800ee26f04df7961adbf7c0a ]
+ echo f02e326f800ee26f04df7961adbf7c0a
+ echo MD5_f02e326f800ee26f04df7961adbf7c0a
+ DEVINST=MD5_f02e326f800ee26f04df7961adbf7c0a
+ [ dummy = dummy ]
+ upssvcconf_checksum_unchanged dummy dummy
+ upsconf_getSection_MD5 dummy
+ upsconf_getSection dummy
+ upslist_normalizeFile_once
+ [ -z debug_min=0
[dummy]
driver=dummy-ups
port=dummy.dev
[eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO"
desc="Eaton Ellipse ECO 650"
serial=000000000
vendor=EATON
bus=003
debug_min=0 ]
+ return 0
+ upsconf_getSection_content dummy
+ CURR_SECTION=
+ SECTION_CONTENT=
+ RES=1
+ [ -n dummy ]
+ read LINE
+ [  = dummy ]
+ read LINE
+ [ 1 = 0 ]
+ SECTION_CONTENT=[dummy]
+ CURR_SECTION=dummy
+ RES=0
+ continue
+ read LINE
+ [ dummy = dummy ]
+ [ -n [dummy] ]
+ SECTION_CONTENT=[dummy]
driver=dummy-ups
+ read LINE
+ [ dummy = dummy ]
+ [ -n [dummy]
driver=dummy-ups ]
+ SECTION_CONTENT=[dummy]
driver=dummy-ups
port=dummy.dev
+ read LINE
+ [ dummy = dummy ]
+ break
+ [ -n [dummy]
driver=dummy-ups
port=dummy.dev ]
+ echo [dummy]
driver=dummy-ups
port=dummy.dev
+ [ 0 = 0 ]
+ return 0
+ calc_md5 [dummy]
driver=dummy-ups
port=dummy.dev
+ echo [dummy]
driver=dummy-ups
port=dummy.dev
+ md5sum
+ awk {print $1}
+ _MD5=ee8819cc0e7231ae99a05e3b7ec54618
+ [ -n ee8819cc0e7231ae99a05e3b7ec54618 ]
+ echo ee8819cc0e7231ae99a05e3b7ec54618
+ systemd_getSavedMD5 dummy
+ PROP=SECTION_CHECKSUM
+ [ -n dummy ]
+ [ -s /etc/systemd/system/nut-driver@dummy.service.d/nut-driver-enumerator-generated-checksum.conf ]
+ echo Did not find '/etc/systemd/system/nut-driver@dummy.service.d/nut-driver-enumerator-generated-checksum.conf' with a SECTION_CHECKSUM
+ return 1
+ [ ee8819cc0e7231ae99a05e3b7ec54618 = Did not find '/etc/systemd/system/nut-driver@dummy.service.d/nut-driver-enumerator-generated-checksum.conf' with a SECTION_CHECKSUM ]
+ [ -z  ]
+ _TMP_SVC=dummy
+ [ dummy = eco650 ]
+ [ MD5_f02e326f800ee26f04df7961adbf7c0a = eco650 ]
+ systemd_validInstanceName eco650
+ calc_md5 eco650
+ echo eco650
+ md5sum
+ awk {print $1}
+ _MD5=725517ba9eb4f1b0435dff2aeff5e693
+ [ -n 725517ba9eb4f1b0435dff2aeff5e693 ]
+ echo 725517ba9eb4f1b0435dff2aeff5e693
+ echo MD5_725517ba9eb4f1b0435dff2aeff5e693
+ DEVINST=MD5_725517ba9eb4f1b0435dff2aeff5e693
+ [ eco650 = dummy ]
+ [ MD5_725517ba9eb4f1b0435dff2aeff5e693 = dummy ]
+ [ eco650 = eco650 ]
+ upssvcconf_checksum_unchanged eco650 eco650
+ upsconf_getSection_MD5 eco650
+ upsconf_getSection eco650
+ upslist_normalizeFile_once
+ [ -z debug_min=0
[dummy]
driver=dummy-ups
port=dummy.dev
[eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO"
desc="Eaton Ellipse ECO 650"
serial=000000000
vendor=EATON
bus=003
debug_min=0 ]
+ return 0
+ upsconf_getSection_content eco650
+ CURR_SECTION=
+ SECTION_CONTENT=
+ RES=1
+ [ -n eco650 ]
+ read LINE
+ [  = eco650 ]
+ read LINE
+ [  = eco650 ]
+ CURR_SECTION=[]
+ continue
+ read LINE
+ [ [] = eco650 ]
+ read LINE
+ [ [] = eco650 ]
+ read LINE
+ [ 1 = 0 ]
+ SECTION_CONTENT=[eco650]
+ CURR_SECTION=eco650
+ RES=0
+ continue
+ read LINE
+ [ eco650 = eco650 ]
+ [ -n [eco650] ]
+ SECTION_CONTENT=[eco650]
driver=usbhid-ups
+ read LINE
+ [ eco650 = eco650 ]
+ [ -n [eco650]
driver=usbhid-ups ]
+ SECTION_CONTENT=[eco650]
driver=usbhid-ups
port=auto
+ read LINE
+ [ eco650 = eco650 ]
+ [ -n [eco650]
driver=usbhid-ups
port=auto ]
+ SECTION_CONTENT=[eco650]
driver=usbhid-ups
port=auto
vendorid=0463
+ read LINE
+ [ eco650 = eco650 ]
+ [ -n [eco650]
driver=usbhid-ups
port=auto
vendorid=0463 ]
+ SECTION_CONTENT=[eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
+ read LINE
+ [ eco650 = eco650 ]
+ [ -n [eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF ]
+ SECTION_CONTENT=[eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO"
+ read LINE
+ [ eco650 = eco650 ]
+ [ -n [eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO" ]
+ SECTION_CONTENT=[eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO"
desc="Eaton Ellipse ECO 650"
+ read LINE
+ [ eco650 = eco650 ]
+ [ -n [eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO"
desc="Eaton Ellipse ECO 650" ]
+ SECTION_CONTENT=[eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO"
desc="Eaton Ellipse ECO 650"
serial=000000000
+ read LINE
+ [ eco650 = eco650 ]
+ [ -n [eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO"
desc="Eaton Ellipse ECO 650"
serial=000000000 ]
+ SECTION_CONTENT=[eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO"
desc="Eaton Ellipse ECO 650"
serial=000000000
vendor=EATON
+ read LINE
+ [ eco650 = eco650 ]
+ [ -n [eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO"
desc="Eaton Ellipse ECO 650"
serial=000000000
vendor=EATON ]
+ SECTION_CONTENT=[eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO"
desc="Eaton Ellipse ECO 650"
serial=000000000
vendor=EATON
bus=003
+ read LINE
+ [ eco650 = eco650 ]
+ [ -n [eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO"
desc="Eaton Ellipse ECO 650"
serial=000000000
vendor=EATON
bus=003 ]
+ SECTION_CONTENT=[eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO"
desc="Eaton Ellipse ECO 650"
serial=000000000
vendor=EATON
bus=003
debug_min=0
+ read LINE
+ [ -n [eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO"
desc="Eaton Ellipse ECO 650"
serial=000000000
vendor=EATON
bus=003
debug_min=0 ]
+ echo [eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO"
desc="Eaton Ellipse ECO 650"
serial=000000000
vendor=EATON
bus=003
debug_min=0
+ [ 0 = 0 ]
+ return 0
+ calc_md5 [eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO"
desc="Eaton Ellipse ECO 650"
serial=000000000
vendor=EATON
bus=003
debug_min=0
+ echo [eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO"
desc="Eaton Ellipse ECO 650"
serial=000000000
vendor=EATON
bus=003
debug_min=0
+ md5sum
+ awk {print $1}
+ _MD5=8a4a7aa5a28a7d38f1961f4d7c3913c9
+ [ -n 8a4a7aa5a28a7d38f1961f4d7c3913c9 ]
+ echo 8a4a7aa5a28a7d38f1961f4d7c3913c9
+ systemd_getSavedMD5 eco650
+ PROP=SECTION_CHECKSUM
+ [ -n eco650 ]
+ [ -s /etc/systemd/system/nut-driver@eco650.service.d/nut-driver-enumerator-generated-checksum.conf ]
+ grep Environment='SECTION_CHECKSUM= /etc/systemd/system/nut-driver@eco650.service.d/nut-driver-enumerator-generated-checksum.conf
+ sed -e s,^Environment='SECTION_CHECKSUM=,, -e s,'$,,
+ [ 8a4a7aa5a28a7d38f1961f4d7c3913c9 = 6b073941959221404dc6397afd2e8190 ]
+ [ -z dummy ]
+ _TMP_SVC=dummy
eco650
+ [ -z dummy
eco650 ]
+ echo dummy
eco650
+ return 1
+ NEW_CHECKSUM=dummy
eco650
+ [ -n dummy
eco650 ]
+ upsconf_getDriver dummy
+ GETSECTION=upsconf_getSection_SDP upsconf_getValue dummy driver
+ [ -n driver ]
+ [ -n upsconf_getSection_SDP ]
+ CURR_SECTION=
+ RES=0
+ upsconf_getSection_SDP dummy
+ upslist_normalizeFile_once
+ [ -z debug_min=0
[dummy]
driver=dummy-ups
port=dummy.dev
[eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO"
desc="Eaton Ellipse ECO 650"
serial=000000000
vendor=EATON
bus=003
debug_min=0 ]
+ return 0
+ upsconf_getSection_content dummy
+ CURR_SECTION=
+ SECTION_CONTENT=
+ RES=1
+ [ -n dummy ]
+ read LINE
+ [ 1 = 0 ]
+ SECTION_CONTENT=[dummy]
+ CURR_SECTION=dummy
+ RES=0
+ continue
+ read LINE
+ [ dummy = dummy ]
+ [ -n [dummy] ]
+ SECTION_CONTENT=[dummy]
driver=dummy-ups
+ read LINE
+ [ dummy = dummy ]
+ [ -n [dummy]
driver=dummy-ups ]
+ SECTION_CONTENT=[dummy]
driver=dummy-ups
port=dummy.dev
+ read LINE
+ [ dummy = dummy ]
+ break
+ [ -n [dummy]
driver=dummy-ups
port=dummy.dev ]
+ echo [dummy]
driver=dummy-ups
port=dummy.dev
+ [ 0 = 0 ]
+ return 0
+ SECTION_CONTENT=[dummy]
driver=dummy-ups
port=dummy.dev
+ shift
+ KEYS=driver
+ [ 1 -gt 0 ]
+ RES_L=0
+ VALUE=
+ echo [dummy]
driver=dummy-ups
port=dummy.dev
+ grep -E (^driver=|^driver$)
+ LINE=driver=dummy-ups
+ echo driver=dummy-ups
+ sed -e s,^driver=,, -e s,^\"\(.*\)\"$,\1, -e s,^'\(.*\)'$,\1,
+ VALUE=dummy-ups
+ [ 0 = 0 ]
+ echo dummy-ups
+ shift
+ [ 0 -gt 0 ]
+ [ 0 = 0 ]
+ return 0
+ return 0
+ CURR_DRV=dummy-ups
+ DO_UNREGISTER=yes
+ [ -n dummy-ups ]
+ /usr/local/ups/bin/dummy-ups -a dummy -c reload-or-error
+ [ yes = yes ]
+ echo Dropping old systemd service instance dummy whose section in config file has changed...
Dropping old systemd service instance dummy whose section in config file has changed...
+ systemd_unregisterInstance dummy
+ echo Removing instance: 'nut-driver@dummy' ...
Removing instance: 'nut-driver@dummy' ...
+ timeout 90s /bin/systemctl stop nut-driver@dummy.service
Warning: The unit file, source configuration file or drop-ins of nut-driver@dummy.service changed on disk. Run 'systemctl daemon-reload' to reload units.
+ /bin/systemctl disable nut-driver@dummy.service
Unit /etc/systemd/system/nut-driver@dummy.service is masked, ignoring.
+ rm -rf /etc/systemd/system/nut-driver@dummy.service.d
+ /bin/systemctl reset-failed nut-driver@dummy.service
+ upsconf_getDriver eco650
+ GETSECTION=upsconf_getSection_SDP upsconf_getValue eco650 driver
+ [ -n driver ]
+ [ -n upsconf_getSection_SDP ]
+ CURR_SECTION=
+ RES=0
+ upsconf_getSection_SDP eco650
+ upslist_normalizeFile_once
+ [ -z debug_min=0
[dummy]
driver=dummy-ups
port=dummy.dev
[eco650]
driver=usbhid-ups
port=auto
vendorid=0463
productid=FFFF
product="Ellipse ECO"
desc="Eaton Ellipse ECO 650"
serial=000000000
vendor=EATON
bus=003
debug_min=0 ]
+ return 0
+ upsconf_getSection_content eco650
+ CURR_SECTION=
+ SECTION_CONTENT=
+ RES=1
+ [ -n eco650 ]
+ read LINE
+ [  = eco650 ]
+ CURR_SECTION=[]
+ continue
+ read LINE
+ [ [] = eco650 ]
+ read LINE
+ [ [] = eco650 ]
+ read LINE
+ [ 1 = 0 ]
+ SECTION_CONTENT=[eco650]
+ CURR_SECTION=eco650
+ RES=0
+ continue
+ read LINE
+ [ eco650 = eco650 ]
+ [ -n [eco650] ]
+ SECTION_CONTENT=[eco650]
driver=usbhid-ups
+ read LINE
+ [ eco650 = eco650 ]
+ [ -n [eco650]
driver=usbhid-ups ]
+ SECTION_CONTENT=[eco650]
driver=usbhid-ups
port=auto
+ read LINE
+ [ -n [eco650]
driver=usbhid-ups
port=auto ]
+ echo [eco650]
driver=usbhid-ups
port=auto
+ [ 0 = 0 ]
+ return 0
+ SECTION_CONTENT=[eco650]
driver=usbhid-ups
port=auto
+ shift
+ KEYS=driver
+ [ 1 -gt 0 ]
+ RES_L=0
+ VALUE=
+ echo [eco650]
driver=usbhid-ups
port=auto
+ grep -E (^driver=|^driver$)
+ LINE=driver=usbhid-ups
+ echo driver=usbhid-ups
+ sed -e s,^driver=,, -e s,^\"\(.*\)\"$,\1, -e s,^'\(.*\)'$,\1,
+ VALUE=usbhid-ups
+ [ 0 = 0 ]
+ echo usbhid-ups
+ shift
+ [ 0 -gt 0 ]
+ [ 0 = 0 ]
+ return 0
+ return 0
+ CURR_DRV=usbhid-ups
+ DO_UNREGISTER=yes
+ [ -n usbhid-ups ]
+ /usr/local/ups/bin/usbhid-ups -a eco650 -c reload-or-error
+ DO_UNREGISTER=no
+ [ no = yes ]
+ echo Keeping systemd service instance eco650 whose section in config file has changed: live reload sufficed
Keeping systemd service instance eco650 whose section in config file has changed: live reload sufficed
+ upslist_readSvcs after updating for new config section checksums
+ systemd_listInstances
+ systemd_listInstances_raw
+ sed -e s/^.*@// -e s/\.service$//
+ + sort -n/bin/systemctl
 show nut-driver@* -p Id
+ grep -E =nut-driver
+ sed s,^Id=,,
+ UPSLIST_SVCS=dummy
eco650
+ [ -z dummy
eco650 ]
+ [ -n dummy
eco650 ]
+ upslist_delSvcs
+ common_isFiled dummy
+ [ -n dummy
eco650 ]
+ [ dummy = dummy ]
+ return 0
+ common_isFiled eco650
+ [ -n dummy
eco650 ]
+ [ eco650 = dummy ]
+ systemd_validInstanceName dummy
+ calc_md5 dummy
+ echo dummy
+ md5sum
+ awk {print $1}
+ _MD5=f02e326f800ee26f04df7961adbf7c0a
+ [ -n f02e326f800ee26f04df7961adbf7c0a ]
+ echo f02e326f800ee26f04df7961adbf7c0a
+ echo MD5_f02e326f800ee26f04df7961adbf7c0a
+ [ MD5_f02e326f800ee26f04df7961adbf7c0a = eco650 ]
+ [ eco650 = eco650 ]
+ return 0
+ [ no = yes ]
+ [ no = yes ]
+ [ -n dummy
eco650 ]
+ upslist_addSvcs
+ common_isRegistered dummy
+ [ -n dummy
eco650 ]
+ [ dummy = dummy ]
+ return 0
+ common_isRegistered eco650
+ [ -n dummy
eco650 ]
+ [ eco650 = dummy ]
+ systemd_validInstanceName eco650
+ calc_md5 eco650
+ echo eco650
+ md5sum
+ awk {print $1}
+ _MD5=725517ba9eb4f1b0435dff2aeff5e693
+ [ -n 725517ba9eb4f1b0435dff2aeff5e693 ]
+ echo 725517ba9eb4f1b0435dff2aeff5e693
+ echo MD5_725517ba9eb4f1b0435dff2aeff5e693
+ [ MD5_725517ba9eb4f1b0435dff2aeff5e693 = dummy ]
+ [ eco650 = eco650 ]
+ return 0
+ systemd_refreshSupervizor
+ /bin/systemctl daemon-reload
+ upslist_readSvcs after checking for new config sections to define service instances
+ systemd_listInstances
+ systemd_listInstances_raw
+ + sed -e/bin/systemctl s/^.*@// show -e nut-driver@* s/\.service$// -p
 Id
+ sort -n
+ grep -E =nut-driver
+ sed s,^Id=,,
+ UPSLIST_SVCS=dummy
eco650
+ [ -z dummy
eco650 ]
+ upslist_readSvcs
+ systemd_listInstances
+ systemd_listInstances_raw
+ sed -e s/^.*@// -e s/\.service$//
+ /bin/systemctl show+  nut-driver@* -p Id
sort+  -n
grep -E =nut-driver
+ sed s,^Id=,,
+ UPSLIST_SVCS=dummy
eco650
+ [ -z dummy
eco650 ]
+ [ -n dummy
eco650 ]
+ echo === The currently defined service instances are:
=== The currently defined service instances are:
+ echo dummy
eco650
dummy
eco650
+ [ -n dummy
eco650 ]
+ echo === The currently defined configurations in '/etc/nut/ups.conf' are:
=== The currently defined configurations in '/etc/nut/ups.conf' are:
+ echo dummy
eco650
dummy
eco650
+ [ yes = yes ]
+ systemd_restart_upsd
+ /bin/systemctl is-active nut-server
+ echo Reloading or restarting NUT data server to make sure it knows new configuration...
Reloading or restarting NUT data server to make sure it knows new configuration...
+ timeout 90s /bin/systemctl reload-or-restart nut-server
+ UPSLIST_EQ_RES=0
+ upslist_equals dummy
eco650 dummy
eco650
+ [ -n dummy
eco650 -a -z dummy
eco650 ]
+ [ -z dummy
eco650 -a -n dummy
eco650 ]
+ [ dummy
eco650 = dummy
eco650 ]
+ return 0
+ calc_md5_file /etc/nut/ups.conf
+ [ -s /etc/nut/ups.conf ]
+ md5sum
+ awk {print $1}
+ _MD5=fedc1d8abc159c5580adb97b9c3e429b
+ [ -n fedc1d8abc159c5580adb97b9c3e429b ]
+ echo fedc1d8abc159c5580adb97b9c3e429b
+ UPSCONF_CHECKSUM_END=fedc1d8abc159c5580adb97b9c3e429b
+ [ fedc1d8abc159c5580adb97b9c3e429b != fedc1d8abc159c5580adb97b9c3e429b ]
+ [ 0 = 0 ]
+ date -u
+ echo Thu Apr 18 21:26:05 UTC 2024 : OK: No more changes to reconcile between systemd service instances and device configurations in '/etc/nut/ups.conf'
Thu Apr 18 21:26:05 UTC 2024 : OK: No more changes to reconcile between systemd service instances and device configurations in '/etc/nut/ups.conf'
+ [  = no ]
+ return 42
+ exit 42

Services changed, driver restarted with new settings:

...
Apr 18 23:26:04 pve nut-driver@eco650[1865973]: 1163.415286        [D2] Path: UPS.PowerSummary.PresentStatus.BelowRemainingCapacityLimit, Type: Feature, ReportID: 0x01, Offset: 1, Size: 1, Value: 0
Apr 18 23:26:04 pve nut-driver@eco650[1865973]: 1163.415318        sock_connect: enabling asynchronous mode (auto)
Apr 18 23:26:04 pve nut-driver@eco650[1865973]: 1163.415332        [D1] sock_arg: socket 11 requested NOBROADCAST mode
Apr 18 23:26:04 pve nut-driver@eco650[1865973]: 1163.415338        [D2] send_to_one: sending PONG
Apr 18 23:26:04 pve nut-driver@eco650[1865973]: 1163.415425        [D2] entering main_instcmd(driver.reload-or-error, (null)) for [eco650] on socket 11
Apr 18 23:26:04 pve nut-driver@eco650[1865973]: 1163.415453        [D1] set_reload_flag: raising reload flag due to signal -1 (Unknown signal -1) => reload_flag=1
Apr 18 23:26:04 pve nut-driver@eco650[1865973]: 1163.415457        Handling requested live reload of NUT driver configuration for [eco650]
Apr 18 23:26:04 pve nut-driver@eco650[1865973]: 1163.415541        [D1] testval_reloadable: setting 'driver' exists and is unmodified
Apr 18 23:26:04 pve nut-driver@eco650[1865973]: 1163.415551        [D1] testval_reloadable: setting 'port' exists and is unmodified
Apr 18 23:26:04 pve nut-driver@eco650[1865973]: 1163.415558        [D1] testvar_reloadable: setting 'vendorid' exists and is unmodified
Apr 18 23:26:04 pve nut-driver@eco650[1865973]: 1163.415565        [D1] testvar_reloadable: setting 'productid' exists and is unmodified
Apr 18 23:26:04 pve nut-driver@eco650[1865973]: 1163.415571        [D1] testvar_reloadable: setting 'product' exists and is unmodified
Apr 18 23:26:04 pve nut-driver@eco650[1865973]: 1163.415580        [D1] testvar_reloadable: setting 'serial' exists and is unmodified
Apr 18 23:26:04 pve nut-driver@eco650[1865973]: 1163.415586        [D1] testvar_reloadable: setting 'vendor' exists and is unmodified
Apr 18 23:26:04 pve nut-driver@eco650[1865973]: 1163.415591        [D1] testvar_reloadable: setting 'bus' exists and is unmodified
Apr 18 23:26:04 pve nut-driver@eco650[1865973]: 1163.415604        [D1] handle_reload_flag: read_upsconf() for [eco650] completed, restart-required verdict was: 0
Apr 18 23:26:04 pve nut-driver@eco650[1865973]: 1163.415641        Applying debug_min=0 from ups.conf driver section (overriding global 0)
Apr 18 23:26:04 pve nut-driver@eco650[1865973]: 1163.415648        Applying debug level 0 from original command line arguments
Apr 18 23:26:04 pve nut-driver@eco650[1865973]: Completed requested live reload of NUT driver configuration for [eco650]: 0
Apr 18 23:26:05 pve systemd[1]: Reloading Network UPS Tools - power devices information server.
Apr 18 23:26:05 pve nut-server[1923942]: Network UPS Tools upsd 2.8.2-60-gdeba0a96a
Apr 18 23:26:05 pve systemd[1]: Reloaded Network UPS Tools - power devices information server.
Apr 18 23:26:05 pve upsd[1180563]: mainloop: Interrupted system call
Apr 18 23:26:05 pve nut-server[1180563]: mainloop: Interrupted system call
Apr 18 23:26:05 pve nut-server[1180563]: SIGHUP: reloading configuration
Apr 18 23:26:05 pve nut-server[1180563]: Applying debug level 0 from original command line arguments
Apr 18 23:26:05 pve upsd[1180563]: SIGHUP: reloading configuration
Apr 18 23:26:05 pve upsd[1180563]: Applying debug level 0 from original command line arguments

Set of NDE artifact files differs (file for dummy disappeared):

:; ls -la  nut-driver@*.service.d/*
-rw-r--r-- 1 root root  81 Apr 19  2023 nut-driver@.service.d/nut-driver-enumerator-generated-checksum.conf
-rw-r--r-- 1 root root  74 Apr 18 23:06 nut-driver@eco650.service.d/nut-driver-enumerator-generated-checksum.conf
-rw-r--r-- 1 root root  40 Apr 18 23:09 nut-driver@eco650.service.d/nut-driver-enumerator-generated-devicename.conf
-rw-r--r-- 1 root root 364 Apr 18 23:06 nut-driver@eco650.service.d/nut-driver-enumerator-generated.conf

:;  grep . nut-driver@*.d/*
nut-driver@.service.d/nut-driver-enumerator-generated-checksum.conf:[Service]
nut-driver@.service.d/nut-driver-enumerator-generated-checksum.conf:Environment='SECTION_CHECKSUM_GLOBAL=e66f236c1cb34ba08a795537493bc884'

nut-driver@eco650.service.d/nut-driver-enumerator-generated-checksum.conf:[Service]
nut-driver@eco650.service.d/nut-driver-enumerator-generated-checksum.conf:Environment='SECTION_CHECKSUM=6b073941959221404dc6397afd2e8190'

nut-driver@eco650.service.d/nut-driver-enumerator-generated-devicename.conf:[Service]
nut-driver@eco650.service.d/nut-driver-enumerator-generated-devicename.conf:Environment='DEVICE="eco650"'

nut-driver@eco650.service.d/nut-driver-enumerator-generated.conf:# Customization generated Thu Apr 18 21:06:40 UTC 2024 by nut-driver-enumerator for NUT device 'eco650'
nut-driver@eco650.service.d/nut-driver-enumerator-generated.conf:# DO NOT EDIT: This file would be removed or overwritten by that service
nut-driver@eco650.service.d/nut-driver-enumerator-generated.conf:[Unit]
nut-driver@eco650.service.d/nut-driver-enumerator-generated.conf:Description=Network UPS Tools - device driver for NUT device 'eco650'
nut-driver@eco650.service.d/nut-driver-enumerator-generated.conf:Wants=systemd-udev.service systemd-udev-settle.service
nut-driver@eco650.service.d/nut-driver-enumerator-generated.conf:After=systemd-udev.service systemd-udev-settle.service
jimklimov commented 1 month ago

Both logs for 2.8.0 and 2.8.1 show lines for Dropping old systemd service instance X whose section in config file has changed and then Adding new systemd service instance for power device [X]... but two runs of the current master branch code indeed do not.

Looking for regression...

jimklimov commented 1 month ago

Noting on 218 length-check question above: PR #682 did add an optimization to replace shell string variable emptiness checks with comparison of length count to 0. And checking UPSCONF_DATA twice is part of call stack from upslist_readFile(). So this bit of mystery is resolved :)

jimklimov commented 1 month ago

Sub-shelling misfired: NEW_CHECKSUM is set inside round parentheses and value gets lost (stays empty as it was) in outer shell.

jimklimov commented 1 month ago

Another note (regarding lack of checksum file for dummy that only has SDP fields not commented away): we do try to save it... somehow (TO REVISE):

systemd_registerInstance() { ...
    systemd_setSavedMD5 "$SVCINST" "`upsconf_getSection_MD5 "$DEVICE"`"
}

What does upsconf_getSection_MD5() return in this case (SDP-only)?

UPDATE: Seems to return and checksum the whole content, does not exclude SDP lines and remain with nothing. So perhaps when re-creation of units gets fixed, these files would appear again.