HPC Integration for AIX

git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@6085 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
This commit is contained in:
mellor 2010-05-13 16:20:48 +00:00
parent 2ad6ca4ac4
commit e7363d1c47
15 changed files with 351 additions and 70 deletions

View File

@ -1,11 +1,14 @@
#!/bin/sh
# Sample postbootscript script for installing and configuring HPC software
# Sample Linux postbootscript script for installing and configuring HPC software
# for statefull (full-disk install) nodes
# Make sure this runs after the otherpkgs postbootscript
#
ps_dir=/xcatpost
# Run script to set up some basics for all HPC software
$ps_dir/IBMhpc.postscript
# Run script to install gpfs updates
$ps_dir/gpfs_updates

View File

@ -1,10 +1,30 @@
#!/bin/sh
# Sample postscript script for base OS configuration for all HPC software
# for statefull (full-disk install) nodes
# Make sure this runs before the node reboots after initial install
# for services to be activated
# AIX:
# set network tunables
#
# Linux: for statefull (full-disk install) nodes
# Make sure this runs before the node reboots after initial install
# for services to be activated
#
OS=`uname`
# AIX
if [ $OS = "AIX" ]; then
# Set network tunables
no -p -o tcp_recvspace=524288
no -p -o tcp_sendspace=524288
no -p -o udp_recvspace=655360
no -p -o udp_sendspace=65536
no -p -o arpqsize=64
no -p -o rfc1323=1
no -p -o sb_max=8388608
chdev -l sys0 -a maxuproc='4096'
exit
fi
# Linux
ps_dir=/xcatpost
hpc=/opt/xcat/share/xcat/IBMhpc

View File

@ -0,0 +1,65 @@
# GPFS
I:gpfs.msg.en_US
I:gpfs.base
# The gpfs.docs.data lpp contains the man pages for GPFS
# By default, this will not be installed into node images
#I:gpfs.docs.data
# AIX bundle file for LoadLeveler packages
# LoadL
I:LoadL
#I:LoadL.resmgr
# MetaCluster (checkpoint/restore)
I:mcr.rte
I:mdcr
# AIX Bundle file for compiler runtime packages
I:xlC.rte
I:xlfrte
I:xlfrte.aix53
I:xlfrte.msg.en_US
I:xlsmp.aix53.rte
I:xlsmp.msg.en_US.rte
I:xlsmp.rte
# AIX bundle file for ESSL and PESSL packages
# ESSL
I:essl.rte.up
I:essl.rte.mp
I:essl.rte
I:essl.msg.en_US
#I:essl.msg.En_US
#I:essl.man.en_US
I:essl.loc.license
# PESSL
I:pessl.rte.up
I:pessl.rte.smp
I:pessl.rte.rs1
I:pessl.rte.mp
I:pessl.rte.hv
I:pessl.rte.common
I:pessl.rte
I:pessl.msg.en_US
#I:pessl.msg.En_US
#I:pessl.man.en_US
I:pessl.loc.license
# AIX bundle package list for PE
# POE
I:ppe.poe
I:ppe.pdb
I:ppe.man
I:ppe.loc.license
# needed on login node
#I:ppe.hpct
# LAPI
I:rsct.lapi
#I:rsct.sci

View File

@ -0,0 +1,16 @@
# AIX bundle file containing base AIX prereq for all HPC software
I:bos.adt.debug
I:bos.adt.libm
I:bos.adt.syscalls
I:bos.adt.prof
I:bos.cpr
I:bos.loc.iso.en_US
I:bos.pmapi
I:perfagent.tools
I:sysmgt.sguide.rte
I:Java5
~

View File

@ -0,0 +1,10 @@
# AIX Bundle file for compiler runtime packages
I:xlC.rte
I:xlfrte
I:xlfrte.aix53
I:xlfrte.msg.en_US
I:xlsmp.aix53.rte
I:xlsmp.msg.en_US.rte
I:xlsmp.rte

View File

@ -3,18 +3,17 @@
#
# Sample script to accept licenses for the IBM vacpp and xlf compilers
# For AIX:
# TBD
# do nothing, license accepted with installp -Y flag
# For Linux:
# Assumes all compiler software has been installed
OS=`uname`
cd $installroot/
vacpp_script=`find opt/ibmcmp/vacpp -name new_install -print`
xlf_script=`find opt/ibmcmp/xlf -name new_install -print`
if [ $OS != "AIX" ]; then
cd $installroot/
vacpp_script=`find opt/ibmcmp/vacpp -name new_install -print`
xlf_script=`find opt/ibmcmp/xlf -name new_install -print`
if [ $NODESETSTATE == "install" ] || [ $NODESETSTATE == "boot" ]; then
# Being run from a stateful install postscript
echo 1 | $vacpp_script

