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

Bill Gee bgee at campercaver.net
Thu Dec 1 12:14:10 GMT 2022


Hi Simon -

I modified /usr/lib/tmpfiles.d/nut-client to use /run instead of 
/var/run.  I checked the startup status of the nut services.

=================
[root at mythtv ~]# systemctl list-unit-files | grep -i nut
nut-driver-enumerator.path 
  enabled         disabled
nut-driver-enumerator.service 
  enabled         disabled
nut-driver at .service 
  indirect        disabled
nut-monitor.service 
  disabled        disabled
nut-server.service 
  enabled         disabled
nut-driver.target 
  disabled        disabled
nut.target 
  disabled        disabled
==========================

I did a shutdown/reboot on the system.  The usbhid driver loaded without 
errors and did not complain about /var/run.  /run/nut exists and 
contains the expected two files.

nut-server also started since it is set to "enabled", but failed to 
connect to the driver.  It complains about "no such file or directory". 
What file is it looking for?  I ran journalctl on it but got nothing 
more than what systemctl status reports.

===========================
[root at mythtv ~]# systemctl status nut-driver at cyberpowernut-driver at cyberpower.service - Network UPS Tools - device driver for 
NUT device 'cyberpower'
      Loaded: loaded (/usr/lib/systemd/system/nut-driver at .service; 
enabled; preset: disabled)
     Drop-In: /etc/systemd/system/nut-driver at .service.d
              └─environ.conf
              /etc/systemd/system/nut-driver at cyberpower.service.d
              └─nut-driver-enumerator-generated-checksum.conf, 
nut-driver-enumerator-generated.conf
      Active: active (running) since Thu 2022-12-01 05:56:04 CST; 9min ago
     Process: 712 ExecStartPre=/usr/bin/systemd-tmpfiles --create 
/usr/lib/tmpfiles.d/nut-client.conf (code=exited, stat>
     Process: 719 ExecStart=/bin/sh -c 
NUTDEV="`/usr/libexec/nut-driver-enumerator.sh --get-device-for-service 
cyberpowe>
    Main PID: 791 (usbhid-ups)
       Tasks: 1 (limit: 9482)
      Memory: 2.9M
         CPU: 113ms
      CGroup: 
/system.slice/system-nut\x2ddriver.slice/nut-driver at cyberpower.service
              └─791 /usr/sbin/usbhid-ups -a cyberpower

Dec 01 05:56:04 mythtv.billgee.local nut-driver at cyberpower[787]: Using 
subdriver: CyberPower HID 0.6
Dec 01 05:56:04 mythtv.billgee.local nut-driver at cyberpower[787]: Network 
UPS Tools - Generic HID driver 0.47 (2.8.0)
Dec 01 05:56:04 mythtv.billgee.local nut-driver at cyberpower[787]: USB 
communication driver (libusb 1.0) 0.43
Dec 01 05:56:04 mythtv.billgee.local nut-driver at cyberpower[787]: 
cps_adjust_battery_scale: battery readings will be sca>
Dec 01 05:56:04 mythtv.billgee.local nut-driver at cyberpower[719]: Network 
UPS Tools - UPS driver controller 2.8.0
Dec 01 05:56:04 mythtv.billgee.local usbhid-ups[791]: Startup successful

[root at mythtv ~]# systemctl 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 Thu 2022-12-01 05:56:07 CST; 9min ago
    Main PID: 809 (upsd)
       Tasks: 1 (limit: 9482)
      Memory: 1000.0K
         CPU: 15ms
      CGroup: /system.slice/nut-server.service
              └─809 /usr/sbin/upsd -F

Dec 01 05:56:08 mythtv.billgee.local upsd[809]: listening on ::1 port 3493
Dec 01 05:56:08 mythtv.billgee.local upsd[809]: listening on 127.0.0.1 
port 3493
Dec 01 05:56:08 mythtv.billgee.local nut-server[809]: /var/run is world 
readable
Dec 01 05:56:08 mythtv.billgee.local nut-server[809]: Can't connect to 
UPS [cyberpower] (usbhid-ups-cyberpower): No suc>
Dec 01 05:56:08 mythtv.billgee.local upsd[809]: /var/run is world readable
Dec 01 05:56:08 mythtv.billgee.local upsd[809]: Can't connect to UPS 
[cyberpower] (usbhid-ups-cyberpower): No such file>
Dec 01 05:56:10 mythtv.billgee.local nut-server[809]: Running as 
foreground process, not saving a PID file
Dec 01 05:56:10 mythtv.billgee.local upsd[809]: Running as foreground 
process, not saving a PID file
Dec 01 06:01:08 mythtv.billgee.local nut-server[809]: Can't connect to 
UPS [cyberpower] (usbhid-ups-cyberpower): No suc>
Dec 01 06:01:08 mythtv.billgee.local upsd[809]: Can't connect to UPS 
[cyberpower] (usbhid-ups-cyberpower): No such file>
================================



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

On 11/30/22 21:14, Simon Wilson via Nut-upsuser wrote:
> ----- Message from Bill Gee <bgee at campercaver.net> ---------
>     Date: Wed, 30 Nov 2022 19:26:46 -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 -
>>
>> 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.
> 
> Not yet with the reboot. Baby steps... :) you have a driver running from 
> the service file! Celebrations are in order.
> 
> Did you need to add the environment drop-in file? At which step did it 
> work?
> 
>> But first, there is a problem with upsc. Also nut-server complains 
>> that it cannot connect to the device.
> 
> Ok, that's next... your comments are wrong way around :) nut-server not 
> starting is why upsc doesn't give you anything.
> 
>>
>> /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.
> 
> That line is the "noise" error I mentioned. Edit 
> /usr/lib/tmpfiles.d/nut-client.conf to read /run/nut, not /var/run/nut
> 
>> 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.
> 
> Ditto, although you probably don't need line 3 in the file anyway.
> 
>> 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
> 
> upsc won't work without nut-server running, so this is expected based on 
> the above failure to start nut-server.
> 
>>
>>
> 
> So... next.
> 
> Fix nut-client.conf contents, and make sure that you can start / restart 
> the driver as needed with no errors. Set nut-driver at cyberpower.service 
> to enabled for autostart, so with ONLY the enumerator services and 
> nut-driver at cyberpower.service enabled, you should see something like the 
> following for 'systemctl list-unit-files | grep -i nut':
> 
> [root at emp80 ups]# systemctl list-unit-files | grep -i nut
> nut-driver-enumerator.path                                             
> enabled
> nut-driver-enumerator.service                                          
> enabled
> nut-driver at .service                                                    
> indirect
> nut-monitor.service                                                    
> disabled
> nut-server.service                                                     
> disabled
> nut-driver.target                                                      
> disabled
> nut.target                                                             
> disabled
> 
> Stop any running nut processes, and reboot. On reboot the only thing 
> that should autostart is nut-driver at cyberpower.service (from the 
> 'indirect' call via nut-driver at .service). upsc will still not work.
> 
> Monitor the driver for a while 'journalctl -u 
> nut-driver at cyberpower.service -f' and make sure it is stable and stays 
> connected - google searches show some flakiness with some cyberpower UPSs.
> 
> Once you are confident that the driver is reliable, starting OK and 
> staying up then move on to nut-server.
> 
> I'll check in this evening and we can do some more digging on that.
> 
> Simon
> 
>>
>> ===============
>> 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> -----
>>>
>>>
>>>
>>
>> _______________________________________________
>> 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