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

Simon Wilson simon at simonandkate.net
Wed Nov 30 13:21:14 GMT 2022


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



-- 
Simon Wilson
M: 0400 12 11 16




More information about the Nut-upsuser mailing list