Description of problem: I'm working on using rpm file triggers in systemd. It is likely that I misunderstood something, but based on the documentation the trigger should be called just once. I added the following to systemd.spec: %transfiletriggerun -- /usr/lib/systemd/system /etc/systemd/system logger requesting reload "$*" xargs logger systemctl daemon-reload &>/dev/null || : logger reload done After I reinstall a package (e.g. dnf reinstall iputils) that has a systemd unit, the trigger is called twice: Nov 14 18:45:29 fedora-rawhide zbyszek[14446]: requesting reload 0 0 Nov 14 18:45:29 fedora-rawhide zbyszek[14448]: /usr/lib/systemd/system/rdisc.service Nov 14 18:45:29 fedora-rawhide systemd[1]: Reloading. Nov 14 18:45:29 fedora-rawhide zbyszek[14461]: reload done Nov 14 18:45:30 fedora-rawhide zbyszek[14463]: requesting reload 0 0 Nov 14 18:45:30 fedora-rawhide zbyszek[14465]: /usr/lib/systemd/system/rdisc.service Nov 14 18:45:30 fedora-rawhide systemd[1]: Reloading. Nov 14 18:45:30 fedora-rawhide zbyszek[14478]: reload done Version-Release number of selected component (if applicable): rpm-4.13.0-0.rc1.12.fc24.x86_64 How reproducible: 100% Actual results: transfiletriggerun script is called twice in the same transaction Expected results: transfiletriggerun script is called once per transaction.
I wasn't able to reproduce this. Are you sure you don't have also defined %transfiletriggerin in spec? Isn't the second log record from %transfiletriggerin instead of %transfiletriggerun? BTW: Are you sure you really want %transfiletriggerun and not %transfiletriggerpostun?
I created a test package which calls /bin/logger in all scripts, to be able to debug what scripts are called: http://in.waw.pl/git/transfiletriggers/. It confirms that %transfiletriggerun is called twice. Also %transfiletriggerpostun is never called. Unless there's some typo that I don't see, it looks like another bug. Initial installation of file with triggers: dnf install -y x86_64/transfiletriggers-0-1.fc24.x86_64.rpm transfiletriggers pretrans 1 transfiletriggers pre 1 transfiletriggers filetriggerin 0 0: /usr/share/doc/transfiletriggers /usr/share/doc/transfiletriggers/README transfiletriggers filetriggerin 0 0: /usr/share/doc/setup /usr/share/doc/setup/COPYING /usr/share/doc/setup/uidgid /usr/share/doc/setup /usr/share/doc/setup/COPYING /usr/share/doc/setup/uidgid /usr/share/doc/expat /usr/share/doc/expat/README /usr/share/doc/expat /usr/share/doc/expat/README transfiletriggers post 1 transfiletriggers posttrans 1 transfiletriggers transfiletriggerin 0 0: /usr/share/doc/setup /usr/share/doc/setup/COPYING /usr/share/doc/setup/uidgid /usr/share/doc/setup /usr/share/doc/setup/COPYING /usr/share/doc/setup/uidgid /usr/share/doc/expat /usr/share/doc/expat/README /usr/share/doc/expat /usr/share/doc/expat/README Installation of package with triggering files: dnf install -y x86_64/transfiletriggers-a-0-1.fc24.x86_64.rpm transfiletriggers-a pretrans 1 transfiletriggers-a pre 1 transfiletriggers filetriggerin 0 0: /usr/share/doc/transfiletriggers-a /usr/share/doc/transfiletriggers-a/README transfiletriggers-a post 1 transfiletriggers-a posttrans 1 transfiletriggers transfiletriggerin 0 0: /usr/share/doc/transfiletriggers-a /usr/share/doc/transfiletriggers-a/README /usr/share/doc/transfiletriggers-a /usr/share/doc/transfiletriggers-a/README Reinstallation: dnf reinstall -y x86_64/transfiletriggers-a-0-1.fc24.x86_64.rpm transfiletriggers transfiletriggerun 0 0: /usr/share/doc/transfiletriggers-a /usr/share/doc/transfiletriggers-a/README /usr/share/doc/transfiletriggers-a /usr/share/doc/transfiletriggers-a/README transfiletriggers transfiletriggerun 0 0: /usr/share/doc/transfiletriggers-a /usr/share/doc/transfiletriggers-a/README /usr/share/doc/transfiletriggers-a /usr/share/doc/transfiletriggers-a/README transfiletriggers-a pretrans 2 transfiletriggers-a pre 2 transfiletriggers filetriggerin 0 0: /usr/share/doc/transfiletriggers-a /usr/share/doc/transfiletriggers-a/README transfiletriggers-a post 2 transfiletriggers filetriggerun 0 0: /usr/share/doc/transfiletriggers-a /usr/share/doc/transfiletriggers-a/README transfiletriggers-a preun 1 transfiletriggers filetriggerpostun 0 0: /usr/share/doc/transfiletriggers-a /usr/share/doc/transfiletriggers-a/README transfiletriggers-a postun 1 transfiletriggers-a posttrans 1 transfiletriggers transfiletriggerin 0 0: /usr/share/doc/transfiletriggers-a /usr/share/doc/transfiletriggers-a/README /usr/share/doc/transfiletriggers-a /usr/share/doc/transfiletriggers-a/README Removal: dnf remove -y transfiletriggers-a transfiletriggers transfiletriggerun 0 0: /usr/share/doc/transfiletriggers-a /usr/share/doc/transfiletriggers-a/README /usr/share/doc/transfiletriggers-a /usr/share/doc/transfiletriggers-a/README transfiletriggers transfiletriggerun 0 0: /usr/share/doc/transfiletriggers-a /usr/share/doc/transfiletriggers-a/README /usr/share/doc/transfiletriggers-a /usr/share/doc/transfiletriggers-a/README transfiletriggers filetriggerun 0 0: /usr/share/doc/transfiletriggers-a /usr/share/doc/transfiletriggers-a/README transfiletriggers-a preun 0 transfiletriggers filetriggerpostun 0 0: /usr/share/doc/transfiletriggers-a /usr/share/doc/transfiletriggers-a/README transfiletriggers-a postun 0 > BTW: Are you sure you really want %transfiletriggerun and not %transfiletriggerpostun? I need to call 'systemctl daemon-reload' with the following constraints: 1. After files have been added/removed/upgraded. 2. Before restarting daemons which were upgraded. Ideally, we would run 'systemctl daemon-reload' just once, but if that's not possible, we can live with multiple calls as long as we get at least one call satisfying 1. and at least one call satisfying 2. Restarting daemons which were upgraded is currently done through %postun scriptlets in individual packages. This means that we would like 2. to be implemented as "before %postun scriptlets in packages". Looking at the debug logs above, this isn't currently possible (without saving state on disk or something like that). Any help would be appreciated.
Now, I see where the problem is. It is reproducible only when reinstall is performed by dnf, if "rpm --reinstall" is used then it works. Both calling %transfiletriggerun twice per transaction and not calling %transfiletriggerpostun at all should be fixed in rpm-4.13.0-0.rc1.13.fc24. Because the bug is fixed I am closing it. If you have still problem how to use file triggers with the fixed rpm version then contact me by email or send email to rpm-list.org.
Thanks for the quick fix. I can confirm that I don't see %transfiletriggerun called twice. Unfortunately %transfiletriggerpostun is still not called. I'll open a separate bug.