User Tools

Site Tools


aix:install_upgr_rpm

Install and Upgrade AIX packages

Using no argument, verbose only, with -f for fix (apply)

[root@nimsrv]/root/scripts# cat upgrade_aix.sh
#!/usr/bin/ksh93
# set -x
##################################################
#@(#) Upgrade AIX
##################################################
# v1.1 06-2023 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

aixleveltl=$(echo ${aixmain}${tl} | sed 's/\(.\)/\1\./g')
localmpt=/mnt
nimserver=aixna001       # Server containing RPM and export NFS
nimrpm=/export/aix7200-05/aix7200-05-07_lpp  # location on NFS mount point   Ex: /export/softs/rpm/aix71


#------------------------------------------------
usage()
{
echo "Usage: (" "|-f)"
echo "\tInstall BASE RPM package, and check if upgrades are needed"
echo "\t-f: fix apply RPM (default no)"
}

#------------------------------------------------
nfs_mount ()
{
echo "###### NFS mount"
oslevel -s
mount -o vers=4,soft $nimserver:$nimrpm $localmpt
}

#------------------------------------------------
altdisk ()
{
cfgmgr

altpv=$(lsmpio -q | grep '_ROOTVG_ALT' | awk '{print $1}')
if [[ "$altpv" == "" ]]
then
  echo "#### ERROR NO DISK FOUND for ALTERNATE"
  exit 1
fi

for vg in $(lsvg | grep rootvg | egrep 'alt_|old_')
do
  exportvg $vg
done

alt_disk_copy -d $altpv -B
}

#------------------------------------------------
remove_efix ()
{

# Remove only efix that won't be present at the end
cat $localmpt/efix/install_efix.sh | grep emgr | rev | cut -d'/' -f1 | rev | cut -d'.' -f1 | sort -u > $tempfile.1
emgr -P | grep installp | rev | awk '{print $1}' | rev | sort -u > $tempfile.2
sdiff -w 80 $tempfile.1 $tempfile.2 | grep '>' | awk '{print $1}' > $tempfile

for efix in $(cat $tempfile)
do
  echo "###### $efix"
  emgr -rL $efix
done
}

#------------------------------------------------
update_aix ()
{
echo "###### Update AIX"
install_all_updates -d $localmpt -rc -Y

echo 1 | $localmpt/license/idsLicense
installp -agXY -d $localmpt GSKit8.gskcrypt64 GSKit8.gskssl64
installp -agXY -d $localmpt idsldap.clt32bit64.rte idsldap.clt64bit64.rte idsldap.clt_max_crypto32bit64.rte idsldap.clt_max_crypto64bit64.rte idsldap.cltbase64.adt idsldap.cltbase64.rte idsldap.license64.rte


emgr -e $localmpt/openssh_fix15/38408m9b.230811.epkg.Z
}

#------------------------------------------------
check_free_space ()
{
echo "###### Check free space on /opt"
if [ $(df -mc | grep '/dev/hd10opt' | cut -d':' -f3 | sed 's/\./\ /' | awk '{print $1}') -lt "300" ]
then
  echo "extending /opt"
  chfs -a size=+300M /opt
else
  echo "Filesystem /opt OK"
fi
}

#------------------------------------------------
update_rpm ()
{
echo "###### Update RPM"
sudo=$(rpm -qa | grep sudo)
if [ $(echo $sudo | grep -q 'sudo_ids'; echo $?) -ne "0" ]
then
  yum -y remove $sudo
  yum -y install sudo_ids
fi

yum -y update
/usr/sbin/updtvpkg
}

#------------------------------------------------
restart_services ()
{
stopsrc -s nimsh ; startsrc -s nimsh
stopsrc -g rsct_rm ; stopsrc -g rsct ; startsrc -g rsct ; startsrc -g rsct_rm
stopsrc -s xntpd ; startsrc -s xntpd
stopsrc -s sendmail ; startsrc -s sendmail -a "-bd -q30m"; ps -ef | grep -v grep | grep sendmail
}

#------------------------------------------------
nfs_umount ()
{
echo "###### NFS umount"
oslevel -s
umount $localmpt
}

#############################################
# main
main ()
{
date '+%d-%m-%Y %H:%M'

if [[ $(oslevel | sed 's/\.//g') != "7200" ]]
then
  echo "BAD AIX level"
  exit 1
fi

if [ $(ls /usr/ios/cli/ioscli > /dev/null 2>&1; echo $?) -eq "0" ]
then
  echo "BAD AIX level VIOS !!!!"
  exit 1
fi



altdisk
if [ $? -ne "0" ]
then
  echo "EXIT"
  exit 1
fi
date '+%d-%m-%Y %H:%M'
nfs_mount
date '+%d-%m-%Y %H:%M'
update_aix
date '+%d-%m-%Y %H:%M'
check_free_space 
update_rpm
date '+%d-%m-%Y %H:%M'
nfs_umount
restart_services
date '+%d-%m-%Y %H:%M'

oslevel -s
instfix -ci | grep :-:
lppchk -v
}

main > $logname 2>&1

Install and Upgrade RPM packages

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"
aix/install_upgr_rpm.txt · Last modified: 2024/08/21 17:41 by manu