[Nut-upsuser] NUT no longer works after 2.7 -> 2.8 upgrade

Bill Gee bgee at campercaver.net
Thu Dec 1 01:26:46 GMT 2022


Hi Simon -

I ran through the steps you gave below.  To quote Gilbert&Sullivan ... 
"Modified Rapture!"  I suppose I should try a reboot to make sure 
everything starts properly.  But first, there is a problem with upsc. 
Also nut-server complains that it cannot connect to the device.

/run/nut exists and contains two files.

Here are some outputs:

======================================
[root at mythtv ~]# journalctl -u nut-driver at cyberpower.service -f
Nov 30 19:00:20 mythtv.billgee.local systemd[1]: Starting 
nut-driver at cyberpower.service - Network UPS Tools - device driver for 
NUT device 'cyberpower'...
Nov 30 19:00:20 mythtv.billgee.local systemd-tmpfiles[28689]: 
/usr/lib/tmpfiles.d/nut-client.conf:2: Line references path below legacy 
directory /var/run/, updating /var/run/nut → /run/nut; please update the 
tmpfiles.d/ drop-in file accordingly.
Nov 30 19:00:20 mythtv.billgee.local systemd-tmpfiles[28689]: 
/usr/lib/tmpfiles.d/nut-client.conf:3: Line references path below legacy 
directory /var/run/, updating /var/run/nut → /run/nut; please update the 
tmpfiles.d/ drop-in file accordingly.
Nov 30 19:00:21 mythtv.billgee.local nut-driver at cyberpower[28719]: Using 
subdriver: CyberPower HID 0.6
Nov 30 19:00:21 mythtv.billgee.local nut-driver at cyberpower[28719]: 
Network UPS Tools - Generic HID driver 0.47 (2.8.0)
Nov 30 19:00:21 mythtv.billgee.local nut-driver at cyberpower[28719]: USB 
communication driver (libusb 1.0) 0.43
Nov 30 19:00:21 mythtv.billgee.local nut-driver at cyberpower[28719]: 
cps_adjust_battery_scale: battery readings will be scaled by 2/3
Nov 30 19:00:21 mythtv.billgee.local usbhid-ups[28769]: Startup successful
Nov 30 19:00:21 mythtv.billgee.local nut-driver at cyberpower[28691]: 
Network UPS Tools - UPS driver controller 2.8.0
Nov 30 19:00:21 mythtv.billgee.local systemd[1]: Started 
nut-driver at cyberpower.service - Network UPS Tools - device driver for 
NUT device 'cyberpower'.

[root at mythtv ups]# ll /run/nut
total 4
srw-rw---- 1 nut nut 0 Nov 30 19:00 usbhid-ups-cyberpower
-rw-r--r-- 1 nut nut 6 Nov 30 19:00 usbhid-ups-cyberpower.pid


[root at mythtv ups]# systemctl --no-pager --full status nut-server
● nut-server.service - Network UPS Tools - power devices information server
      Loaded: loaded (/usr/lib/systemd/system/nut-server.service; 
enabled; preset: disabled)
      Active: active (running) since Wed 2022-11-30 19:06:53 CST; 13min ago
    Main PID: 28918 (upsd)
       Tasks: 1 (limit: 9482)
      Memory: 736.0K
         CPU: 20ms
      CGroup: /system.slice/nut-server.service
              └─28918 /usr/sbin/upsd -F

