I was wondering if anyone already had a script to check rpm packages versions x.x.x or greater.
so I could do a:
# CheckRpmVersion Somepackage-1.2.3
And would output: whether the package is installed or not and if it was equal to or greater than the version 1.2.3.
I know I can pull out the Major.Minor.Sub and compare each one. But there has to be something simpler.
---------- Post updated at 09:52 AM ---------- Previous update was at 08:33 AM ----------
Here is what I came up with.
#!/bin/sh
#
#
REQ=$1
PKG=$(echo $REQ | awk -F- ' { print $1 } ')
echo $PKG
REQVer=$(echo $REQ | awk -F- ' { print $2 } ')
REQMajor=$(echo $REQVer | awk -F. ' { print $1 } ')
REQMinor=$(echo $REQVer | awk -F. ' { print $2 } ')
REQSub=$(echo $REQVer | awk -F. ' { print $3 } ')
echo "Requires:$REQMajor.$REQMinor.$REQSub"
PKGVer=$(/bin/rpm -q $PKG)
PKGMajor=$(echo $PKGVer | awk -F. ' { print $1 }' | awk -F- ' { print $2 } ')
PKGMinor=$(echo $PKGVer | awk -F. ' { print $2 }')
PKGSub=$(echo $PKGVer | awk -F. ' { print $3 }' | awk -F- ' { print $1 } ')
echo "Actual:$PKGMajor.$PKGMinor.$PKGSub"
if [[ $PKGMajor > $REQMajor ]];then
echo "Good"
elif [[ $PKGMajor = $REQMajor && $PKGMinor > $REQMinor ]];then
echo "Good"
elif [[ $PKGMajor = $REQMajor && $PKGMinor = $EREQMinor && $PKGSub > $REQSub ]];then
echo "Good"
else
echo "Bad"
fi
# ./RPMCheck.sh binutils-2.16.92.0.2
binutils
Requires:2.16.92
Actual:2.17.50
Good
---------- Post updated at 10:03 AM ---------- Previous update was at 09:52 AM ----------
One problem I found.
The example works but if I use compat-libstdc++-33-3.2.3 it tries to split at first -
---------- Post updated at 11:49 AM ---------- Previous update was at 10:03 AM ----------
Replaced:
REQVer=$(echo $REQ | awk -F- ' { print $2 } ')
With:
REQVer=$(echo $REQ | sed -e 's/\([A-Za-z0-9.-+]*\)-\([0-9]*\.\)/\2/')
So far it works good.
---------- Post updated at 12:34 PM ---------- Previous update was at 11:49 AM ----------
Found some other errors.
Here is the finished code. Please feel free to tear it apart and suggest better ways, PLEASE.
#!/bin/sh
#
#
REQ=$1
PKG=$(echo $REQ |sed -e 's/\([A-Za-z0-9.-+].*\)-[0-9]\..*/\1/')
REQVer=$(echo $REQ | sed -e 's/\([A-Za-z0-9.-+].*\)-\([0-9]*\.\)/\2/')
REQMajor=$(echo $REQVer | awk -F. ' { print $1 } ')
REQMinor=$(echo $REQVer | awk -F. ' { print $2 } ')
REQSub=$(echo $REQVer | awk -F. ' { print $3 } ')
PKGVer=$(/bin/rpm -q "$PKG" | sed 's/\.el[0-9]//')
PKGVer=$(echo $PKGVer | sed -e 's/\([A-Za-z0-9.-+].*\)-\([0-9]*\.\)/\2/')
PKGMajor=$(echo $PKGVer | awk -F. ' { print $1 }')
PKGMinor=$(echo $PKGVer | awk -F. ' { print $2 }')
PKGSub=$(echo $PKGVer | awk -F. ' { print $3 }' | awk -F- ' { print $1 } ')
if [[ $PKGMajor > $REQMajor ]];then
echo "Good"
elif [[ $PKGMajor = $REQMajor && $PKGMinor > $REQMinor ]];then
echo "Good"
elif [[ $PKGMajor = $REQMajor && $PKGMinor = $REQMinor && $PKGSub > $REQSub ]];then
echo "Good"
elif [[ $PKGMajor = $REQMajor && $PKGMinor = $REQMinor && $PKGSub = $REQSub ]];then
echo "Good"
else
echo "Bad"
fi