This is what I am running with at the moment:

[root@emp80 ups]# systemctl list-unit-files | grep -i nut
nut-driver-enumerator.path                                             enabled
nut-driver-enumerator.service                                          enabled
nut-driver@.service indirect nut-monitor.service disabled nut-server.service disabled nut-driver.target disabled
nut.target                                                             enabled

nut-driver-enumerator.path enabled (and running) monitors for edits to ups.conf, and flows changes into a driver restart. I can see this happen if I edit ups.conf: the driver restarts.

The companion nut-driver-enumerator.service is a one-shot run service, is also enabled to run at boot - this appears to run on EITHER when triggered by nut-driver-enumerator.path OR on reboot (enabled), and I believe generates the required nut-driver@eaton5sx.service.

nut.target enabled should then start nut-driver.target, nut-server and nut-monitor (all are set to "wants" in the unit file).

At least, that is how I am reading it - if anyone else has other pointers please let me know! :-)

Will see what happens over multiple reboots!




----- Message from Simon Wilson via Nut-upsuser <nut-upsuser@alioth-lists.debian.net> ---------
    Date: Wed, 30 Nov 2022 10:05:47 +1000
    From: Simon Wilson via Nut-upsuser <nut-upsuser@alioth-lists.debian.net>
Reply-To: si...@simonandkate.net
 Subject: Re: [Nut-upsuser] NUT service files on systemd
      To: Jim Klimov <jimklimov+...@gmail.com>
      Cc: Arnaud Quette via Nut-upsuser <nut-upsuser@alioth-lists.debian.net>


----- Message from Jim Klimov <jimklimov+...@gmail.com> ---------
   Date: Wed, 30 Nov 2022 00:36:09 +0100
   From: Jim Klimov <jimklimov+...@gmail.com>
Subject: Re: [Nut-upsuser] NUT service files on systemd
     To: si...@simonandkate.net
     Cc: Arnaud Quette via Nut-upsuser <nut-upsuser@alioth-lists.debian.net>


As recently noted in the lists, this was tracked
down to a Fedora 37 packaging bug: https://bugzilla.redhat.com/show_bug.cgi?
id=2127269

I did also recently revise build recipes and in particular use of PIDPATH
(not superficially suffixed with /nut now). Various precedents were messy
and confusing about it :-\

Thanks for the bug link - interesting, and reflects the challenges I had with the 2.8.0-1.el8 package I found.

For context, what I worked through to resolve:

After the driver failed on 2.8.0 and seeing the permission error I noticed nut-driver@.service had "ExecStartPre=/usr/bin/systemd-tmpfiles --create /usr/lib/tmpfiles.d/nut-client.conf" but also that file was missing. When I checked /usr/lib/tmpfiles.d/ there was a nut-common.conf (which I am not sure is actually used at all?).

Looking into the src I found what nut-client.conf was supposed to contain and created /usr/lib/tmpfiles.d/nut-client.conf with the required line pointing to /run/nut, with (on my RHEL system) root:nut 0770 permissions. Systemd then runs that on service start, creates the path with the correct permissions and the driver starts OK, with a PID at /run/nut/usbhid-ups-eaton5sx.pid. Thumbs up.

I notice in the bug the suggested fix of "Uncommenting STATEPATH=/var/run/nut in /etc/ups/upsd.conf" however I assume that would require the correct permissions to already be available at that location (although perhaps that is already done by install script?). Correcting the ExecStartPre target has the advantage of resolving it each time if it is not there or if permissions are incorrect I believe.


Regarding enabled services - I think you should `systemctl enable
nut-server nut-monitor` and possibly `nut-driver@eaton5sx` explicitly.
Possibly - because i think this instance should have been enabled by
nut-driver-enumerator which registered it.

Thanks. Having nut.target enabled triggers the server and monitor OK. It's the driver which does not seem to run each time (but does *some* times, strangely). I testing for that and kicking it up if it is not running at the moment, but will keep an eye on any relevant comments to this list.


I did not yet inspect Fedora packaging and how it differs from `make
install` so can't quickly suggest more. OTOH would first suspect that new
recipe inherits parts of what was used for 2.7.4 and before, which might
pull in another direction than new in-project abilities.

Jim

Thanks again Jim.



On Tue, Nov 29, 2022, 13:14 Simon Wilson via Nut-upsuser <
nut-upsuser@alioth-lists.debian.net> wrote:

I've installed nut and nut-client 2.8.0 on my systemd server (had some
fun with the 2.8.0-1.el8 packages not correctly generating /var/run
due to an incorrect /usr/lib/tmpfiles.d entry (nut-common.conf instead
of nut-client.conf and pointing to /var/run/nut/nut) but that's a
story for another day - I worked around that).

My question is about systemd service files...

The 2.8.0 service files are different from 2.7.4 - and while I have
read the 2.8.0 documentation I am not clear on which of the various
.service and .target files should be set to autostart.

Immediately after install systemd had nut like this:

[root@emp80 ~]# systemctl list-unit-files | grep -i nut
nut-driver-enumerator.path                 disabled
nut-driver-enumerator.service              disabled
nut-driver@.service                        disabled
nut-monitor.service                        disabled
nut-server.service                         disabled
nut-driver.target                          disabled
nut.target                                 disabled

In 2.8.0 I have a configured ups.conf. I have not created or edited
any .service or .target unit-files, all are as standard. Editing
ups.conf resulted in nut-driver@eaton5sx.service correctly, and
systemctl start nut-driver@eaton5sx.service runs fine, as does
'upsdrvctl start'.

Then starting nut-server.service and nut-monitor.service gets me to a
fully operational state. After a reboot, nothing was auto-started, but
manually starting everything (driver, server, monitor) worked - so PID
files/locations are OK.

I'm now trying to work out what to "enable" for systemd autostart on
boot, and having mixed results.

I'm setup as follows at the moment, but am not sure if this is correct
for what should be enabled for autostart on reboot as sometimes the
driver does not start and has to be manually triggered into life.

[root@emp80 ~]# systemctl list-unit-files | grep -i nut
nut-driver-enumerator.path                 disabled
nut-driver-enumerator.service              disabled
nut-driver@.service                        disabled
nut-monitor.service                        disabled
nut-server.service                         disabled
nut-driver.target                          enabled
nut.target                                 enabled

What should be set to start with "systemctl enable ...."? Can someone
with a fully working systemd 2.8.0 setup please tell me what they have?

Thanks
Simon






--
Simon Wilson
M: 0400 12 11 16


_______________________________________________
Nut-upsuser mailing list
Nut-upsuser@alioth-lists.debian.net
https://alioth-lists.debian.net/cgi-bin/mailman/listinfo/nut-upsuser



----- End message from Jim Klimov <jimklimov+...@gmail.com> -----


----- End message from Simon Wilson via Nut-upsuser <nut-upsuser@alioth-lists.debian.net> -----



--
Simon Wilson
M: 0400 12 11 16


_______________________________________________
Nut-upsuser mailing list
Nut-upsuser@alioth-lists.debian.net
https://alioth-lists.debian.net/cgi-bin/mailman/listinfo/nut-upsuser

Reply via email to