[Fedora-packaging] rpm pre/post script order
Toshio Kuratomi
a.badger at gmail.com
Thu May 2 17:17:17 UTC 2013
On Thu, May 02, 2013 at 05:22:20PM +0200, Farkas Levente wrote:
> hi,
> after we carefully examine this wiki:
> https://fedoraproject.org/wiki/Packaging:ScriptletSnippets?rd=Packaging/ScriptletSnippets#Scriptlet_Ordering
> still don't understand how rpm works (or the wiki is wrong).
> suppose we've got a package pkg with this in the spec:
>
> %pre
> . /usr/share/pkg/foo
> pkg_pre
>
> %post
> . /usr/share/pkg/foo
> pkg_post
>
> where pkg_pre and pkg_post are shell functions in the /usr/share/pkg/foo
> shell script file. pkg-1.0 has this function:
> pkg_pre { echo "pre-1.0"; }
> pkg_post { echo "post-1.0"; }
> while pkg-2.0:
> pkg_pre { echo "pre-2.0"; }
> pkg_post { echo "post-2.0"; }
>
note: I had to modify your function definitions to look like this:
function pkg_pre() { echo "pre-2.0"; }
function pkg_post() { echo "post-2.0"; }
> questions 1:
> if i install pkg-1.0 will it echo pre-1.0? if yes how can it be possible
> since the file /usr/share/pkg/foo only installed in step 3 which is
> after step 2 (%pre of new package)?
>
Assuming that there's no version of pkg installed already and no other
package providing the file it will error out because there's no
/usr/share/pkg/foo at that time.
> questions 2:
> when i upgrade from 1.0 to 2.0 according to the above wiki step 2. it
> should have to echo pre-2.0 or pre-1.0? since the already installed
> /usr/share/pkg/foo is 1.0? but (after we test it) we got pre-2.0. why?
>
It will echo pre-1.0.
$ sudo rpm -ivh pkg-1.0-1.fc17.x86_64.rpm
Preparing... ########################################### [100%]
/var/tmp/rpm-tmp.j2A9KT: line 1: /usr/share/pkg/foo: No such file or directory
error: %pre(pkg-1.0-1.fc17.x86_64) scriptlet failed, exit status 1
error: pkg-1.0-1.fc17.x86_64: install failed
$ sudo rpm -ivh pkg-1.0-1.fc17.x86_64.rpm --noscripts
Preparing... ########################################### [100%]
1:pkg ########################################### [100%]
$ sudo rpm -Uvh pkg-2.0-1.fc17.x86_64.rpm
Preparing... ########################################### [100%]
pre-1.0
1:pkg ########################################### [100%]
post-2.0
I'm not sure why your testing is showing something different.
> so what is the truth here and how can i run any kind of script or file
> installed by 1.0 during the update process to 2.0? the only way seems to
> %pre of the new package since step 3 install the new file (ie. overwrite
> all old file), so all rpm scripts of the old packages runs after the new
> files have been already installed.
>
Depends on what you want to do. For instance, other alternatives are:
* Include the whole script in the scriptlet of the old package. This is
probably best for short scripts:
%pre
echo "pre-%{version}"
%post
echo "post-%{version}"
* Version the filename of the scripts on the filesystem:
%install
mkdir -p %{buildroot}/%{_datadir}/pkg
cp -pr %{SOURCE0} %{buildroot}%{_datadir}/pkg/foo-%{version}
%pre
if [ $1 -gt 2 ] ; then
. %{_datadir}/pkg/foo-%{version}
pkg_pre
fi
%post
. %{_datadir}/pkg/foo-%{version}
pkg_post
This works if you only need the %pre script to run on upgrade, not on initial
install (and similar concerns for *any* usage within %postun ;-).
-Toshio
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: not available
URL: <http://lists.fedoraproject.org/pipermail/packaging/attachments/20130502/78a9f895/attachment.sig>
More information about the packaging
mailing list