View File

@ -0,0 +1,24 @@
# AIX bundle file for ESSL and PESSL packages
# ESSL
I:essl.rte.up
I:essl.rte.mp
I:essl.rte
I:essl.msg.en_US
#I:essl.msg.En_US
#I:essl.man.en_US
I:essl.loc.license
# PESSL
I:pessl.rte.up
I:pessl.rte.smp
I:pessl.rte.rs1
I:pessl.rte.mp
I:pessl.rte.hv
I:pessl.rte.common
I:pessl.rte
I:pessl.msg.en_US
#I:pessl.msg.En_US
#I:pessl.man.en_US
I:pessl.loc.license

View File

@ -12,7 +12,7 @@ OS=`uname`
INSTALL_DIR='/install'
ESSL_DIR=$essldir
if [ -z $ESSL_DIR ]; then
if [ -z "$ESSL_DIR" ]; then
# try to default
ESSL_DIR=$INSTALL_DIR/post/otherpkgs/$OSVER/$ARCH/essl
fi

View File

@ -0,0 +1,6 @@
# GPFS
I:gpfs.msg.en_US
I:gpfs.base
# The gpfs.docs.data lpp contains the man pages for GPFS
# By default, this will not be installed into node images
#I:gpfs.docs.data

View File

@ -1,11 +1,12 @@
#!/bin/sh
#!/bin/bash
# Run this script to sync the GPFS mmsdrfs file into the node images
# Set the SOURCE, IMAGE, and SERVICE variables appropriately
# Set the SOURCE, TARGETDIR, IMAGE, and SERVICE variables appropriately
# Usage: gpfs_mmsdrfs [packimage|liteimage] [syncinstall]
# If packimage or liteimage specified, will run that command for the image
# if rsync updated any destination files
# For Linux, if packimage or liteimage specified,
# will run that command for the image if rsync updated any
# destination files
# If syncinstall specified, and if site.install_loc is blank,
# sync the /install directory to the SERVICE noderange
# if rysnc updated any destination files
@ -19,52 +20,113 @@
#SOURCE=gpfsmgr:/var/mmfs/gen/mmsdrfs
SOURCE=/var/mmfs/gen/mmsdrfs
# The images to be updated (list as many as needed)
IMAGE[1]=sles11-ppc64-netboot-service
IMAGE[2]=sles11-ppc64-netboot-compute
# The target directory on the xCAT MN that holds the master copy
TARGETDIR=/install/mmfs/gen
# The noderange for service nodes
SERVICE=service
# The images to be updated (list as many as needed)
# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
# EDIT HERE TO SPECIFY IMAGES TO BE UPDATED!!!
# default is to update all images !!!
# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
IMAGE[1]=ALL_IMAGES
#IMAGE[1]=sles11-ppc64-netboot-service
#IMAGE[2]=sles11-ppc64-netboot-compute
# If $installroot is set, then this script was called from genimage
# Ignore all IMAGE variables and only rsync to $installroot
if [ ! -z "$installroot" ]; then
rsync -i -t $SOURCE $installroot/var/mmfs/gen/mmsdrfs
exit
if [[ ! -z "$installroot" ]]; then
OS=`uname`
if [[ "$OS" != "AIX" ]]; then
rsync -i -t $SOURCE $installroot/var/mmfs/gen/mmsdrfs
exit
fi
fi
packcmd=""
syncinstall=""
if [ "$1" == "packimage" ] || [ "$1" == "liteimage" ]; then
packcmd=$1
if [ "$2" == "syncinstall" ]; then
# rsync the GPFS config file to the MN
# DEVELOPER NOTE: Keep all code above this rsync call as short
# and efficient as possible.
# This script may be frequently called from cron.
if [ ! -d $TARGETDIR ]; then
mkdir -p $TARGETDIR
fi
result=`rsync -i -t $SOURCE $TARGETDIR/mmsdrfs`
r1=`echo $result | cut -c1`
if [ "$r1" == ">" ]; then
OS=`uname`
packcmd=""
syncinstall=""
if [ "$1" == "packimage" ] || [ "$1" == "liteimage" ]; then
packcmd=$1
fi
if [ "$1" == "syncinstall" ] || [ "$2" == "syncinstall" ]; then
if [ -z "`/opt/xcat/bin/nodels $SERVICE`" ]; then
SERVICE=""
fi
installloc=`/opt/xcat/bin/gettab key=installloc site.value`
if [ -z "$installloc" ]; then
syncinstall="yes"
fi
fi
fi
updates=""
for syncimage in ${IMAGE[@]}; do
dest=`/opt/xcat/bin/gettab imagename=$syncimage linuximage.rootimgdir`
dest=$dest/rootimg/var/mmfs/gen/mmsdrfs
#echo "rsync cmd: rsync -i -t $SOURCE $dest "
result=`rsync -i -t $SOURCE $dest`
#echo "rsync result=$result"
r1=`echo $result | cut -c1`
if [ "$r1" == ">" ]; then
date
echo "mmsdrfs updated in image $syncimage"
if [ ! -z $packcmd ]; then
updates="yes"
/opt/xcat/sbin/$packcmd $syncimage
fi
if [[ -z "${IMAGE[1]}" || "${IMAGE[1]}" == "ALL_IMAGES" ]]; then
if [ $OS = "AIX" ]; then
imgtable="nimimage"
else
imgtable="linuximage"
fi
done
IMAGE=(`tabdump $imgtable | cut -d, -f1 | grep -v '#' | tr -d '"'`)
fi
if [ $OS = "AIX" ]; then
# do AIX stuff
updates=""
for syncimage in ${IMAGE[@]}; do
spot=`/opt/xcat/bin/gettab imagename=$syncimage nimimage.spot`
if [ -n "$spot" ]; then
dest=`lsnim -Z -a location $spot | grep -v '#' | cut -f2 -d':' `
if [ -n "$dest" ]; then
mkdir -p $dest/lpp/bos/inst_root/var/mmfs/gen
cp $TARGETDIR/mmsdrfs $dest/lpp/bos/inst_root/var/mmfs/gen/mmsdrfs
if [[ -n "$syncinstall" && -n "$SERVICE" ]]; then
/opt/xcat/bin/xdcp $SERVICE $TARGETDIR/mmsdrfs $dest/lpp/bos/inst_root/var/mmfs/gen
fi
fi
fi
shared_root=`/opt/xcat/bin/gettab imagename=$syncimage nimimage.shared_root`
if [ -n "$shared_root" ]; then
dest=`lsnim -Z -a location $shared_root | grep -v '#' | cut -f2 -d':' `
if [ -n "$dest" ]; then
mkdir -p $dest/var/mmfs/gen
cp $TARGETDIR/mmsdrfs $dest/var/mmfs/gen/mmsdrfs
if [[ -n "$syncinstall" && -n "$SERVICE" ]]; then
/opt/xcat/bin/xdcp $SERVICE $TARGETDIR/mmsdrfs $dest/var/mmfs/gen
fi
fi
fi
done
if [ ! -z "$updates" ] && [ ! -z "$syncinstall" ]; then
xdcp $SERVICE -r /usr/bin/rsync -o '-e ssh -craz' /install/netboot /install/netboot
else # do Linux stuff
updates=""
for syncimage in ${IMAGE[@]}; do
dest=`/opt/xcat/bin/gettab imagename=$syncimage linuximage.rootimgdir`
if [ -n "$dest" ]; then
dest=$dest/rootimg/var/mmfs/gen/mmsdrfs
cp $TARGETDIR/mmsdrfs $dest
if [ -n "$packcmd" ]; then
updates="yes"
/opt/xcat/sbin/$packcmd $syncimage
fi
fi
done
if [ -n "$updates" ] && [ -n "$syncinstall" ] && [ -n "$SERVICE" ]; then
xdcp $SERVICE -r /usr/bin/rsync -o '-e ssh -craz' /install/netboot /install/netboot
fi
fi
fi

