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

Bill Gee bgee at campercaver.net
Wed Nov 30 12:04:14 GMT 2022


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

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



More information about the Nut-upsuser mailing list