|
Server : Apache/2.2.17 (Unix) mod_ssl/2.2.17 OpenSSL/0.9.8e-fips-rhel5 DAV/2 PHP/5.2.17 System : Linux localhost 2.6.18-419.el5 #1 SMP Fri Feb 24 22:47:42 UTC 2017 x86_64 User : nobody ( 99) PHP Version : 5.2.17 Disable Function : NONE Directory : /proc/21572/root/usr/lib/rpm/ |
Upload File : |
#!/bin/sh
# Traditionally, and to some extent still, rpm --freshen upgraded
# packages that matched by RPMTAG_NAME, not RPMTAG_PROVIDENAME.
#
# This freshen.sh script illustrates how to revert to the "traditional"
# behavior for doing, say,
# rpm -Fvh kernel-bigmem*.rpm
# so that only kernel-bigmem packages are upgraded, rather than
# upgrading (i.e. erasing) every kernel package that contains
# Provides: kernel = V-R
#
# Copy the freshen.sh script to /usr/lib/rpm, and add the following
# lines to /etc/popt to enable the behavior:
# rpm alias -F --freshen
# rpm exec --freshen /usr/lib/rpm/freshen.sh
#
dbg= #echo # Do "dbg=echo" for debugging
#set -x
#echo "args: $*"
# Invoke rpmi from the same directory as freshen.sh.
rpmi="`dirname $0`/rpmi"
rpme="`dirname $0`/rpme"
rpmq="`dirname $0`/rpmq"
# Parse out any options and add to new arglist.
# Note: this fails for options with arguments,
# and doesn't detect multiple -i/-e/-U/-F options either.
opts=""
while [ $# -gt 0 ]; do
case $1 in
-*) opt="$1"
opts="$opts $opt" && shift
[ "$opt" = "--" ] && break
;;
*) opts="$opts --" && break
;;
esac
done
#echo "opts: $opts"
# $opts has the options with final '--', $* has the package files
# If no remaining options, just invoke rpm (which will fail).
[ $# = 0 ] && $dbg exec $rpmi -F $opts
# Split remaining args into erase/install/upgrade invocations
iargs=
eargs=
Fargs=
for fn in $*; do
# If not a file, just pass to freshen.
[ ! -f $fn ] && Fargs="$Fargs $fn" && continue
# For all occurences of identically named packages installed ...
N="`$rpmq -qp --qf '%{NAME}' $fn`"
NVR="`$rpmq -qa $N`"
# ... special case kernel packages, ignore packages not installed.
case $N in
kernel*)
# ... if none installed, skip thi kernel package.
[ "$NVR" = "" ] && continue
# ... else install new package before erasing old package(s).
iargs="$iargs $fn"
eargs="$eargs $NVR"
;;
*) Fargs="$Fargs $fn";;
esac
done
set -e # Exit on any error from here on out.
# Install before erase to insure deps are provided.
[ "$iargs" != "" ] && $dbg $rpmi -i $opts $iargs
[ "$eargs" != "" ] && $dbg $rpme -e $opts $eargs
# Other, non-kernel, files passed to --freshen as always.
[ "$Fargs" != "" ] && $dbg $rpmi -F $opts $Fargs