This is an old revision of the document!
Using no argument, verbose only, with -f for fix (apply)
[root@nimsrv]/root/scripts# cat upgrade_rpm.sh
#!/usr/bin/ksh # set -x ################################################## #@(#) Install and upgrade RPM packages ################################################## # v1.1 02-06-2016 add verbose default ################################################## dir=`dirname $0` if [ -f $dir/.env ] then . $dir/.env else path_script=$dir export sn=`basename $0 | cut -d. -f1` export logpath=/tmp export logname=$logpath/$sn.log fi rpminstalled=$logpath/rpm_installed.txt rpmtoinstall=$logpath/rpm_to_install.txt aixlevel=$(oslevel -s) # 7100-03-05-1524 aixmain=$(echo $aixlevel | cut -c1-2) # 71 tl=$(echo $aixlevel | cut -d'-' -f2 | sed 's/^0//') aixleveltl=$(echo ${aixmain}${tl} | sed 's/\(.\)/\1\./g') localmpt=/mnt nimserver=nimsrv # Server containing RPM and export NFS nimrpm=/export/softs # location on NFS mount point Ex: /export/softs/rpm/aix71 mount -o soft $nimserver:$nimrpm $localmpt #------------------------------------------------ usage() { echo "Usage: (" "|-f)" echo "\tInstall BASE RPM package, and check if upgrades are needed" echo "\t-f: fix apply RPM (default no)" } #------------------------------------------------ install_gettext () { # Uninstall wrong package gettext, bad version if [ $(grep '^gettext-0.17' $rpminstalled > /dev/null; echo $?) -eq 0 ] then if [ $(grep '^gettext-0.10' $rpminstalled > /dev/null; echo $?) -ne 0 ] then echo "********** Reinstall bad package: gettext-0.17" cd $rpmpath pkg=$(ls -rt gettext-[0-9]* | tail -1) if [ $fix = "yes" ] then rpm --force -ihv $pkg fi cd fi fi } #------------------------------------------------ uninstall_gettext () { # Uninstall wrong package gettext, bad version rpm -qa | sort -u > $rpminstalled if [ $(grep '^gettext-0.17' $rpminstalled > /dev/null; echo $?) -eq 0 ] then echo "********** Remove : gettext-0.17" rpm -e $(grep '^gettext-0.17' $rpminstalled) if [ $? -eq 0 ] then cd $rpmpath pkg=$(ls -rt gettext-[0-9]* | tail -1) if [ $fix = "yes" ] then rpm --force -ihv $pkg fi cd else echo "Unable to uninstall gettext-0.17 package, please do it manually" fi fi } #------------------------------------------------ upgrade_installed_rpm () { # Upgrade all installed packages cd $rpmpath count=0 echo "********** Upgrade all installed packages" while [[ "$count" -lt 3 ]] do cat /dev/null > $rpmtoinstall for i in $(cat $rpminstalled | grep -v '^AIX-rpm' | egrep -v 'gettext|cdrecord|mkisofs') do rpmbase=$(echo $i | rev | cut -d'-' -f3- | rev) ls -1 ${rpmbase}-[0-9]* | grep -v src > /dev/null 2>&1 if [ $? -eq 0 ] then pkg=$(ls -rt ${rpmbase}-[0-9]* | grep -v src | tail -1) if [ $(echo $pkg | grep $i > /dev/null;echo $? ) -ne 0 ] then if [ $(echo $pkg | grep $i > /dev/null;echo $?) -ne 0 ] then echo "rpm -Uhv $pkg" >> $rpmtoinstall echo "rpm -Uhv $pkg" fi fi fi done if [ $(cat $rpmtoinstall | wc -l | awk '{print $1}') = "0" ] then echo "Upgrade FINISH" break fi chmod a+x $rpmtoinstall if [ $fix = "yes" ] then $rpmtoinstall else break fi rpm -qa | sort -u | sed 's/\.ppc//g' | sed 's/\.noarch//g' > $rpminstalled let count="($count +1)" echo "count $count" done cd } #------------------------------------------------ upgrade_rpmdb () { # Check RPM database version: package AIX-rpm should be the same as AIX version if [ $(grep "^AIX-rpm-${aixleveltl}*" $rpminstalled > /dev/null;echo $?) -ne 0 ] then echo "********** Upgrading RPM database ... be patient ... can take 2 minutes ..." /usr/sbin/updtvpkg fi } #------------------------------------------------ install_base_rpm () { # Upgrade all installed packages cd $rpmpath count=0 echo "********** Install base packages" while [[ "$count" -lt 3 ]] do rpm -qa | sort -u > $rpminstalled cat /dev/null > $rpmtoinstall for rpmbase in bash libiconv libgcc libstdc++ gettext bzip2 unzip zip tree pstree info gmp coreutils logrotate less sed popt tar zlib openssl openldap sudo rsync do ls -1 ${rpmbase}-[0-9]* | grep -v src > /dev/null 2>&1 if [ $? -eq 0 ] then pkg=$(ls -rt ${rpmbase}-[0-9]* | grep -v src | tail -1) pkgi=$(grep "^${rpmbase}-[0-9]" $rpminstalled) if [ $(echo $pkg | grep $pkgi > /dev/null;echo $? ) -ne 0 ] then echo "rpm -Uhv $pkg" >> $rpmtoinstall echo "rpm -Uhv $pkg" fi fi done if [ $(cat $rpmtoinstall | wc -l | awk '{print $1}') = "0" ] then echo "Install FINISH" break fi chmod a+x $rpmtoinstall if [ $fix = "yes" ] then $rpmtoinstall else break fi echo "count $count" let count="($count +1)" done cd } #------------------------------------------------ check_specific () { # Check for new AIX version packages cd $rpmpath echo "********** Checking specific RPM package depending on AIX version" cat /dev/null > $logpath/to_reinstall.txt cat /dev/null > $logpath/pkg_to_reinstall.txt aix_level=$(oslevel | cut -c1-3) aix_level1=$(oslevel) for i in $(ls *aix${aix_level}* | cut -d'-' -f1 | sort -u) do rpm -qa | grep "^$i" >> $logpath/to_reinstall.txt done for pkg in $(cat $logpath/to_reinstall.txt) do if [ $(rpm -ql $pkg | grep "aix${aix_level1}" > /dev/null 2>&1; echo $?) -ne 0 ] then echo $pkg >> $logpath/pkg_to_reinstall.txt #if [ $(echo $pkg | grep lsof > /dev/null 2>&1; echo $?) -ne 0 ] #then # echo $pkg >> $logpath/pkg_to_reinstall.txt #else # if [ $(/usr/linux/sbin/lsof -v | grep "aix${aixmain}" > /dev/null 2>&1; echo $?) -ne 0 ] # then # echo $pkg >> $logpath/pkg_to_reinstall.txt # fi #fi fi done if [ -s $logpath/pkg_to_reinstall.txt ] then echo "**** Package on bad version please reinstall" if [ $fix = "yes" ] then cd $rpmpath for pkg in $(grep libstdc $logpath/pkg_to_reinstall.txt; grep -v "libstdc" $logpath/pkg_to_reinstall.txt) do pkg1=$(ls -rt ${pkg}.* | grep -v src | tail -1) rpm --force -ihv $pkg1 done else echo "**** Using command: rpm --force -ihv <xxxaix${aix_level}xxx>" cat $logpath/pkg_to_reinstall.txt fi else echo "OK compliant" fi } ############################################# # main ############################################# cd $path_script # Read and check scripts arguments debug=yes fix=no while [ $# -gt 0 ] do case "$1" in -f) fix=yes ;; -h|help) usage exit 1;; esac shift done rpmpath=$localmpt/rpm/aix${aixmain} rpm -qa | sort -u | sed 's/\.ppc//g' | sed 's/\.noarch//g' > $rpminstalled install_gettext upgrade_rpmdb check_specific upgrade_installed_rpm 2> /dev/null install_base_rpm 2> /dev/null uninstall_gettext umount $localmpt echo "Finish"