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

Simon Wilson simon at simonandkate.net
Thu Dec 1 03:14:42 GMT 2022


----- 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> -----



-- 
Simon Wilson
M: 0400 12 11 16




More information about the Nut-upsuser mailing list