Nov 30 19:06:53 mythtv.billgee.local nut-server[28918]: /var/run is 
world readable
Nov 30 19:06:53 mythtv.billgee.local upsd[28918]: /var/run is world readable
Nov 30 19:06:53 mythtv.billgee.local upsd[28918]: Can't connect to UPS 
[cyberpower] (usbhid-ups-cyberpower): Connection refused
Nov 30 19:06:53 mythtv.billgee.local nut-server[28918]: Can't connect to 
UPS [cyberpower] (usbhid-ups-cyberpower): Connection refused
Nov 30 19:06:53 mythtv.billgee.local nut-server[28918]: Running as 
foreground process, not saving a PID file
Nov 30 19:06:53 mythtv.billgee.local upsd[28918]: Running as foreground 
process, not saving a PID file
Nov 30 19:11:53 mythtv.billgee.local nut-server[28918]: Can't connect to 
UPS [cyberpower] (usbhid-ups-cyberpower): Connection refused
Nov 30 19:11:53 mythtv.billgee.local upsd[28918]: Can't connect to UPS 
[cyberpower] (usbhid-ups-cyberpower): Connection refused
Nov 30 19:16:53 mythtv.billgee.local nut-server[28918]: Can't connect to 
UPS [cyberpower] (usbhid-ups-cyberpower): Connection refused
Nov 30 19:16:53 mythtv.billgee.local upsd[28918]: Can't connect to UPS 
[cyberpower] (usbhid-ups-cyberpower): Connection refused

[root at mythtv ups]# ps ax | grep ups
     768 ?        Ss     0:00 /usr/sbin/cupsd -l
     773 ?        Ss     0:00 sshd: /usr/sbin/sshd -D [listener] 0 of 
10-100 startups
   28769 ?        Ss     0:00 /usr/sbin/usbhid-ups -a cyberpower
   28918 ?        Ss     0:00 /usr/sbin/upsd -F
   28929 pts/1    S+     0:00 grep --color=auto ups

[root at mythtv ups]# upsc cyberpower at localhost
Error: Driver not connected


===============
Bill Gee

