On Tue, Mar 22, 2022, 00:12 Sam Varshavchik <mr...@courier-mta.com> wrote:

> Ewoud Kohl van Wijngaarden writes:
>
> > On Mon, Mar 21, 2022 at 08:27:35AM -0400, Sam Varshavchik wrote:
> >> Ewoud Kohl van Wijngaarden writes:
> >>
> >>> On Fri, Mar 18, 2022 at 06:22:08PM -0400, Sam Varshavchik wrote:
> >>>> The only thing that https://docs.fedoraproject.org/en-US/packaging-
> >>>> guidelines/Scriptlets/ tells me to do is to put
> %systemd_postun_with_restart
> >>>> in my %post. However:
> >>>>
> >>>> 1) systemd complains that it wants a daemon-reload, in order to pick
> up an
> >>>> updated .service file
> >>>>
> >>>> 2) I still must manually run systemctl reload-or-restart --marked, in
> order
> >>>> to actually restart an updated service
> >>>>
> >>>> It seems to be there's a missing step, in here. By comparison I
> prepared
> >>>> comparable .deb packages for Ubuntu, using dh_installsystemd in the
> install
> >>>> script. The end result:
> >>>>
> >>>> A) The initial .deb install enabled and started the service.
> >>>>
> >>>> B) Bumping the release, rebuilding, and installing the newer package
> results
> >>>> in an automatic daemon-reload and restart, restarting the service.
> >>>>
> >>>> Overall .deb's systemd integration seems to go smoother (compared to
> the
> >>>> rest of the .deb packaging process) than rpm's.
> >>>>
> >>>> Is there a specific reason why %systemd_postun_with_restart stops
> before
> >>>> finishing the job? Am I missing something that I can install, to have
> this
> >>>> happen auto-magically?
> >>>
> >>> I think daemon-reload changed to file triggers in systemd 228:
> >>>
> >>> https://github.com/systemd/systemd/commit/
> >>> 873e413323dfff4023604849c70944674ae5cd29
> >>>
> >>> However, the scriptlets documentation[1] states to use %systemd_post
> with
> >>> %post and %systemd_postun_with_restart with %postun. %Perhaps that
> you're
> >>> using %systemd_postun_with_restart in %post is the source of your
> problems?
> >>
> >> No, my invocation is in %postun. Furthermore, it wouldn't matter, since
> at
> >> %post time the new package and the new service unit should already be
> >> installed and restartable.
> >>
> >> And, as I wrote:
> >>
> >>>> 1) systemd complains that it wants a daemon-reload, in order to pick
> up an
> >>>> updated .service file
> >>
> >> If ot was "changed to file triggers", well, it's not working since
> nothing
> >> is getting triggered. Furthermore, %systemd_postun_with_restart runs:
> >>
> >> /usr/lib/systemd/systemd-update-helper mark-restart-system-units
> >>
> >> which does:
> >>
> >> systemctl set-property "$unit" Markers=+needs-restart &
> >>
> >> That's all it does. Then, as I wrote:
> >>
> >>>> 2) I still must manually run systemctl reload-or-restart --marked, in
> order
> >>>> to actually restart an updated service
> >>
> >> So, the shipped systemd scriptlets are still, very much, under an
> impression
> >> that explicit action needs to be taken to restart and/or reload
> >> updated .services. But, nothing gets reloaded. The .service files gets
> >> marked for a restart, but, from what I can tell, nothing ever gets
> restarted.
> >
> > Do you happen to have the spec file and/or the RPMs? How can we
> replicate
> > the findings?
>
> Take the following spec file, below, and just feed it to rpmbuild -ba.
>
> Then, rpm -ivh the binary rpm. Then:
>
> systemctl enable testsystemd
> systemctl start testsystemd
> systemctl status testsystemd
>
> You'll get something like this:
>
> [mrsam@jack tmp]$ systemctl status testsystemd
> ● testsystemd.service - testsystemd
>      Loaded: loaded (/usr/lib/systemd/system/testsystemd.service;
> enabled;
> vend>
>      Active: active (exited) since Mon 2022-03-21 19:02:37 EDT; 10s ago
>     Process: 88834 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
>    Main PID: 88834 (code=exited, status=0/SUCCESS)
>         CPU: 2ms
>
> Mar 21 19:02:37 jack systemd[1]: Starting testsystemd…
> Mar 21 19:02:37 jack systemd[1]: Finished testsystemd.
>
> Up to now, everything looks good.
>
> Now, take this spec file, bump the release, feed it to rpmbuild again.
>
> According to my best understanding of systemd's published documentation:
> installing an updated package should automatically restart the active
> service, shouldn't it?
>
> But after I fed the new version to rpm -UvhF, what I got was:
>
> [mrsam@jack tmp]$ systemctl status testsystemd | cat
> Warning: The unit file, source configuration file or drop-ins of
> testsystemd.service changed on disk. Run 'systemctl daemon-reload' to
> reload
> units.
> ● testsystemd.service - testsystemd
>      Loaded: loaded (/usr/lib/systemd/system/testsystemd.service;
> enabled;
> vendor preset: disabled)
>      Active: active (exited) since Mon 2022-03-21 19:02:37 EDT; 4min 35s
> ago
>     Process: 88834 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
>    Main PID: 88834 (code=exited, status=0/SUCCESS)
>       Tasks: 0 (limit: 76902)
>      Memory: 0B
>         CPU: 0
>      CGroup: /system.slice/testsystemd.service
>
> Mar 21 19:02:37 jack systemd[1]: Starting testsystemd…
> Mar 21 19:02:37 jack systemd[1]: Finished testsystemd.
>
> A loud complaint at the beginning that systemd wasn't reload. Same,
> unchanged, syslog timestamp from the initial start.
>
> This is on up to date F35.
>
> Then, at this point:
>
> sudo systemctl daemon-reload
> sudo systemctl reload-or-restart --marked
>
> [mrsam@jack tmp]$ systemctl status testsystemd
> ● testsystemd.service - testsystemd
>      Loaded: loaded (/usr/lib/systemd/system/testsystemd.service;
> enabled;
> vend>
>      Active: active (exited) since Mon 2022-03-21 19:08:29 EDT; 26s ago
>     Process: 89032 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
>    Main PID: 89032 (code=exited, status=0/SUCCESS)
>         CPU: 1ms
>
> Mar 21 19:08:29 jack systemd[1]: Starting testsystemd…
> Mar 21 19:08:29 jack systemd[1]: Finished testsystemd.
>
> Now, everything is normal, and new syslogs showing a restart.
>
> So, as far as I can tell: %systemd_postun_with_restart did not restart
> anything.
>
>
>
>
>
> Name:           testsystemd
> Version:        1
> Release:        3%{?dist}
> Summary:        Test
> License:        GPL
>
> %description
>
>
> %prep
>
>
> %build
>
>
> %install
> mkdir -p $RPM_BUILD_ROOT/lib/systemd/system
> cat >$RPM_BUILD_ROOT/lib/systemd/system/testsystemd.service <<EOF
> [Unit]
> Description=testsystemd
>
> [Install]
> WantedBy=multi-user.target
>
> [Service]
> Type=oneshot
> RemainAfterExit=true
> ExecStart=/bin/true
> ExecStop=/bin/true
> EOF
>
> %post
> %systemd_post testsystemd.service
>
> %preun
> %systemd_preun testsystemd.service
>
> %postun
> %systemd_postun_with_restart testsystemd.service
>
> %files
> /lib/systemd/system/*
>

I wonder if this behaves the way it does because you're using a oneshot
service as an example here? It exits as soon as it starts, so there is not
even a running process to "restart" on package upgrade.

Fabio


> _______________________________________________
> devel mailing list -- devel@lists.fedoraproject.org
> To unsubscribe send an email to devel-le...@lists.fedoraproject.org
> Fedora Code of Conduct:
> https://docs.fedoraproject.org/en-US/project/code-of-conduct/
> List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
> List Archives:
> https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org
> Do not reply to spam on the list, report it:
> https://pagure.io/fedora-infrastructure
>
_______________________________________________
devel mailing list -- devel@lists.fedoraproject.org
To unsubscribe send an email to devel-le...@lists.fedoraproject.org
Fedora Code of Conduct: 
https://docs.fedoraproject.org/en-US/project/code-of-conduct/
List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
List Archives: 
https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org
Do not reply to spam on the list, report it: 
https://pagure.io/fedora-infrastructure

Reply via email to