Initscript migration to systemd: triggerun called on downgrade

Petr Pisar ppisar at redhat.com
Fri Sep 2 09:09:56 UTC 2011


On 2011-09-02, Iain Arnell <iarnell at gmail.com> wrote:
> On Fri, Sep 2, 2011 at 9:53 AM, Petr Pisar <ppisar at redhat.com> wrote:
>> On 2011-09-01, Bill Nottingham <notting at redhat.com> wrote:
>>> Petr Pisar (ppisar at redhat.com) said:
>>>> I'm migrating quota_nld service (provided by quota_nld subpackage of
>>>> quota spec) to systemd.
>>>>
>>>> Offical howto <https://fedoraproject.org/wiki/Packaging:ScriptletSnippets#Packages_migrating_to_a_systemd_unit_file_from_a_SysV_initscript> recommends:
>>>>
>>>> %triggerun -- httpd < 1.0-2
>>>> # Save the current service runlevel info
>>>> [...]
>>>>
>>>> where `httpd < 1.0-2' are httpd packages older then 1.0-2 under
>>>> uninstallation and `1.0-2' is first httpd version with systemd support.
>>>>
>>>> I modifed quota accoding this how-to, build a package (everything
>>>> locally) and I play with upgrades/downgrades between current F17 version
>>>> and this new one.
>>>>
>>>> Everything works except the triggerun script is called even if doing
>>>> downgrade. Is it intentional and I do not understand triggers, or is it
>>>> a bug in RPM?
>>>
>>> The above triggerun would be called on any uninstallation of httpd less
>>> than 1.0-2, whether you're upgrading or downgrading.
>>>
>> And that's the point. If only httpd-1.0-2 is installed and you do
>> downgrade to httpd-1.0-1, then the triggerun will be executed which
>> is what I do not expect because no httpd less then 1.0-2 can be
>> uninstalled at the time.
>
> The trigger is run in two situations. When the source package (i.e.
> the package containing the triggerun, in this case, httpd-1.0-2) is
> already installed and the target (httpd < 1.0-2) removed, or when the
> target is already installed and the source removed. When downgrading,
> the source package "httpd-1.0-2" is being uninstalled while the target
> "httpd < 1.0-2" is already present on the system. You could use
> triggerpostun instead - that will run only after the target is
> removed, but not when the source package is removed. See "triggers"
> under /usr/share/doc/rpm-4.x.y.
>
I thought triggerun is executed only if a package matching target is
being uninstalled. I missed the notice in `An Unusual Case' section of
triggers documentation.  (In my opinion, the documentation is poorly
written.  There is no specification when triggerun and triggerin are
exectuted.  There is only bunch of examples which do not assure
completeness.)

Then why does migration how-to use triggerun instead of triggerpostun?
I cannot see reason why the code should be executed on downgrade.

(Also I thinkg the triggers should use `-n' option to bind to specific
subpackage to prevent execution when uninstalling independend
subpackage.)

-- Petr



More information about the devel mailing list