View File

@ -23,6 +23,12 @@
# - create /var/mmfs/etc/nsddevices that simply returns 0
# - add GPFS paths to profile
# Set installroot here ONLY if passed in as an argument
# Don't set otherwise -- may have been set as an ENV var for this script
# or not set at all if this was called as a postscript
if [ -n "$1" ]; then
installroot=$1
fi
OS=`uname`
INSTALL_DIR='/install'
@ -62,15 +68,18 @@ fi
# This assumes that the node is NOT an NSD server
if [ $OS == "AIX" ]; then
# Create the script on the node
echo 'return 0' > /var/mmfs/etc/nsddevices
chmod 744 /var/mmfs/etc/nsddevices
mkdir -p $installroot/var/mmfs/etc
echo 'return 0' > $installroot/var/mmfs/etc/nsddevices
chmod 744 $installroot/var/mmfs/etc/nsddevices
else # assume Linux
if [ $NODESETSTATE == "genimage" ]; then
# Create the script in the image
mkdir -p $installroot/var/mmfs/etc
echo 'return 0' > $installroot/var/mmfs/etc/nsddevices
chmod 744 $installroot/var/mmfs/etc/nsddevices
else
# Create the script on the node
mkdir -p /var/mmfs/etc
echo 'return 0' > /var/mmfs/etc/nsddevices
chmod 744 /var/mmfs/etc/nsddevices
fi
@ -80,8 +89,8 @@ fi
# Add GPFS path to profile
if [ $OS == "AIX" ]; then
# add to /etc/profile
if ! grep 'mmfs' /etc/profile >& /dev/null; then
echo 'PATH=$PATH:/usr/lpp/mmfs/bin' >> /etc/profile
if ! grep 'mmfs' $installroot/etc/profile > /dev/null 2>&1; then
echo 'export PATH=$PATH:/usr/lpp/mmfs/bin' >> $installroot/etc/profile
fi
else # assume Linux
gpfsprofile=/etc/profile.d/gpfs
@ -89,8 +98,8 @@ else # assume Linux
gpfsprofile=$installroot$gpfsprofile
fi
if [ ! -e $gpfsprofile.sh ]; then
echo 'PATH=$PATH:/usr/lpp/mmfs/bin' > $gpfsprofile.sh
echo 'PATH=$PATH:/usr/lpp/mmfs/bin' > $gpfsprofile.csh
echo 'export PATH=$PATH:/usr/lpp/mmfs/bin' > $gpfsprofile.sh
echo 'export PATH=$PATH:/usr/lpp/mmfs/bin' > $gpfsprofile.csh
# Turn off LANG support since we did not install other msg catalogs
echo 'export LC_CTYPE=POSIX' $gpfsprofile.sh
echo 'export LC_CTYPE=POSIX' $gpfsprofile.csh
@ -104,11 +113,8 @@ fi
# If you are using a shared home directory stored in GPFS,
# create the symbolic link
#
# GPFSHOME=/gpfs/home
# HOMEDIR=/u
# if [ $NODESETSTATE == "genimage" ]; then
# HOMEDIR=$installroot/$HOMEDIR
# fi
# GPFSHOME=$installroot/gpfs/home
# HOMEDIR=$installroot/u
# ln -s $GPFSHOME $HOMEDIR

