===== 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 "
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"