#!/bin/sh # IBM(c) 2010 EPL license http://www.eclipse.org/legal/epl-v10.html #------------------------------------------------------------------------------- #=head1 ospkgs #=head2 Used on Linux only. It installs/updates the rpms thta are from OS distro. # The environment variable OSPKGS contains the rpms to be installed/updated. # On MN, You need to: # 1. update the rpms under /install/os/arch/... directory where 'os' and 'arch' # can be found in the nodetype table. # 2. put new package names to /install/custom/netboot(install)/platform or # /opt/xcat/share/xcat/netboot(install)/platform # directory. The file name is one of the following: # profile.os.arch.pkglist # profile.os.pkglist # profile.arch.pkglist # profile.pkglist # You can run the following commands to install/update the rpms from os distro. # updatenode noderange ospkgs # updatenode noderange -S (this one intslls/updates rpms from os distro as well as otherpkgs) # #=cut #------------------------------------------------------------------------------- debug=0 if [[ $OSTYPE != linux* ]]; then #not supported on AIX echo "ospkgs script only runs on Linux." exit 0 fi # This command only runs by updatenode command if [[ $UPDATENODE -ne 1 ]]; then echo " Did not install any extra rpms." exit 0 fi if [[ -z "$OSPKGS" ]]; then echo "$0: no extra rpms to install" exit 0 fi if [[ -z "$NFSSERVER" ]]; then NFSSERVER=$MASTER fi if [[ -z "$INSTALLDIR" ]]; then INSTALLDIR="/install" fi #check if /install is mounted on the server, we may need to add code to conver NFSSERVER to ip mounted=0; result=`mount |grep /install |grep $NFSSERVER` if [ $? -eq 0 ]; then NFSSERVER=$INSTALLDIR mounted=1 fi if [[ -z "$OSPKGDIR" ]]; then OSPKGDIR="$NFSSERVER/$OSVER/$ARCH" if [[ $OSVER = sles* ]]; then OSPKGDIR="$OSPKGDIR/1" elif [[ $OSVER = rhel* ]]; then OSPKGDIR="$OSPKGDIR/Server" fi fi if [ $mounted -eq 0 ]; then OSPKGDIR=${OSPKGDIR/#$INSTALLDIR/$NFSSERVER/} fi logger -t xcat "NFSSERVER=$NFSSERVER" logger -t xcat "OSPKGDIR=$OSPKGDIR" logger -t xcat "OSPKGS=$OSPKGS" if [ $debug -ne 0 ]; then echo NFSSERVER=$NFSSERVER echo OSPKGDIR=$OSPKGDIR echo OSPKGS = $OSPKGS fi pkgs='' #packages groups='' #groups pkgs_d='' #packages to remove OIFS=$IFS IFS=$'\n' for x in `echo "$OSPKGS" | tr "," "\n"` do #remove leading and trailing spaces x=`echo $x |sed 's/^ *//;s/ *$//'` #echo "x=$x" pos=`expr index "$x" -` if [ $pos -eq 1 ]; then pkgs_d="$pkgs_d ${x#-}" else pos=`expr index "$x" @` if [ $pos -eq 1 ]; then #remove leading @ tmp=${x#@} #remove leading and trailing spaces tmp=`echo $tmp |sed 's/^ *//;s/ *$//'` #if there are spaces in the middle of the name, quote it pos=`expr index "$tmp" "\ "` if [ $pos -gt 0 ]; then groups="$groups \"$tmp\"" else groups="$groups $tmp" fi else pkgs="$pkgs $x" fi fi done IFS=$OIFS if [ $debug -ne 0 ]; then echo "pkgs=$pkgs" echo "groups=$groups" echo "remove pkgs=$pkgs_d" fi if [[ $OSVER = sles10* ]]; then #check if rug is installed result=`rpm -q rug` if [ $? -ne 0 ]; then echo "Please install rug on $NODE." exit 1 fi #remove old repo old_repo=`rug sl |grep -e "^[0-9]" | cut -f2 -d '|'` for x in $old_repo do result=`rug sd $x` done result=`rug refresh 2>&1` if [ $debug -ne 0 ]; then echo "rug refresh" echo $result fi #add new repo if [ $mounted -eq 0 ]; then path="ftp://$OSPKGDIR" else path="dir://$OSPKGDIR" fi result=`rug sa $path $OSVER` if [ $? -ne 0 ]; then logger -t xcat "ospkgs: rug sa $path $OSVER\n $result" echo "ospkgs: rug sa $path $OSVER\n $result" fi result=`rug sub $OSVER` if [ $? -ne 0 ]; then logger -t xcat "ospkgs: rug sub $OSVER\n $result" echo "ospkgs: rug sub $OSVER\n $result" fi result=`rug refresh 2>&1` if [ $debug -ne 0 ]; then echo "rug refresh" echo $result fi result=`rug update -y --agree-to-third-party-licences` if [ $? -ne 0 ]; then logger -t xcat "rug update -y --agree-to-third-party-licences\n $result" echo "ospkgs: rug update -y --agree-to-third-party-licences\n $result" else if [ $debug -ne 0 ]; then echo "rug update -y --agree-to-third-party-licences" echo $result fi fi #install the new patterns if any if [ -n "$groups" ]; then cmd="rug install -y --agree-to-third-party-licences -t pattern $groups" result=`$cmd 2>&1` if [ $? -ne 0 ]; then logger -t xcat "ospkgs: $cmd\n $result" echo "ospkgs: $cmd" echo $result else if [ $debug -ne 0 ]; then echo "ospkgs: $cmd" echo $result fi fi fi #install new rpms if any if [ -n "$pkgs" ]; then cmd="rug install -y --agree-to-third-party-licences $pkgs" result=`$cmd 2>&1` if [ $? -ne 0 ]; then logger -t xcat "ospkgs: $cmd\n $result" echo "ospkgs: $cmd" echo $result else if [ $debug -ne 0 ]; then echo "ospkgs: $cmd" echo $result fi fi fi #remove some packages if specified if [ -n "$pkgs_d" ]; then cmd="rug remove -y $pkgs_d" result=`$cmd 2>&1` if [ $? -ne 0 ]; then logger -t xcat "ospkgs: $cmd\n $result" echo "ospkgs: $cmd" echo $result else if [ $debug -ne 0 ]; then echo "ospkgs: $cmd" echo $result fi fi fi elif [[ $OSVER = sles11* ]]; then #check if zypper is installed result=`rpm -q zypper` if [ $? -ne 0 ]; then echo "Please install zypper on $NODE." exit 1 fi old_repo=`zypper lr |grep -e "^[0-9]" | cut -f2 -d '|'` for x in $old_repo do result=`zypper rr $x` done result=`zypper --non-interactive refresh 2>&1` if [ $debug -ne 0 ]; then echo "zypper --non-interactive refresh" echo $result fi if [ $mounted -eq 0 ]; then path="ftp://$OSPKGDIR" else path="file://$OSPKGDIR" fi result=`zypper ar $path $OSVER` if [ $? -ne 0 ]; then logger -t xcat "ospkgs: zypper ar $path $OSVER\n $result" echo "ospkgs: zypper ar $path $OSVER\n $result" fi result=`zypper --non-interactive refresh 2>&1` if [ $debug -ne 0 ]; then echo "zypper --non-interactive refresh" echo $result fi #upgrade the all existing rpms result=`zypper --non-interactive update --auto-agree-with-licenses` if [ $? -ne 0 ]; then logger -t xcat "ospkgs: zypper --non-interactive update --auto-agree-with-licenses\n $result" echo "ospkgs: zypper --non-interactive update --auto-agree-with-licenses\n $result" else if [ $debug -ne 0 ]; then echo "ospkgs: zypper --non-interactive update --auto-agree-with-licenses" echo $result fi fi #install the new patterns if any if [ -n "$groups" ]; then cmd="zypper install -y --auto-agree-with-licenses -t pattern $groups" result=`$cmd 2>&1` if [ $? -ne 0 ]; then logger -t xcat "ospkgs: $cmd\n $result" echo "ospkgs: $cmd" echo $result else if [ $debug -ne 0 ]; then echo "ospkgs: $cmd" echo $result fi fi fi #install new rpms if any if [ -n "$pkgs" ]; then cmd="zypper install -y --auto-agree-with-licenses $pkgs" result=`$cmd 2>&1` if [ $? -ne 0 ]; then logger -t xcat "ospkgs: $cmd $result" echo "ospkgs: $cmd" echo $result else if [ $debug -ne 0 ]; then echo "ospkgs: $cmd" echo $result fi fi fi #remove some packages if specified if [ -n "$pkgs_d" ]; then cmd="zypper remove -y $pkgs_d" result=`$cmd 2>&1` if [ $? -ne 0 ]; then logger -t xcat "ospkgs: $cmd $result" echo "ospkgs: $cmd" echo $result else if [ $debug -ne 0 ]; then echo "ospkgs: $cmd" echo $result fi fi fi else #check if yum is installed result=`rpm -q yum` if [ $? -ne 0 ]; then echo "Please install yum on $NODE." exit 1; fi #remove old repo mkdir -p /etc/yum.repos.d result=`rm /etc/yum.repos.d/*.repo 2>&1` result=`yum clean all` #create new repo file REPOFILE="/etc/yum.repos.d/$OSVER.repo" echo "[$OSVER]" > $REPOFILE echo "name=$OSVER" >> $REPOFILE if [ $mounted -eq 0 ]; then echo "baseurl=ftp://$OSPKGDIR" >> $REPOFILE else echo "baseurl=file://$OSPKGDIR" >> $REPOFILE fi echo "enabled=1" >> $REPOFILE echo "gpgcheck=0" >> $REPOFILE #import the release key? #my $key = "$installDIR/$os/$arch/RPM-GPG-KEY-redhat-release"; #my $tmp = "/tmp/RPM-GPG-KEY-redhat-release"; #my $tgt = "root@" . $node; #$out = `scp $key $tgt:$tmp`; #$out = `ssh $node "rpm --import $tmp"`; #upgrade the existing rpms result=`yum -y upgrade 2>&1` if [ $? -ne 0 ]; then logger -t xcat "ospkgs: yum -y upgrade\n $result" echo "ospkgs: yum -y upgrade\n $result" else if [ $debug -ne 0 ]; then echo "ospkgs: yum -y upgrade" echo $result fi fi #install new groups if any if [ -n "$groups" ]; then cmd="echo $groups| xargs yum -y groupinstall" result=`echo $groups | xargs yum -y groupinstall 2>&1` if [ $? -ne 0 ]; then logger -t xcat "ospkgs: $cmd\n $result" echo "ospkgs: $cmd" echo $result else if [ $debug -ne 0 ]; then echo "ospkgs: $cmd" echo $result fi fi fi #install new rpms if any if [ -n "$pkgs" ]; then cmd="yum -y install $pkgs" result=`$cmd 2>&1` if [ $? -ne 0 ]; then logger -t xcat "ospkgs: $cmd\n $result" echo "ospkgs: $cmd" echo $result else if [ $debug -ne 0 ]; then echo "ospkgs: $cmd" echo $result fi fi fi #remove some rpms if specified if [ -n "$pkgs_d" ]; then cmd="yum -y remove $pkgs_d" result=`$cmd 2>&1` if [ $? -ne 0 ]; then logger -t xcat "ospkgs: $cmd\n $result" echo "ospkgs: $cmd" echo $result else if [ $debug -ne 0 ]; then echo "ospkgs: $cmd" echo $result fi fi fi fi exit 0