View File

@ -0,0 +1,6 @@
# AIX bundle file for LoadLeveler packages
#I:LoadL
I:LoadL.resmgr

View File

@ -4,7 +4,8 @@
# Sample script to accept license and install LoadLeveler resmgr package
# and perform additional customizations
# For AIX:
# TBD
# add LL path to profile
# create directories for LL log, spool, etc.
# For Linux:
#
@ -12,11 +13,11 @@
OS=`uname`
INSTALL_DIR='/install'
LOADL_DIR=$loadldir
aix_loadl_bin=/usr/lpp/LoadL/full/bin
aix_loadl_bin=/usr/lpp/LoadL/resmgr/full/bin
linux_loadl_bin=/opt/ibmll/LoadL/resmgr/full/bin
linux_loadl_license_script=/opt/ibmll/LoadL/sbin/install_ll
if [ -z $LOADL_DIR ]; then
if [ -z "$LOADL_DIR" ]; then
# try to default
LOADL_DIR=$INSTALL_DIR/post/otherpkgs/$OSVER/$ARCH/loadl
fi
@ -54,19 +55,25 @@ if [ $OS != "AIX" ]; then
fi
# Add LoadLeveler path to profile
if [ $OS == "AIX" ]; then
if [ "$OS" == "AIX" ]; then
# add to /etc/profile
if ! grep 'LoadL' /etc/profile >& /dev/null; then
echo 'PATH=$PATH:$aix_loadl_bin' >> /etc/profile
if ! grep 'LoadL' /etc/profile > /dev/null 2>&1 ; then
echo "export PATH=$PATH:$aix_loadl_bin" >> /etc/profile
fi
# UNCOMMENT to add to /etc/inittab if not already in image
#if ! grep 'loadl' /etc/inittab ; then
# echo "loadl:2:once:/usr/lpp/LoadL/resmgr/full/bin/llrctl start > /dev/console 2>&1" >> /etc/inittab
#fi
else # assume Linux
loadlprofile=/etc/profile.d/loadl
if [ $NODESETSTATE == "genimage" ]; then
loadlprofile=$installroot$loadlprofile
fi
if [ ! -e $loadlprofile.sh ]; then
echo 'PATH=$PATH:$linux_loadl_bin' > $loadlprofile.sh
echo 'PATH=$PATH:$linux_loadl_bin' > $loadlprofile.csh
echo "export PATH=$PATH:$linux_loadl_bin" > $loadlprofile.sh
echo "export PATH=$PATH:$linux_loadl_bin" > $loadlprofile.csh
# Turn off LANG support since we did not install other msg catalogs
echo 'export LC_CTYPE=POSIX' $loadlprofile.sh
echo 'export LC_CTYPE=POSIX' $loadlprofile.csh
@ -106,7 +113,13 @@ chmod 777 $installroot$logdir/core
# Owner set to 'loadl' userid, change if using a different userid
chown -R loadl:loadl $installroot$logdir/
if [ -f /etc/LoadL.cfg ] ; then
if [ "$NODESETSTATE" == "genimage" ] && [ -f /etc/LoadL.cfg ] ; then
cp /etc/LoadL.cfg $installroot/etc/LoadL.cfg
fi
# UNCOMMENT to Start loadleveler during postscripts
#if [ $NODESETSTATE != "genimage" ]; then
# /usr/lpp/LoadL/resmgr/full/bin/llrctl start
#fi

