[libvirt] [PATCH] rpm: fix incorrect expansion of %systemd_preun macro

Laine Stump laine at laine.org
Tue Mar 20 17:57:16 UTC 2018


On 03/20/2018 01:00 PM, Daniel P. Berrangé wrote:
> Macros in RPMs are expanded before line continuations, so when we write
>
>    %systemd_preun foo \
>                   bar
>
> What happens is that it expands to
>
>    if [ $1 -eq 0 ] ; then
>         # Package removal, not upgrade
>         systemctl --no-reload disable --now foo \ > /dev/null 2>&1 || :
>    fi
>                  bar
>
> which is obviously complete garbage and not what we expected. It is
> simply not safe to ever use line continuations in combination with
> macros.

I forgot to ask this in the previous message - would it be reasonable to
have a syntax-check rule that forbid any line in libvirt.spec.in that
started with "<whitespace>%" and ended with \ ? (Personally I had no
idea of this rule, and I'm sure most others didn't either).

>
> Signed-off-by: Daniel P. Berrangé <berrange at redhat.com>
> ---
>  libvirt.spec.in | 12 ++++++------
>  1 file changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/libvirt.spec.in b/libvirt.spec.in
> index bc8257f34b..6bf8368476 100644
> --- a/libvirt.spec.in
> +++ b/libvirt.spec.in
> @@ -1512,9 +1512,9 @@ exit 0
>  
>  %if %{with_systemd}
>      %if %{with_systemd_macros}
> -        %systemd_post virtlockd.socket virtlockd-admin.socket \
> -            virtlogd.socket virtlogd-admin.socket \
> -            libvirtd.service
> +        %systemd_post virtlockd.socket virtlockd-admin.socket
> +        %systemd_post virtlogd.socket virtlogd-admin.socket
> +        %systemd_post libvirtd.service
>      %else
>  if [ $1 -eq 1 ] ; then
>      # Initial installation
> @@ -1549,9 +1549,9 @@ touch %{_localstatedir}/lib/rpm-state/libvirt/restart || :
>  %preun daemon
>  %if %{with_systemd}
>      %if %{with_systemd_macros}
> -        %systemd_preun libvirtd.service \
> -            virtlogd.socket virtlogd-admin.socket virtlogd.service \
> -            virtlockd.socket virtlockd-admin.socket virtlockd.service
> +        %systemd_preun libvirtd.service
> +        %systemd_preun virtlogd.socket virtlogd-admin.socket virtlogd.service
> +        %systemd_preun virtlockd.socket virtlockd-admin.socket virtlockd.service
>      %else
>  if [ $1 -eq 0 ] ; then
>      # Package removal, not upgrade





More information about the libvir-list mailing list