----- Message from Jim Klimov <[email protected]> ---------
   Date: Wed, 30 Nov 2022 09:05:33 +0100
   From: Jim Klimov <[email protected]>
Subject: Re: [Nut-upsuser] NUT no longer works after 2.7 -> 2.8 upgrade
     To: [email protected]
     Cc: [email protected]

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 <[email protected]> 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][1]>
      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


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 <[email protected] 
<mailto:[email protected]>> 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@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@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@mythtv ups]# ll /var/run/usb*
    ls: cannot access '/var/run/usb*': No such file or directory

    [root@mythtv ups]# ll -d /var/run
    lrwxrwxrwx. 1 root root 6 Aug 31  2014 /var/run -> ../run

    [root@mythtv ups]# ll -d /run
    drwxr-xr-x 55 root root 1500 Nov 28 08:22 /run

    [root@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
    [email protected]
    <mailto:[email protected]>
    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
[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

----- End message from Jim Klimov <[email protected]> -----



Links:
------
[1] mailto:jimklimov%[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

Reply via email to