View File

@ -0,0 +1,20 @@
# AIX bundle package list for PE
# POE
I:ppe.poe
I:ppe.pdb
I:ppe.man
I:ppe.loc.license
# needed on login node
#I:ppe.hpct
# LAPI
I:rsct.lapi
#I:rsct.sci
# MetaCluster (checkpoint/restore)
I:mcr.rte
I:mdcr

View File

@ -20,7 +20,7 @@ OS=`uname`
INSTALL_DIR='/install'
PE_DIR=$pedir
if [ -z $PE_DIR ]; then
if [ -z "$PE_DIR" ]; then
# try to default
PE_DIR=$INSTALL_DIR/post/otherpkgs/$OSVER/$ARCH/pe
fi
@ -94,21 +94,52 @@ if [ ! -f $installroot/etc/PNSD.cfg ]; then
echo "log_file_size = 2097152" >> $installroot/etc/PNSD.cfg
echo "socket_file = /tmp/PNSD" >> $installroot/etc/PNSD.cfg
else
if [ "$OS" == "AIX" ]; then
/usr/bin/sed -e 's/log_file_size = .*/log_file_size = 2097152/g' $installroot/etc/PNSD.cfg > $installroot/etc/PNSD.cfg.new
mv $installroot/etc/PNSD.cfg.new $installroot/etc/PNSD.cfg
else
/usr/bin/sed -i 's/log_file_size = .*/log_file_size = 2097152/g' $installroot/etc/PNSD.cfg
fi
stopsrc -s pnsd
startsrc -s pnsd
fi
# Configure the poe.limits file
if [ ! -f $installroot/etc/poe.limits ]; then
echo "MP_POE_LAUNCH=all" > $installroot/etc/poe.limits
else
if [ "$OS" == "AIX" ]; then
/usr/bin/sed -e 's/MP_POE_LAUNCH=.*/MP_POE_LAUNCH=all/g' $installroot/etc/poe.limits > $installroot/etc/poe.limits.new
mv $installroot/etc/poe.limits.new $installroot/etc/poe.limits
else
/usr/bin/sed -i 's/MP_POE_LAUNCH=.*/MP_POE_LAUNCH=all/g' $installroot/etc/poe.limits
fi
fi
# POE requires rsh to be running
/usr/bin/sed -i 's/disable.*/disable = no/g' $installroot/etc/xinetd.d/rsh
if [ $NODESETSTATE == "install" ] || [ $NODESETSTATE == "boot" ]; then
service xinetd restart
if [ "$OS" == "AIX" ]; then
/usr/bin/sed -e '/\/rshd/s/^#//g' $installroot/etc/inetd.conf > $installroot/etc/inetd.conf.new
mv /etc/inetd.conf.new /etc/inetd.conf
refresh -s inetd
else
/usr/bin/sed -i 's/disable.*/disable = no/g' $installroot/etc/xinetd.d/rsh
if [ $NODESETSTATE == "install" ] || [ $NODESETSTATE == "boot" ]; then
service xinetd restart
fi
fi
# The Parallel Debugger on AIX requires a /proc filesystem
if [ "$OS" == "AIX" ]; then
if ! grep "/proc:" /etc/filesystems > /dev/null 2>&1 ; then
echo "/proc: " >> /etc/filesystems
echo " dev = /proc " >> /etc/filesystems
echo " vol = /proc " >> /etc/filesystems
echo " mount = true " >> /etc/filesystems
echo " check = false " >> /etc/filesystems
echo " free = false " >> /etc/filesystems
echo " vfs = procfs " >> /etc/filesystems
fi
mount /proc
fi