2014-11-19 14:42:19 +00:00
#!/bin/bash
2010-07-23 18:27:29 +00:00
# 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)
2012-05-02 19:17:31 +00:00
# updatenode noderange -P "ospkgs --keeprepo" (this one will preserve the original repositories when installing/updating the rpms. )
#
2010-07-23 18:27:29 +00:00
#
#=cut
#-------------------------------------------------------------------------------
2011-09-26 13:42:37 +00:00
# pmatch determines if 1st argument string is matched by 2nd argument pattern
pmatch ()
{
case $1 in
$2) return 0;; # zero return code means string matched by pattern
esac
return 1 # non-zero return code means string not matched by pattern
}
2012-07-26 08:23:38 +00:00
##
## The following routines implement the notion of an array.
## The POSIX shell does not support arrays.
## With these routines, an array conceptually called "my_array" is implmented using the following series
## of variables:
##
## my_array__ARRAY_HIGH_INDEX - holds the highest index used in the array
## my_array__0 - value for element 0 of my_array: my_array[0] in standard array notation
## my_array__1 - value for element 1 of my_array: my_array[1] in standard array notation
## . .
## . .
## . .
##
#
# array_empty - make the array whose name is given by $1 empty (with no elements).
#
# sample call: array_empty my_array
#
array_empty ()
{
local array_name="$1"
local high_ndx_varname="${array_name}__ARRAY_HIGH_INDEX"
local elem_varname
local high_ndx
local ndx
# Determine current element count
eval "high_ndx=\$${high_ndx_varname}"
if [ -z "$high_ndx" ]; then
return
fi
# Unset all previously defined element variables and the high index variable
ndx=0
while [ $ndx -le $high_ndx ]; do
elem_varname="${array_name}__${ndx}"
eval "unset ${elem_varname}"
ndx=$(expr $ndx + 1)
done
eval "unset ${high_ndx_varname}"
}
#
# array_get_size - return the size of the array whose name is given by $1.
# The size, which is the highest index plus one is written to standard output
#
# sample call: size=$(array_get_size my_array)
#
array_get_size ()
{
local array_name="$1"
local high_ndx_varname="${array_name}__ARRAY_HIGH_INDEX"
local high_ndx
eval "high_ndx=\$${high_ndx_varname}"
if [ -z "$high_ndx" ]; then
high_ndx=-1
fi
echo $(expr $high_ndx + 1)
}
#
# array_set_element - set an element to a value. $1 is the array name, $2 is the element index,
# $3 is the element value.
#
# sample call: array_set_element my_array index "the new element value"
#
array_set_element ()
{
local array_name="$1"
local ndx="$2"
local elem_value="$3"
local high_ndx_varname="${array_name}__ARRAY_HIGH_INDEX"
local elem_varname
local high_ndx
# Set specified element to specified value
elem_varname="${array_name}__${ndx}"
eval "${elem_varname}=\"${elem_value}\""
# Adjust high index
eval "high_ndx=\$${high_ndx_varname}"
if [ -z "$high_ndx" ]; then
high_ndx=-1
fi
if [ $ndx -gt $high_ndx ]; then
eval "${high_ndx_varname}=${ndx}"
fi
}
#
# array_get_element - get an element's value. $1 is the array name, $2 is the element index.
#
# sample call: value=$(array_get_element my_array index)
#
array_get_element ()
{
local array_name="$1"
local ndx="$2"
eval "echo \"\$${array_name}__${ndx}\""
}
##
## End of set routines.
##
2012-11-25 02:33:54 +00:00
RETURNVAL=0
2012-07-26 08:23:38 +00:00
2010-07-23 18:27:29 +00:00
debug=0
2013-07-25 17:38:29 +00:00
if [ $VERBOSE ]; then
2013-07-17 17:25:39 +00:00
debug=1
fi
2011-09-26 13:42:37 +00:00
OS_TYPE=`uname -s`
if [ "$OS_TYPE" != "Linux" ]; then
2010-07-23 18:59:22 +00:00
#not supported on AIX
echo "ospkgs script only runs on Linux."
exit 0
fi
2010-07-23 18:27:29 +00:00
# This command only runs by updatenode command
2012-12-26 08:57:24 +00:00
#if [ -z "$UPDATENODE" ] || [ $UPDATENODE -ne 1 ]; then
# echo " Did not install any extra rpms."
# exit 0
#fi
2010-07-23 18:27:29 +00:00
2011-09-26 13:42:37 +00:00
if [ -z "$OSPKGS" ]; then
2012-11-25 02:33:54 +00:00
echo "$0: no extra rpms to install"
exit 0
2010-07-23 18:27:29 +00:00
fi
2012-05-01 15:35:13 +00:00
argnum=$#;
args=$@
keeprepo=0
if [ $argnum -gt 0 ]; then
if ( pmatch "$args" "*keeprepo*" ); then
keeprepo=1
fi
if ( pmatch "$args" "*debug*" ); then
debug=1
fi
fi
2011-09-26 13:42:37 +00:00
if [ -z "$NFSSERVER" ]; then
2010-07-23 18:27:29 +00:00
NFSSERVER=$MASTER
fi
2011-09-26 13:42:37 +00:00
if [ -z "$INSTALLDIR" ]; then
2010-07-23 18:27:29 +00:00
INSTALLDIR="/install"
fi
#check if /install is mounted on the server, we may need to add code to conver NFSSERVER to ip
mounted=0;
2013-07-03 03:14:03 +00:00
result=`mount |grep " $INSTALLDIR " |grep $NFSSERVER`
2010-07-23 18:27:29 +00:00
if [ $? -eq 0 ]; then
2011-01-04 02:41:15 +00:00
NFSSERVER="/install"
2010-07-23 18:27:29 +00:00
mounted=1
fi
2011-09-26 13:42:37 +00:00
if [ -z "$OSPKGDIR" ]; then
2013-03-14 07:47:28 +00:00
OSPKGDIR="$INSTALLDIR/$OSVER/$ARCH"
fi
2012-07-20 09:55:45 +00:00
2013-03-14 07:47:28 +00:00
if [ "$KERNELDIR" != "" ]; then
OSPKGDIR="$OSPKGDIR,$KERNELDIR"
fi
2012-07-26 08:23:38 +00:00
OIFS=$IFS
2012-08-30 01:52:27 +00:00
IFS=$','
2012-07-26 08:23:38 +00:00
if ( pmatch "$OSVER" "ubuntu*" ); then
2012-08-30 01:52:27 +00:00
IFS=$(printf ',')
2012-07-26 08:23:38 +00:00
fi
array_ospkgdirs=($OSPKGDIR)
IFS=$OIFS
array_empty os_path
index=0
for dir in ${array_ospkgdirs[@]}
do
2012-12-07 08:32:03 +00:00
2013-01-05 09:08:40 +00:00
default_pkgdir="$INSTALLDIR/$OSVER/$ARCH"
OSPKGDIR="$OSPKGDIR"
2012-07-26 08:23:38 +00:00
if [ $mounted -eq 0 ]; then
2013-01-05 09:08:40 +00:00
#OSPKGDIR="$OSPKGDIR"
2012-07-26 08:23:38 +00:00
ospkgdir="$NFSSERVER$dir"
2013-01-05 09:08:40 +00:00
else
ospkgdir="$dir"
fi
# for the os base pkg dir(default_pkgdir) , there are some special cases.
# (1)for rhels6, there is one repodata in the os base dir; so keep it here, and handle the other cases below
# (2)for sles, we should specified the baseurl should be ./install/sles11/ppc64/1
# (3)for SL5, we should append the /SL
# (4) for other os, we just keep it here.
# For other pkg paths, we just keep it here.
if [ $dir == $default_pkgdir ] || [ $dir == "$default_pkgdir/" ]; then
if ( pmatch "$OSVER" "sles*" ); then
OSPKGDIR="$OSPKGDIR/1"
ospkgdir="$ospkgdir/1"
elif ( pmatch "$OSVER" "SL5*" ); then
OSPKGDIR="$OSPKGDIR/SL"
ospkgdir="$ospkgdir/SL"
fi
fi
array_set_element os_path $index $ospkgdir
2012-12-07 08:32:03 +00:00
2013-01-05 09:08:40 +00:00
if ( pmatch "$OSVER" "rhel*" ); then
#default_pkgdir="$INSTALLDIR/$OSVER/$ARCH"
if [ $dir == $default_pkgdir ] || [ $dir == "$default_pkgdir/" ]; then
2012-12-07 08:32:03 +00:00
2013-01-05 09:08:40 +00:00
if ( pmatch "$OSVER" "rhels6*" ); then
if [ $ARCH == "ppc64" ]; then
2013-01-07 03:20:19 +00:00
ospkgdir_ok="$ospkgdir/Server"
2013-01-05 09:08:40 +00:00
index=$(expr $index + 1)
2013-01-07 03:20:19 +00:00
array_set_element os_path $index $ospkgdir_ok
2013-01-05 09:08:40 +00:00
fi
if [ $ARCH == "x86_64" ]; then
for arg in "Server" "ScalableFileSystem" "HighAvailability" "ResilientStorage" "LoadBalancer"
do
2013-01-07 03:20:19 +00:00
ospkgdir_ok="$ospkgdir/$arg"
2013-01-05 09:08:40 +00:00
index=$(expr $index + 1)
2013-01-07 03:20:19 +00:00
array_set_element os_path $index $ospkgdir_ok
2013-01-05 09:08:40 +00:00
done
fi
elif ( pmatch "$OSVER" "rhels5*" ); then
# for rhels5, the repodata is in ./Server, ./Cluster, ./CusterStorage, not in ./
2013-01-07 03:20:19 +00:00
ospkgdir_ok="$ospkgdir/Server"
array_set_element os_path $index $ospkgdir_ok
2012-12-07 08:32:03 +00:00
2013-01-05 09:08:40 +00:00
if [ $ARCH == "x86_64" ]; then
for arg in "Cluster" "ClusterStorage"
do
2013-01-07 03:20:19 +00:00
ospkgdir_ok="$ospkgdir/$arg"
2013-01-05 09:08:40 +00:00
index=$(expr $index + 1)
2013-01-07 03:20:19 +00:00
array_set_element os_path $index $ospkgdir_ok
2013-01-05 09:08:40 +00:00
done
fi # x86_64
fi # if...elif..fi
fi # eq default_pkgdir
2012-12-07 08:32:03 +00:00
fi # match rhel*
2013-01-05 09:08:40 +00:00
index=$(expr $index + 1)
2012-07-26 08:23:38 +00:00
2013-03-14 07:47:28 +00:00
done
2010-07-23 18:27:29 +00:00
2012-07-26 08:23:38 +00:00
2012-07-20 09:55:45 +00:00
2015-01-22 20:32:18 +00:00
#if [ "$SDKDIR" != "" ]; then
# if [ $mounted -eq 0 ]; then
# SDKDIR="$NFSSERVER/$SDKDIR"
# fi
#fi
2012-04-12 09:29:17 +00:00
2012-07-20 09:55:45 +00:00
#if [ $mounted -eq 0 ]; then
# OSPKGDIR_NO_PREFIX=${OSPKGDIR#$INSTALLDIR}
2011-09-26 13:42:37 +00:00
2012-07-20 09:55:45 +00:00
# if [ "$OSPKGDIR" != "$OSPKGDIR_NO_PREFIX" ]; then
# OSPKGDIR="$NFSSERVER/$OSPKGDIR_NO_PREFIX"
# fi
#fi
2010-07-23 18:27:29 +00:00
2012-05-15 03:33:46 +00:00
logger -t xcat -p local4.info "NFSSERVER=$NFSSERVER"
logger -t xcat -p local4.info "OSPKGDIR=$OSPKGDIR"
logger -t xcat -p local4.info "OSPKGS=$OSPKGS"
2010-07-23 18:27:29 +00:00
if [ $debug -ne 0 ]; then
echo NFSSERVER=$NFSSERVER
echo OSPKGDIR=$OSPKGDIR
echo OSPKGS = $OSPKGS
fi
2010-07-30 20:20:51 +00:00
pkgs='' #packages
groups='' #groups
pkgs_d='' #packages to remove
2015-04-14 10:23:12 +00:00
cudapkgs='' #cuda pkg set
2010-08-04 12:43:28 +00:00
OIFS=$IFS
2015-01-07 07:35:14 +00:00
IFS=$','
2012-04-12 19:26:55 +00:00
if ( pmatch "$OSVER" "ubuntu*" ); then
2015-01-07 07:35:14 +00:00
IFS=$(printf ',')
2012-04-12 19:26:55 +00:00
fi
2015-01-07 07:35:14 +00:00
pkgarray=($OSPKGS)
IFS=$OIFS
2012-04-12 19:26:55 +00:00
2015-01-07 07:35:14 +00:00
for x in ${pkgarray[@]};
2010-07-30 20:20:51 +00:00
do
2010-08-04 12:43:28 +00:00
#remove leading and trailing spaces
x=`echo $x |sed 's/^ *//;s/ *$//'`
#echo "x=$x"
pos=`expr index "$x" -`
2010-07-30 20:20:51 +00:00
if [ $pos -eq 1 ]; then
pkgs_d="$pkgs_d ${x#-}"
else
2010-08-04 12:43:28 +00:00
pos=`expr index "$x" @`
2010-07-30 20:20:51 +00:00
if [ $pos -eq 1 ]; then
2010-08-04 12:43:28 +00:00
#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
2010-07-30 20:20:51 +00:00
else
2015-04-14 10:23:12 +00:00
if ( pmatch "$x" "cuda*" ); then
cudapkgs="$cudapkgs $x"
else
pkgs="$pkgs $x"
fi
2010-07-30 20:20:51 +00:00
fi
fi
done
2010-08-04 12:43:28 +00:00
if [ $debug -ne 0 ]; then
echo "pkgs=$pkgs"
2015-04-14 10:23:12 +00:00
if [ -n "$cudapkgs" ]; then
echo "cudapkgs=$cudapkgs"
fi
2010-08-04 12:43:28 +00:00
echo "groups=$groups"
echo "remove pkgs=$pkgs_d"
fi
2010-07-23 18:27:29 +00:00
2011-09-26 13:42:37 +00:00
if ( pmatch "$OSVER" "sles10*" ); then
2010-07-30 20:20:51 +00:00
#check if rug is installed
result=`rpm -q rug`
2010-07-23 18:27:29 +00:00
if [ $? -ne 0 ]; then
2010-07-30 20:20:51 +00:00
echo "Please install rug on $NODE."
2010-07-23 18:27:29 +00:00
exit 1
fi
2012-05-01 15:35:13 +00:00
if [ $keeprepo -ne 1 ]; then
#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
2010-07-23 18:27:29 +00:00
fi
#add new repo
if [ $mounted -eq 0 ]; then
2011-11-10 14:26:08 +00:00
path="http://$OSPKGDIR"
2010-07-23 18:27:29 +00:00
else
2010-07-30 20:20:51 +00:00
path="dir://$OSPKGDIR"
2010-07-23 18:27:29 +00:00
fi
2010-07-30 20:20:51 +00:00
result=`rug sa $path $OSVER`
2010-07-23 18:27:29 +00:00
if [ $? -ne 0 ]; then
2012-05-15 03:33:46 +00:00
logger -t xcat -p local4.info "ospkgs: rug sa $path $OSVER\n $result"
2011-09-26 13:42:37 +00:00
echo "ospkgs: rug sa $path $OSVER"
echo " $result"
2010-07-23 18:27:29 +00:00
fi
2010-07-30 20:20:51 +00:00
result=`rug sub $OSVER`
if [ $? -ne 0 ]; then
2012-05-15 03:33:46 +00:00
logger -t xcat -p local4.info "ospkgs: rug sub $OSVER\n $result"
2011-09-26 13:42:37 +00:00
echo "ospkgs: rug sub $OSVER"
echo " $result"
2010-07-30 20:20:51 +00:00
fi
result=`rug refresh 2>&1`
2010-07-23 18:27:29 +00:00
if [ $debug -ne 0 ]; then
2010-07-30 20:20:51 +00:00
echo "rug refresh"
2010-07-23 18:27:29 +00:00
echo $result
fi
2010-07-30 20:20:51 +00:00
result=`rug update -y --agree-to-third-party-licences`
2013-06-25 14:56:43 +00:00
R=$?
if [ $R -ne 0 ]; then
RETURNVAL=$R
2012-05-15 03:33:46 +00:00
logger -t xcat -p local4.info "rug update -y --agree-to-third-party-licences\n $result"
2011-09-26 13:42:37 +00:00
echo "ospkgs: rug update -y --agree-to-third-party-licences"
2012-11-25 02:33:54 +00:00
echo " $result"
2010-07-23 18:27:29 +00:00
else
if [ $debug -ne 0 ]; then
2010-07-30 20:20:51 +00:00
echo "rug update -y --agree-to-third-party-licences"
echo $result
fi
fi
#install the new patterns if any
if [ -n "$groups" ]; then
2011-10-10 07:46:18 +00:00
cmd="$ENVLIST rug install -y --agree-to-third-party-licences -t pattern $groups"
result=`eval $cmd 2>&1`
2013-06-25 14:56:43 +00:00
R=$?
if [ $R -ne 0 ]; then
RETURNVAL=$R
2012-05-15 03:33:46 +00:00
logger -t xcat -p local4.info "ospkgs: $cmd\n $result"
2010-07-30 20:20:51 +00:00
echo "ospkgs: $cmd"
2010-07-23 18:27:29 +00:00
echo $result
2010-07-30 20:20:51 +00:00
else
if [ $debug -ne 0 ]; then
echo "ospkgs: $cmd"
echo $result
fi
2010-07-23 18:27:29 +00:00
fi
fi
#install new rpms if any
2010-07-30 20:20:51 +00:00
if [ -n "$pkgs" ]; then
2011-10-10 07:46:18 +00:00
cmd="$ENVLIST rug install -y --agree-to-third-party-licences $pkgs"
result=`eval $cmd 2>&1`
2013-06-25 14:56:43 +00:00
R=$?
if [ $R -ne 0 ]; then
RETURNVAL=$R
2012-05-15 03:33:46 +00:00
logger -t xcat -p local4.info "ospkgs: $cmd\n $result"
2010-07-30 20:20:51 +00:00
echo "ospkgs: $cmd"
2010-07-23 18:27:29 +00:00
echo $result
2010-07-30 20:20:51 +00:00
else
if [ $debug -ne 0 ]; then
echo "ospkgs: $cmd"
echo $result
fi
2010-07-23 18:27:29 +00:00
fi
fi
2010-07-30 20:20:51 +00:00
#remove some packages if specified
if [ -n "$pkgs_d" ]; then
2011-10-10 07:46:18 +00:00
cmd="$ENVLIST rug remove -y $pkgs_d"
result=`eval $cmd 2>&1`
2013-06-25 14:56:43 +00:00
R=$?
if [ $R -ne 0 ]; then
RETURNVAL=$R
2012-05-15 03:33:46 +00:00
logger -t xcat -p local4.info "ospkgs: $cmd\n $result"
2010-07-30 20:20:51 +00:00
echo "ospkgs: $cmd"
echo $result
else
if [ $debug -ne 0 ]; then
echo "ospkgs: $cmd"
echo $result
fi
fi
fi
2014-12-19 21:32:15 +00:00
elif ( pmatch "$OSVER" "sles*" ); then
2010-07-23 18:27:29 +00:00
#check if zypper is installed
result=`rpm -q zypper`
if [ $? -ne 0 ]; then
echo "Please install zypper on $NODE."
exit 1
fi
2012-05-01 15:35:13 +00:00
if [ $keeprepo -ne 1 ]; then
old_repo=`zypper lr |grep -e "^[0-9]" | cut -f2 -d '|'`
for x in $old_repo
do
2013-04-22 06:30:18 +00:00
if ( ( pmatch "$x" "xCAT-$OSVER-path*" ) || ( pmatch "$x" "$OSVER-path*" ) || ( pmatch "$x" "xcat-otherpkgs*" ) ); then
2013-04-16 05:36:05 +00:00
result=`zypper rr "$x"`
fi
2012-05-01 15:35:13 +00:00
done
result=`zypper --non-interactive refresh 2>&1`
if [ $debug -ne 0 ]; then
echo "zypper --non-interactive refresh"
echo $result
fi
2010-07-23 18:27:29 +00:00
fi
2012-07-26 08:23:38 +00:00
SUM=$(array_get_size os_path)
i=0
if [ $SUM -eq 0 ]; then
if [ $mounted -eq 0 ]; then
path="http://$OSPKGDIR"
else
path="file://$OSPKGDIR"
fi
2013-03-14 07:47:28 +00:00
result=`zypper ar $path xCAT-$OSVER 2>&1`
2012-07-26 08:23:38 +00:00
if [ $? -ne 0 ]; then
if ( ! pmatch "$result" "*exists*" ); then
2013-03-14 07:47:28 +00:00
logger -t xcat -p local4.info "ospkgs: zypper ar $path xCAT-$OSVER\n $result"
echo "ospkgs: zypper ar $path xCAT-OSVER"
2012-07-26 08:23:38 +00:00
echo " $result"
fi
fi
else
while [ $i -lt $SUM ]; do
OSPKGDIR=$(array_get_element os_path $i)
if [ $mounted -eq 0 ]; then
path="http://$OSPKGDIR"
else
path="file://$OSPKGDIR"
fi
2013-03-14 07:47:28 +00:00
result=`zypper ar $path xCAT-$OSVER-"path$i" 2>&1`
2012-07-26 08:23:38 +00:00
if [ $? -ne 0 ]; then
if ( ! pmatch "$result" "*exists*" ); then
2013-03-14 07:47:28 +00:00
logger -t xcat -p local4.info "ospkgs: zypper ar $path xCAT-$OSVER-path$i\n $result"
echo "ospkgs: zypper ar $path xCAT-$OSVER-path$i"
2012-07-26 08:23:38 +00:00
echo " $result"
fi
fi
i=$((i+1))
done
2010-07-23 18:27:29 +00:00
fi
2012-04-12 09:29:17 +00:00
2015-01-22 20:32:18 +00:00
#adds SDK repository. The SDKDIR is a comma separated list of
#directory names. For example:
#SDKDIR='/install/sles12/x86_64/sdk1,/install/sles12/x86_64/sdk2'
2012-04-12 09:29:17 +00:00
if [ "$SDKDIR" != "" ]; then
2015-01-22 20:32:18 +00:00
OIFS=$IFS
IFS=$','
for sdk_src in $SDKDIR; do
bname=`basename $sdk_src`
if [ $mounted -eq 0 ]; then
sdk_src="http://$NFSSERVER/$sdk_src"
else
sdk_src="file://$sdk_src"
fi
result=`zypper ar $sdk_src xCAT-$OSVER-$bname 2>&1`
if [ $? -ne 0 ]; then
if ( ! pmatch "$result" "*exists*" ); then
logger -t xcat -p local4.info "ospkgs: zypper ar $sdk_src xCAT-$OSVER-bname\n $result"
echo "ospkgs: zypper ar $sdk_src xCAT-$OSVER-bname"
echo " $result"
fi
fi
done
2015-01-22 21:03:42 +00:00
IFS=$OIFS
2012-04-12 09:29:17 +00:00
fi
2015-01-22 20:32:18 +00:00
2013-01-05 09:08:40 +00:00
result=`zypper --non-interactive --no-gpg-checks refresh 2>&1`
2010-07-23 18:27:29 +00:00
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`
2013-06-25 14:56:43 +00:00
R=$?
if [ $R -ne 0 ]; then
RETURNVAL=$R
2012-05-15 03:33:46 +00:00
logger -t xcat -p local4.info "ospkgs: zypper --non-interactive update --auto-agree-with-licenses\n $result"
2011-09-26 13:42:37 +00:00
echo "ospkgs: zypper --non-interactive update --auto-agree-with-licenses"
echo " $result"
2010-07-23 18:27:29 +00:00
else
if [ $debug -ne 0 ]; then
2010-07-30 20:20:51 +00:00
echo "ospkgs: zypper --non-interactive update --auto-agree-with-licenses"
echo $result
fi
fi
#install the new patterns if any
if [ -n "$groups" ]; then
2011-10-10 07:46:18 +00:00
cmd="$ENVLIST zypper install -y --auto-agree-with-licenses -t pattern $groups"
result=`eval $cmd 2>&1`
2013-06-25 14:56:43 +00:00
R=$?
if [ $R -ne 0 ]; then
RETURNVAL=$R
2012-05-15 03:33:46 +00:00
logger -t xcat -p local4.info "ospkgs: $cmd\n $result"
2010-07-30 20:20:51 +00:00
echo "ospkgs: $cmd"
2010-07-23 18:27:29 +00:00
echo $result
2010-07-30 20:20:51 +00:00
else
if [ $debug -ne 0 ]; then
echo "ospkgs: $cmd"
echo $result
fi
2010-07-23 18:27:29 +00:00
fi
fi
#install new rpms if any
2010-07-30 20:20:51 +00:00
if [ -n "$pkgs" ]; then
2011-10-10 07:46:18 +00:00
cmd="$ENVLIST zypper install -y --auto-agree-with-licenses $pkgs"
result=`eval $cmd 2>&1`
2013-06-25 14:56:43 +00:00
R=$?
if [ $R -ne 0 ]; then
RETURNVAL=$R
2012-05-15 03:33:46 +00:00
logger -t xcat -p local4.info "ospkgs: $cmd $result"
2010-07-30 20:20:51 +00:00
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
2011-10-10 07:46:18 +00:00
cmd="$ENVLIST zypper remove -y $pkgs_d"
result=`eval $cmd 2>&1`
2013-06-25 14:56:43 +00:00
R=$?
if [ $R -ne 0 ]; then
RETURNVAL=$R
2012-05-15 03:33:46 +00:00
logger -t xcat -p local4.info "ospkgs: $cmd $result"
2010-07-30 20:20:51 +00:00
echo "ospkgs: $cmd"
2010-07-23 18:27:29 +00:00
echo $result
2010-07-30 20:20:51 +00:00
else
if [ $debug -ne 0 ]; then
echo "ospkgs: $cmd"
echo $result
fi
2010-07-23 18:27:29 +00:00
fi
fi
2011-09-26 13:42:37 +00:00
elif ( pmatch "$OSVER" "ubuntu*" ); then
# verify dpkg is installed
2012-12-14 08:11:20 +00:00
result=`dpkg --version`
2011-09-26 13:42:37 +00:00
if [ $? -ne 0 ]; then
echo "Please install dpkg on $NODE."
exit 1
fi
# verify apt is installed
result=`dpkg -l apt`
if [ $? -ne 0 ]; then
echo "Please install apt on $NODE."
exit 1
fi
2015-01-07 07:35:14 +00:00
# setup apt source for os distro updates
# check whether the os package path in primary apt source (/etc/apt/sources.list) or not
# if the os package path does not exist in /etc/apt/sources.list,
# create apt source file in /etc/apt/sources.list.d
2015-04-14 10:23:12 +00:00
# replace space with "===" to avoid the string split issue
OSPKGDIR=`echo $OSPKGDIR | sed 's/\ /===/g'`
2015-01-07 07:35:14 +00:00
prirepo=/etc/apt/sources.list
repoprefix=/etc/apt/sources.list.d/xCAT-${OSVER}-path
oldif=$IFS
IFS=","
pkgdirs=($OSPKGDIR)
IFS=$oldif
repocount=0
for dir in ${pkgdirs[@]}; do
2015-04-14 10:23:12 +00:00
dir=`echo $dir | sed 's/\=\=\=/\ /g'`
2015-01-07 07:35:14 +00:00
if grep "^deb\ .*$dir" $prirepo; then
continue
fi
#create apt source file in /etc/apt/sources.list.d
2015-04-14 10:23:12 +00:00
result=`echo $dir | grep -E "^http:.*"`
if [ $? -eq 0 ]; then
echo "deb $dir" > "${repoprefix}${repocount}.list"
else
echo "deb http://$NFSSERVER/$dir ./" > "${repoprefix}${repocount}.list"
fi
2015-01-07 07:35:14 +00:00
repocount=$(($repocount+1))
done
2011-09-26 13:42:37 +00:00
# upgrade existing packages
2015-01-07 07:35:14 +00:00
apt-get -y update
command="DEBIAN_FRONTEND=noninteractive apt-get -y --allow-unauthenticated --force-yes -o Dpkg::Options::='--force-confold' -o Dpkg::Options::='--force-confdef' upgrade "
2015-04-14 10:23:12 +00:00
echo "=== $command"
2013-01-08 09:14:19 +00:00
eval $command
2013-06-25 14:56:43 +00:00
R=$?
if [ $R -ne 0 ]; then
RETURNVAL=$R
2013-01-08 09:14:19 +00:00
fi
2011-09-26 13:42:37 +00:00
# install groups (NOTE: It's not clear rpm-like "groups" are supported by dpkg/apt,
# but keeping this here doesn't really hurt. Anything that looks like a group will
# be installed as though it were a package.)
if [ -n "$groups" ]; then
2015-01-19 06:28:17 +00:00
command="$ENVLIST apt-get -q -y --force-yes install --no-install-recommends $groups"
2011-09-26 13:42:37 +00:00
echo "=== $command"
2011-10-10 07:46:18 +00:00
eval $command
2013-06-25 14:56:43 +00:00
R=$?
if [ $R -ne 0 ]; then
RETURNVAL=$R
2012-11-25 02:33:54 +00:00
fi
2011-09-26 13:42:37 +00:00
fi
# install packages
if [ -n "$pkgs" ]; then
2015-01-19 06:28:17 +00:00
command="$ENVLIST apt-get -q -y --force-yes install --no-install-recommends $pkgs"
2011-09-26 13:42:37 +00:00
echo "=== $command"
2011-10-10 07:46:18 +00:00
eval $command
2013-06-25 14:56:43 +00:00
R=$?
if [ $R -ne 0 ]; then
RETURNVAL=$R
2012-11-25 02:33:54 +00:00
fi
2011-09-26 13:42:37 +00:00
fi
2015-04-14 10:23:12 +00:00
if [ -n "$cudapkgs" ]; then
command="$ENVLIST apt-get -q -y --force-yes install --no-install-recommends $cudapkgs"
echo "=== $command"
# the nvidia-346 postinstall script will trigger the building of nvidia driver, it will use the ARCH environment parameter, unset the ARCH env variable will resolve this issue
original_arch=$ARCH
unset ARCH
eval $command
# re declare the ARCH env after installing cuda command done
ARCH=$original_arch
export ARCH
R=$?
if [ $R -ne 0 ]; then
RETURNVAL=$R
fi
fi
2011-09-26 13:42:37 +00:00
# remove packages
if [ -n "$pkgs_d" ]; then
2011-10-10 07:46:18 +00:00
command="$ENVLIST apt-get -y remove $pkgs_d"
2011-09-26 13:42:37 +00:00
echo "=== $command"
2011-10-10 07:46:18 +00:00
eval $command
2013-06-25 14:56:43 +00:00
R=$?
if [ $R -ne 0 ]; then
RETURNVAL=$R
2012-11-25 02:33:54 +00:00
fi
2011-09-26 13:42:37 +00:00
fi
2010-07-23 18:27:29 +00:00
else
#check if yum is installed
result=`rpm -q yum`
if [ $? -ne 0 ]; then
echo "Please install yum on $NODE."
exit 1;
fi
2012-05-01 15:35:13 +00:00
if [ $keeprepo -ne 1 ]; then
#remove old repo
mkdir -p /etc/yum.repos.d
2013-03-14 07:47:28 +00:00
if [ -r "/etc/yum.repos.d/local-repository.repo" ]; then
result=`rm /etc/yum.repos.d/local-repository.repo 2>&1`
fi
2013-04-08 01:38:17 +00:00
rm /etc/yum.repos.d/$OSVER-path*.repo >/dev/null 2>&1
2013-04-22 07:11:24 +00:00
result=`rm /etc/yum.repos.d/xCAT-$OSVER-path*.repo 2>&1`
2013-04-22 06:30:18 +00:00
result=`rm /etc/yum.repos.d/xCAT-otherpkgs*.repo 2>&1`
2012-05-01 15:35:13 +00:00
fi
2010-07-23 18:27:29 +00:00
result=`yum clean all`
2012-07-26 08:23:38 +00:00
SUM=$(array_get_size os_path)
i=0
2013-03-14 07:47:28 +00:00
while [ $i -lt $SUM ]; do
REPOFILE="/etc/yum.repos.d/xCAT-$OSVER-path$i.repo"
2012-07-26 08:23:38 +00:00
OSPKGDIR=$(array_get_element os_path $i)
2012-12-07 08:32:03 +00:00
2012-07-26 08:23:38 +00:00
if [ ! -f $REPOFILE ]; then
2013-03-14 07:47:28 +00:00
echo "[xCAT-$OSVER-path$i]" > $REPOFILE
echo "name=xCAT-$OSVER-path$i" >> $REPOFILE
2012-07-26 08:23:38 +00:00
if [ $mounted -eq 0 ]; then
echo "baseurl=http://$OSPKGDIR" >> $REPOFILE
else
echo "baseurl=file://$OSPKGDIR" >> $REPOFILE
fi
echo "enabled=1" >> $REPOFILE
echo "gpgcheck=0" >> $REPOFILE
fi
i=$((i+1))
2013-03-14 07:47:28 +00:00
done
2012-07-26 08:23:38 +00:00
2010-07-23 18:27:29 +00:00
#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`
2013-06-25 14:56:43 +00:00
R=$?
if [ $R -ne 0 ]; then
RETURNVAL=$R
2012-05-15 03:33:46 +00:00
logger -t xcat -p local4.info "ospkgs: yum -y upgrade\n $result"
2011-09-26 13:42:37 +00:00
echo "ospkgs: yum -y upgrade"
echo " $result"
2010-07-23 18:27:29 +00:00
else
if [ $debug -ne 0 ]; then
2010-08-04 12:43:28 +00:00
echo "ospkgs: yum -y upgrade"
2010-07-23 18:27:29 +00:00
echo $result
fi
fi
2010-07-30 20:20:51 +00:00
#install new groups if any
if [ -n "$groups" ]; then
2011-10-10 07:46:18 +00:00
cmd="echo $groups| $ENVLIST xargs yum -y groupinstall"
result=`eval $cmd 2>&1`
2013-06-25 14:56:43 +00:00
R=$?
if [ $R -ne 0 ]; then
RETURNVAL=$R
2012-05-15 03:33:46 +00:00
logger -t xcat -p local4.info "ospkgs: $cmd\n $result"
2010-07-30 20:20:51 +00:00
echo "ospkgs: $cmd"
echo $result
else
if [ $debug -ne 0 ]; then
echo "ospkgs: $cmd"
echo $result
fi
fi
fi
2010-07-23 18:27:29 +00:00
#install new rpms if any
2010-07-30 20:20:51 +00:00
if [ -n "$pkgs" ]; then
2011-10-10 07:46:18 +00:00
cmd="$ENVLIST yum -y install $pkgs"
result=`eval $cmd 2>&1`
2013-06-25 14:56:43 +00:00
R=$?
if [ $R -ne 0 ]; then
RETURNVAL=$R
2012-05-15 03:33:46 +00:00
logger -t xcat -p local4.info "ospkgs: $cmd\n $result"
2010-07-30 20:20:51 +00:00
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
2011-10-10 07:46:18 +00:00
cmd="$ENVLIST yum -y remove $pkgs_d"
result=`eval $cmd 2>&1`
2013-06-25 14:56:43 +00:00
R=$?
if [ $R -ne 0 ]; then
RETURNVAL=$R
2012-05-15 03:33:46 +00:00
logger -t xcat -p local4.info "ospkgs: $cmd\n $result"
2010-07-30 20:20:51 +00:00
echo "ospkgs: $cmd"
2010-07-23 18:27:29 +00:00
echo $result
2010-07-30 20:20:51 +00:00
else
if [ $debug -ne 0 ]; then
echo "ospkgs: $cmd"
echo $result
fi
2010-07-23 18:27:29 +00:00
fi
fi
fi
2012-11-25 02:33:54 +00:00
exit $RETURNVAL
2010-07-23 18:27:29 +00:00