[Nut-upsuser] NUT no longer works after 2.7 -> 2.8 upgrade
Simon Wilson
simon at simonandkate.net
Wed Nov 30 10:15:59 GMT 2022
----- Message from Jim Klimov <jimklimov+nut at gmail.com> ---------
Date: Wed, 30 Nov 2022 09:05:33 +0100
From: Jim Klimov <jimklimov+nut at gmail.com>
Subject: Re: [Nut-upsuser] NUT no longer works after 2.7 -> 2.8 upgrade
To: simon at simonandkate.net
Cc: nut-upsuser at alioth-lists.debian.net
> FWIW, just checked: `git grep nut-client` does not return anything
> related to systemd, so that typo gotta be Fedora's invention ;)
>
> In-source there is only nut-common.tmpfiles handling.
>
> Jim
>
Based on:
https://bugzilla.redhat.com/show_bug.cgi?id=2127269
https://bugzilla.redhat.com/show_bug.cgi?id=2143442
https://bugzilla.redhat.com/show_bug.cgi?id=2143833
https://bugzilla.redhat.com/show_bug.cgi?id=2148706
I'd say that these are known issues :-D
Interestingly... RH/Fedora 2.7.4 packages don't have these issues -
they bring in nut-client.tmpfiles as nut-run.conf, which is then
correctly called from ExecStartPre, which sets /run/nut with correct
permissions. %piddir% is set to /run/nut, which is used in STATEPATH,
and everything is happy.
For the Fedora/RH 2.8.0 packages:
From https://src.fedoraproject.org/rpms/nut/:
Versions 2.8.0-4 and earlier:
- pull in 'nut-client-tmpfiles' as SOURCE3
- write driver service file ExecStartPre to look for it...
- ...but don't actually install it (commented out line to use it in
nut.spec)...
- ...and end up with the 'standard' nut-common.conf file but a service
file looking for something else
- appear to have broken STATEPATH / pid path? (although this is not
broken on my 2.8.0-1.el8)
Versions 2.8.0-5 and later:
- pull in 'nut-client-tmpfiles' as SOURCE3
- write driver service file ExecStartPre to look for it...
- ...but don't actually install it (commented out line to use it in
nut.spec)...
- ...and end up with the 'standard' nut-common.conf file but a service
file looking for something else
- appear to have FIXED the broken STATEPATH / pid path
All in all it looks like the Fedora/RH 2.8.0 packages are not going to
run as expected "out of the box"...
>
> On Wed, Nov 30, 2022 at 8:20 AM Simon Wilson via Nut-upsuser
> <nut-upsuser at alioth-lists.debian.net> 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[1]>
>> 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
>>>
>>>
>>> On 11/29/22 17:43, Jim Klimov wrote:
>>>> As recently noted in the lists, this was tracked
>>>> down to a Fedora 37 packaging bug:
>>>> https://bugzilla.redhat.com/show_bug.cgi
>>>> <https://bugzilla.redhat.com/show_bug.cgi>?id=2127269
>>>>
>>>> > The nut user does not have write permissions at /run.
>>>> Note that /run is linked as /var/run and the nut user DOES have write
>>>> permissions there.
>>>>
>>>> These two statements do not fit together :) Permissions on symlink
>>>> do not matter, only the ultimate object's rights do (root-owned
>>>> /run). The packaging error is that (/var)/run/nut should have been
>>>> used for drivers and upsd, or /var/state/ups as it should also
>>>> exist and be accessible to these. For a quick fix you can set
>>>> Environment=NUT_ALTPIDPATH=/var/state/ups for their systemd units
>>>> or respective custom drop-in files.
>>>>
>>>> Jim
>>>>
>>>> On Tue, Nov 29, 2022, 14:06 Bill Gee <bgee at campercaver.net
>>>> <mailto:bgee at campercaver.net>> wrote:
>>>>
>>>> Yesterday I upgraded one of my systems from Fedora 36 to Fedora
>>>> 37. NUT
>>>> was upgraded to version 2.8.0. It no longer runs.
>>>>
>>>> At first I thought it was because of the XFCE Power Manager program.
>>>> That program finds the UPS with no problem. I thought maybe the two
>>>> programs were competing for the UPS port. I shut down the XFCE power
>>>> manager, but that did not help NUT.
>>>>
>>>> Based on the diagnostics given below, I think this is a permissions
>>>> problem at /run. The nut user does not have write
>>>> permissions at /run.
>>>> Note that /run is linked as /var/run and the nut user DOES have write
>>>> permissions there.
>>>>
>>>> How can I correct this?
>>>>
>>>> =======================================
>>>> [root at mythtv ups]# 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 Tue 2022-11-29 06:18:13 CST;
>>>> 19min ago
>>>> Main PID: 11908 (upsd)
>>>> Tasks: 1 (limit: 9482)
>>>> Memory: 736.0K
>>>> CPU: 27ms
>>>> CGroup: /system.slice/nut-server.service
>>>> └─11908 /usr/sbin/upsd -F
>>>>
>>>> Nov 29 06:18:13 mythtv.billgee.local upsd[11908]: Can't connect to UPS
>>>> [cyberpower] (usbhid-ups-cyberpower): No such fi>
>>>> Nov 29 06:18:13 mythtv.billgee.local nut-server[11908]: Can't
>>>> connect to
>>>> UPS [cyberpower] (usbhid-ups-cyberpower): No s>
>>>> Nov 29 06:18:13 mythtv.billgee.local nut-server[11908]: Running as
>>>> foreground process, not saving a PID file
>>>> Nov 29 06:18:13 mythtv.billgee.local upsd[11908]: Running as
>>>> foreground
>>>> process, not saving a PID file
>>>> Nov 29 06:23:13 mythtv.billgee.local nut-server[11908]: Can't
>>>> connect to
>>>> UPS [cyberpower] (usbhid-ups-cyberpower): No such file or directory>
>>>> Nov 29 06:23:13 mythtv.billgee.local upsd[11908]: Can't connect to UPS
>>>> [cyberpower] (usbhid-ups-cyberpower): No such file or directory>
>>>>
>>>> [root at mythtv ups]# usbhid-ups -a cyberpower
>>>> Network UPS Tools - Generic HID driver 0.47 (2.8.0)
>>>> USB communication driver (libusb 1.0) 0.43
>>>> writepid: fopen /var/run/usbhid-ups-cyberpower.pid: Permission denied
>>>> Using subdriver: CyberPower HID 0.6
>>>> cps_adjust_battery_scale: battery readings will be scaled by 2/3
>>>>
>>>> Fatal error: unable to create listener socket
>>>>
>>>> bind /var/run/usbhid-ups-cyberpower failed: Permission denied
>>>>
>>>> Exiting.
>>>>
>>>> [root at mythtv ups]# ll /var/run/usb*
>>>> ls: cannot access '/var/run/usb*': No such file or directory
>>>>
>>>> [root at mythtv ups]# ll -d /var/run
>>>> lrwxrwxrwx. 1 root root 6 Aug 31 2014 /var/run -> ../run
>>>>
>>>> [root at mythtv ups]# ll -d /run
>>>> drwxr-xr-x 55 root root 1500 Nov 28 08:22 /run
>>>>
>>>> [root at mythtv ups]# tail /etc/ups/ups.conf
>>>> [cyberpower]
>>>> driver=usbhid-ups
>>>> desc="CyberPower CP1500"
>>>> port=auto
>>>> vendorid=0764
>>>> ==================================================
>>>>
>>>>
>>>> Thanks!
>>>> -- ===============
>>>> Bill Gee
>>>>
>>>> _______________________________________________
>>>> Nut-upsuser mailing list
>>>> Nut-upsuser at alioth-lists.debian.net
>>>> <mailto:Nut-upsuser at alioth-lists.debian.net>
>>>> https://alioth-lists.debian.net/cgi-bin/mailman/listinfo/nut-upsuser
>>>> <https://alioth-lists.debian.net/cgi-bin/mailman/listinfo/nut-upsuser>
>>>>
>>>
>>> _______________________________________________
>>> 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
>>
>> _______________________________________________
>> 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 Jim Klimov <jimklimov+nut at gmail.com> -----
Links:
------
[1] mailto:jimklimov%2Bnut at gmail.com
--
Simon Wilson
M: 0400 12 11 16
More information about the Nut-upsuser
mailing list