Kaleb S KEITHLEY 5cb80ac63b packaging: rpm scriptlet cleanup, handle -p /sbin/ldconfig
The RPM documention indicates that during an rpm install or erase, the
script(lets): %post, %preun, and %postun (and %pre, %build, %install,
etc.) are copied to a temp file, and then the temp file is run as a
(/bin/sh or bash) script.

Unfortunately the documentation is not clear about how rpmbuild and/or
rpm determine where the end of any scriptlet is when it is copied to
the file.

Most things in the glusterfs.spec work correctly as is. These are the
%preun, %post, and %postun scriptlets that are "closed" by a following
%preun, %post, and %postun, or poetentially another scriptlet, e.g.
%file.

The ones that don't work correctly (only one actually) are those where
there is a comment in the spec file before it is closed by another
scriptlet. Further complicating things is that the type of scriptlet
affects what rpm does and what `rpm -qp --scripts ...` shows.

The specific one that didn't work was the "%postun libs" scriptlet. It
is followed by a comment before being "closed" by the %files section (or
scriptlet). It can be written two ways: "%postun libs\n/sbin/ldconfig"
or "%postun libs -p /sbin/ldconfig" Either way it's written, `rpm -qp
--scripts glusterfs-libs...` will include the comment lines between the
%postun libs line and the following %files line.

But the way rpm executes these depends on how they're written. If
written as "%postun libs\n/sbin/ldconfig" rpm will simply run
/sbin/ldconfig with no command line options, i.e.
  execve ("/sbin/ldconfig", [ "/sbin/ldconfig" ], [ ]);

But when written as "%postun libs -p /sbin/ldconfig", it will copy
the comment lines to a temp file, and pass the temp file name and "1"
 as (command line) parameters, i.e.
  execve ("/sbin/ldconfig", [ "/sbin/ldconfig", "/tmp/tmpXXXXXX", "1" ],
          [ ]);

Which results in ldconfig exiting with an error. (Remember, both ways show
the comment in `rpm -qp --scripts ...`)

(Note though, that the similar "%postun api -p /sbin/ldconfig" is run
correctly, because it is "closed" by the following "%postun server"
scriptlet.)

Finally, through trial and error, it appears that rpm can be tricked with
a hack, and "closure" of the scriptlet forcedlike this:

 %postun libs -p /sbin/ldconfig

 %if ( 0%{?_undocumented_hack_closes_scriptlets} )
 %postun
 %endif

in which case ldconfig appears to run correctly. Note also that here too
the comment will be included in the output of `rpm -qp --scripts ...`
But that's very ugly hack.

Change-Id: I587a490ddcdf47d01605479bc8ef8b0e439108fb
BUG: 1315024
Signed-off-by: Kaleb S KEITHLEY <kkeithle@redhat.com>
Reviewed-on: http://review.gluster.org/13613
Smoke: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Niels de Vos <ndevos@redhat.com>
NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
CentOS-regression: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Raghavendra Talur <rtalur@redhat.com>
2016-03-08 19:32:10 -08:00
2016-03-01 18:34:01 -08:00
2016-02-11 09:05:46 -08:00
2014-04-16 06:38:06 -07:00
2010-03-12 04:09:34 -08:00
2011-07-18 17:24:14 +05:30
2014-09-16 02:30:36 -07:00

For information about contributing to GlusterFS, please follow the below link : Contributing to GlusterFS community

GlusterFS does not follow the GitHub: Fork & pull workflow but use Gerrit for code review.

The development guidelines are detailed in Development Workflow.

The GlusterFS documentation can be found at Documentation

For more info, please visit http://www.gluster.org/.

Description
No description provided
Readme 86 MiB
Languages
C 86.6%
Shell 7.5%
Python 3.6%
Perl 0.7%
Makefile 0.4%
Other 0.9%