On 11/30/22 07:21, Simon Wilson via Nut-upsuser wrote:
> Comments inline.
> 
> ----- Message from Bill Gee <bgee at campercaver.net> ---------
>     Date: Wed, 30 Nov 2022 06:04:14 -0600
>     From: Bill Gee <bgee at campercaver.net>
> Subject: Re: [Nut-upsuser] NUT no longer works after 2.7 -> 2.8 upgrade
>       To: nut-upsuser at alioth-lists.debian.net
> 
> 
>> Hi Simon --
>>
>> Yes, I am pretty sure this is the RedHat packaging problem.  I sure 
>> hope they get it squared away.  I have only one system using nut and 
>> that is because all my other systems have APC battery backup and run 
>> apcupsd. Apcupsd may be old, grey and unmaintained, but it Just Works.
>>
>> You mention that the STATEPATH line in upsd.conf will override other 
>> settings.  It does not appear to be the case for me.  The only way I 
>> could get the driver to run was by setting NUT_STATEPATH on the 
>> command line.  Perhaps that is an issue with the driver and not 
>> nut-server?
>>
>> In answer to your questions:
>>
>> 1) /usr/lib/systemd/system/nut-driver at .service exists.  I have made no 
>> changes to it so far.  Here are the contents, unfortunately 
>> line-wrapped by Thunderbird.
>>
>> ================================
>> [root at mythtv system]# grep -v '^#' nut-driver at .service
>> [Unit]
>> Description=Network UPS Tools - device driver for %I
>> After=local-fs.target
>>
>>
>> PartOf=nut-driver.target
>>
>>
>> [Service]
>> EnvironmentFile=-/etc/ups/nut.conf
>> SyslogIdentifier=%N
>> ExecStartPre=-/usr/bin/systemd-tmpfiles --create 
>> /usr/lib/tmpfiles.d/nut-client.conf
>> ExecStart=/bin/sh -c 'NUTDEV="`/usr/libexec/nut-driver-enumerator.sh 
>> --get-device-for-service %i`" && [ -n "$NUTDEV" ] || { echo "FATAL: 
>> Could not find a NUT device section for service unit %i" >&2 ; exit 1 
>> ; } ; /usr/sbin/upsdrvctl start "$NUTDEV"'
>> ExecStop=/bin/sh -c 'NUTDEV="`/usr/libexec/nut-driver-enumerator.sh 
>> --get-device-for-service %i`" && [ -n "$NUTDEV" ] || { echo "FATAL: 
>> Could not find a NUT device section for service unit %i" >&2 ; exit 1 
>> ; } ; /usr/sbin/upsdrvctl stop "$NUTDEV"'
>> StartLimitInterval=0
>> Restart=always
>> RestartSec=15s
>> Type=forking
>>
>> [Install]
>> WantedBy=nut-driver.target
>> ===================================
> 
> OK, so that's the same as mine. It's ExecStartPre task is to create the 
> pid folder from your answer to the third (unasked) question :) which is 
> that outlined in /usr/lib/tmpfiles.d/nut-client.conf
> 
> You have /var/run/nut 0770 root nut - so systemd should ensure that exists.
> 
> By the way, having it with "/var/run/nut" will trigger a 'noise' error 
> about the "/var" path - change it to just be /run/nut in nut-client.conf.
> 
> As a test, what happens if you:
> 
> - make sure nut.conf has MODE=standalone
> - make sure ALL nut services are stopped, i.e. 'ps -ax | grep ups' 
> should give you only the grep process as an answer
> - delete /run/nut folder (it will get re-created automatically)
> - take /etc/ups/upsd.conf back to have commented out STATEPATH as 
> distributed in the package
> - run "systemctl enable nut-driver-enumerator.path 
> nut-driver-enumerator.service --now" - this will enable and start the 
> services that monitor ups.conf for changes and then write the actual 
> driver service file; the second one also runs early in boot and ensures 
> that the service file exists and is correct.
> - run 'nut-scanner -U' and copy its output into ups.conf instead of your 
> current definition with name heading [cyberpower], save and exit: this 
> will trigger the above enumerators to run and re-do the 
> nut-driver at cyberpower.service file
> 
> Based on an out of the box install, you have at this point done enough 
> that the driver should run (*should*!!!!)
> 
> - run "journalctl -u nut-driver at cyberpower.service -f" in one terminal 
> while you run "systemctl start nut-driver at cyberpower.service" in another 
> - what does journalctl output?
> 
> Assuming it does not start (based on what you have said below), show the 
> messages.
> 
> If it still does not start as configured above, but you \can/ run 
> /usr/sbin/usbhid-ups with your environment variables specified like you 
> had done before, and it *does* run, then do the following steps to 
> create a systemd drop-in file for the variable, but make the steps use 
> /run/nut instead of /var/run/nut:  
> https://bugzilla.redhat.com/show_bug.cgi?id=2127269#c8  (comment 8, 
> formatted for ease of reading). You want to get back to the RH/Fedora 
> default of using /run/nut, not /var/state/ups
> 
>    1. uncomment the "STATEPATH /var/run/nut" as already mentioned
>    2. create: /etc/systemd/system/nut-driver at .service.d/environ.conf
>     with these two lines:
> 
>      [Service]
>      Environment=NUT_STATEPATH=/var/run/nut
> 
>    3. and finally do: systemctl daemon-reload
> 
> ...then try and run systemctl start nut-driver at cyberpower.service again, 
> while monitoring journalctl.
> 
> 
> If that does not work - then I'm out of ideas at this point lol... :-D
> 
> 'set' has nothing BTW on my working system related to nut.
> 
>>
>> 2) In /etc/ups/upsd.conf, the original STATEPATH line is
>>
>> STATEPATH /var/run/nut
>>
>> Right now the original line is commented and I added another line to 
>> point at /var/state/ups.
>>
>> 3) You only asked two questions, but I sense a third might be 
>> important.  Originally the system had 
>> /usr/lib/tmpfiles.d/nut-common.conf.  I have modified that file and no 
>> longer have the original.  I copied that file to nut-client.conf, and 
>> both have the same contents:
>>
>> =======================
>> # State file (e.g. upsd to driver) and pidfile location for NUT:
>> D /var/run/nut 0770 root nut - -
>> X /var/run/nut
>> ========================
>>
>> 4) And one more unasked question!  :-)  When I look at the environment 
>> variables on the system, I see this:
>>
>> ========================
>> [root at mythtv tmpfiles.d]# set | grep -i nut
>> _=/etc/ups/nut.conf
>> ========================
>>
>>
>>
>> Bill Gee
>>
>> On 11/30/22 01:20, Simon Wilson via Nut-upsuser wrote:
>>> ----- Message from Bill Gee <bgee at campercaver.net> ---------
>>>    Date: Tue, 29 Nov 2022 19:25:19 -0600
>>>    From: Bill Gee <bgee at campercaver.net>
>>> Subject: Re: [Nut-upsuser] NUT no longer works after 2.7 -> 2.8 upgrade
>>>      To: Jim Klimov <jimklimov+nut at gmail.com>
>>>      Cc: Arnaud Quette via Nut-upsuser 
>>> <nut-upsuser at alioth-lists.debian.net>
>>>
>>>
>>>> I got it to run, but what a mess ...
>>>>
>>>> Yes, I am running systemctl daemon-reload and systemctl restart 
>>>> nut-server after each change I make.
>>>>
>>>
>>> Hi Bill,
>>>
>>> Drivers and upsd share defaults (see 'man nutupsdrv').
>>>
>>> Your original error message ("writepid: fopen 
>>> /var/run/usbhid-ups-cyberpower.pid: Permission denied") would seem to 
>>> indicate, same as the Red Hat bug, that your driver's default pid 
>>> path is /var/run.
>>>
>>> The driver by default uses STATEPATH (which can be over-ridden in 
>>> upsd.conf) to store pid files. The driver .service file is supposed 
>>> to make sure that path exists by running the ExecStartPre line, which 
>>> gets its instructions from the referenced ".conf" file from 
>>> /usr/lib/tmpfiles.d. The .service file then calls 'upsdrvctl start' 
>>> to start your usbhid-ups driver, as defined in ups.conf. Those all 
>>> need to align...
>>>
>>> 2 x questions:
>>>
>>> 1. Without its comments, what are the active lines (as installed, 
>>> without any changes) in /usr/lib/systemd/system/nut-driver at .service 
>>> (or wherever that service file is located on your system)?
>>> 2. in your upsd.conf (also as installed, without any changes), what 
>>> is the commented out STATEPATH you later mention uncommenting?
>>>
>>>> I created /usr/lib/tmpfiles.d/nut-client.conf   The owner is 
>>>> root:root and permissions are 0644.  The contents are
>>>>
>>>> # State file (e.g. upsd to driver) and pidfile location for NUT:
>>>> D /var/run/nut 0770 root nut - -
>>>> X /var/run/nut
>>>>
>>>> I uncommented the STATEPATH line in /etc/ups/upsd.conf.
>>>>
>>>> I created a directory /var/state/ups, set to 777 permissions.  
>>>> Changed the STATEPATH line in upsd.conf.  No success.
>>>>
>>>> I looked at /usr/lib/systemd/system/nut-driver at .service but could 
>>>> not see any changes to be made.  The bug report at RedHat mentions 
>>>> that a file identified in ExecStartPre does not exist, but I could 
>>>> not duplicate.
>>>>
>>>> I tried running this as root:
>>>>
>>>> NUT_STATEPATH=/var/state/ups NUT_ALTPIDPATH=/var/state/ups 
>>>> /usr/sbin/usbhid-ups -u nut -g nut -s cyberpower -x port=auto
>>>>
>>>> And it works.  I tried it with only one or the other of the two 
>>>> environment variables, but did not work.  It has to have both.
>>>>
>>>> ===============
>>>> Bill Gee
>>>>
>>
>> _______________________________________________
>> Nut-upsuser mailing list
>> Nut-upsuser at alioth-lists.debian.net
>> https://alioth-lists.debian.net/cgi-bin/mailman/listinfo/nut-upsuser
> 
> 
> ----- End message from Bill Gee <bgee at campercaver.net> -----
> 
> 
> 



More information about the Nut-upsuser mailing list