Comments inline.
----- Message from Bill Gee <[email protected]> ---------
Date: Wed, 30 Nov 2022 06:04:14 -0600
From: Bill Gee <[email protected]>
Subject: Re: [Nut-upsuser] NUT no longer works after 2.7 -> 2.8 upgrade
To: [email protected]
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/[email protected] exists. I have made
no changes to it so far. Here are the contents, unfortunately
line-wrapped by Thunderbird.
================================
[root@mythtv system]# grep -v '^#' [email protected]
[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
[email protected] 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 [email protected] -f" in one terminal
while you run "systemctl start [email protected]" 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/[email protected]/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 [email protected]
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@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 <[email protected]> ---------
Date: Tue, 29 Nov 2022 19:25:19 -0600
From: Bill Gee <[email protected]>
Subject: Re: [Nut-upsuser] NUT no longer works after 2.7 -> 2.8 upgrade
To: Jim Klimov <[email protected]>
Cc: Arnaud Quette via Nut-upsuser <[email protected]>
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/[email protected]
(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/[email protected] 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
[email protected]
https://alioth-lists.debian.net/cgi-bin/mailman/listinfo/nut-upsuser
----- End message from Bill Gee <[email protected]> -----
--
Simon Wilson
M: 0400 12 11 16
_______________________________________________
Nut-upsuser mailing list
[email protected]
https://alioth-lists.debian.net/cgi-bin/mailman/listinfo/nut-upsuser