#!/bin/sh # 19990323 -tailored for infn # # installs to /usr/prod to avoid affecting current /usr/products # # users should source /usr/prod/setups/setups.csh # Installs and configures ups, perl and upd project=infn echo ' ' echo ' =============================================================== ' echo " Bootstrapping UPS on `hostname` at `date`" echo ' =============================================================== ' echo ' ' ########################################################################### # You may edit these variables # ########################################################################### # Use this by default # UPD_HOST='kits.fnal.gov' # PRODUCTS_ACCT=products # PRODUCTS_ROOT=/fnal/ups/prd # PRODUCTS_UPSDB=/fnal/ups/upsdb # PRODUCTS_SETUPS=/usr/local/etc # or use this to put products under your own account UPD_HOST='kits.fnal.gov' PRODUCTS_TMP='/var/tmp/bootups' PRODUCTS_ACCT=`whoami` PRODUCTS_ROOT=/usr/prod PRODUCTS_UPSDB=${PRODUCTS_ROOT}/upsdb PRODUCTS_SETUPS=${PRODUCTS_ROOT}/setups # Product versions UPS_VER=v4_4a UPD_VER=v4_4 PERL_VER=v5_004 ########################################################################### ############ Now we run the configuration - do not edit the following ##### ########################################################################### echo " OK - configuring " DIST_FLVR=`uname -s` # base flavor of system DIST_RLSE=`uname -r | cut -f 1 -d "."` # release of system [ "`uname -s`" = "IRIX64" ] && DIST_FLVR="IRIX" echo " Calculated DIST_FLVR ${DIST_FLVR} " echo " Calculated DIST_RLSE ${DIST_RLSE} " ##################################### # Run this as ${PRODUCTS_ACCT} # ##################################### if [ "`whoami`" = "${PRODUCTS_ACCT}" ] then echo " " echo " OK - user id is ${PRODUCTS_ACCT} as specified" else echo " " echo " Sorry, you are logged in as `whoami` " echo " But your bootups.config file specifies ${PRODUCTS_ACCT}" echo " You must log in as ${PRODUCTS_ACCT} to run this script " exit 1 fi ###################### # Checking /var/tmp # ###################### if [ -w /var/tmp ] then true echo " OK - you can write into /var/tmp " else echo " " echo " * * * * * * * * * * * * * * * * * * * * * * * * * * * * * " echo " * * Sorry, your account cannot write into /var/tmp * * " echo " * * as root, chmod 1777 /var/tmp * * " echo " * * * * * * * * * * * * * * * * * * * * * * * * * * * * * " echo " " exit 1 fi ############################ # PRODUCTS_TMP directories # ############################ for PRODUCTS_MKDIR in \ ${PRODUCTS_TMP} \ ${PRODUCTS_TMP}/upsdb \ ${PRODUCTS_TMP}/upsdb/.upsfiles \ ${PRODUCTS_TMP}/upsdb/.updfiles \ ${PRODUCTS_TMP}/setups do if [ -d ${PRODUCTS_MKDIR} ] then echo " OK - already have ${PRODUCTS_MKDIR} " else if mkdir ${PRODUCTS_MKDIR} then echo " OK - created ${PRODUCTS_MKDIR} " else echo " OOPS - could not create ${PRODUCTS_MKDIR} " exit 1 fi fi done cd ${PRODUCTS_TMP} ######################### # UPS/UPD/PERL tarballs # ######################### echo " " echo " OK - copying ups tarfiles from kits.fnal.gov " echo " " for PRODVERSFLVR in \ ups-${UPS_VER}-${DIST_FLVR}+${DIST_RLSE} \ perl-${PERL_VER}-${DIST_FLVR}+${DIST_RLSE} \ upd-${UPD_VER}-NULL do prod=`echo ${PRODVERSFLVR} | cut -d- -f1` vers=`echo ${PRODVERSFLVR} | cut -d- -f2` flvr=`echo ${PRODVERSFLVR} | cut -d- -f3` if [ -d ${PRODUCTS_TMP}/${prod} ] then echo " ${PRODUCTS_TMP}/${prod} already exists " else if [ ! -r ${PRODUCTS_TMP}/${prod}.tar ] # for testing then echo "products/${prod}/${vers}/${flvr}/${prod}_${vers}_${flvr}.tar" /bin/echo "user ftp $`whoami`@`hostname`\n \ image \n \ get products/${prod}/${vers}/${flvr}/${prod}_${vers}_${flvr}.tar \ ${PRODUCTS_TMP}/${prod}.tar \n \ quit" \ | ftp -n ftp.fnal.gov fi du -sk ${PRODUCTS_TMP}/${prod}.tar mkdir -p ${PRODUCTS_TMP}/${prod} tar xf ${PRODUCTS_TMP}/${prod}.tar -C ${PRODUCTS_TMP}/${prod} # rm ${PRODUCTS_TMP}/${prod}.tar du -sk ${PRODUCTS_TMP}/${prod} fi done ################## # configurations # ################## echo " " echo " OK - creating tmp upsdb_list file " echo ${PRODUCTS_TMP}/upsdb > ${PRODUCTS_TMP}/setups/upsdb_list echo " OK - creating tmp ups dbconfig file " echo "FILE = DBCONFIG" > ${PRODUCTS_TMP}/upsdb/.upsfiles/dbconfig echo "AUTHORIZED_NODES = *" >> ${PRODUCTS_TMP}/upsdb/.upsfiles/dbconfig echo "PROD_DIR_PREFIX = ${PRODUCTS_TMP}" >> ${PRODUCTS_TMP}/upsdb/.upsfiles/dbconfig echo "SETUPS_DIR = ${PRODUCTS_TMP}/setups" >> ${PRODUCTS_TMP}/upsdb/.upsfiles/dbconfig echo "UPD_USERCODE_DIR = ${PRODUCTS_TMP}/upsdb/.updfiles" >> ${PRODUCTS_TMP}/upsdb/.upsfiles/dbconfig echo " OK - creating tmp upd updconfig file " cat > ${PRODUCTS_TMP}/upsdb/.updfiles/updconfig <<\endfile File = updconfig product = ANY flavor = ANY qualifiers = ANY options = ANY UPS_THIS_DB = "${UPD_USERCODE_DB}" UPS_PROD_DIR = "${UPS_PROD_NAME}" UNWIND_PROD_DIR = "${PROD_DIR_PREFIX}/${UPS_PROD_DIR}" UPS_UPS_DIR = "ups" UNWIND_UPS_DIR = "${UNWIND_PROD_DIR}/${UPS_UPS_DIR}" UPS_TABLE_FILE = "${UPS_PROD_NAME}.table" UNWIND_TABLE_DIR = "${UNWIND_UPS_DIR}" UPS_TABLE_DIR = "${UNWIND_TABLE_DIR}" endfile cp ${PRODUCTS_TMP}/upd/ups/updusr.pm.template \ ${PRODUCTS_TMP}/upsdb/.updfiles/updusr.pm ################### # declaring ups # ################### echo " " echo " OK - removing any previous UPS environment " unset PRODUCTS unset SETUP_UPS unset SETUPS_DIR unset UPS_DIR unset UPS_SHELL export UPS_SHELL UPS_SHELL=/bin/sh export PRODUCTS PRODUCTS=${PRODUCTS_TMP}/upsdb ############################### # declaring upsl, upd, perl # ############################### cd ${PRODUCTS_TMP} if [ -d upsdb/ups ] then echo " " echo " OK - ups exists " else echo " " echo " OK - declaring ups " ${PRODUCTS_TMP}/ups/bin/ups declare -z ${PRODUCTS_TMP}/upsdb \ -C \ -r `pwd`/ups \ -f ${DIST_FLVR}+${DIST_RLSE} \ -m ups.table \ -M ups \ ups ${UPS_VER} ${PRODUCTS_TMP}/ups/bin/ups declare -z ${PRODUCTS_TMP}/upsdb \ -c \ ups ${UPS_VER} fi if [ -d upsdb/perl ] then echo " OK - perl exists " else echo " " echo " OK - declaring perl " ${PRODUCTS_TMP}/ups/bin/ups declare -z ${PRODUCTS_TMP}/upsdb \ -C \ -r `pwd`/perl \ -f ${DIST_FLVR}+${DIST_RLSE} \ -m perl.table \ -M ups \ perl ${PERL_VER} ${PRODUCTS_TMP}/ups/bin/ups declare -z ${PRODUCTS_TMP}/upsdb \ -c \ perl ${PERL_VER} fi if [ -d upsdb/upd ] then echo " OK - upd exists " else echo " " echo " OK - declaring upd " ${PRODUCTS_TMP}/ups/bin/ups declare -z ${PRODUCTS_TMP}/upsdb \ -r `pwd`/upd \ -f ${DIST_FLVR}+${DIST_RLSE} \ -m upd.table \ -M ups \ upd ${UPD_VER} fi echo " " echo " OK - bootstrap products are " ups list -aK+ echo " " echo " OK - setting up ups " . ${PRODUCTS_TMP}/setups/setups.sh echo " OK - setting up upd " setup upd ${UPD_VER} ############### # directories # ############### echo " " for PRODUCTS_MKDIR in \ ${PRODUCTS_ROOT} \ ${PRODUCTS_UPSDB} \ ${PRODUCTS_SETUPS} \ ${PRODUCTS_UPSDB}/.updfiles \ ${PRODUCTS_UPSDB}/.upsfiles/startup \ ${PRODUCTS_UPSDB}/.upsfiles/shutdown \ ${PRODUCTS_UPSDB}/.upsfiles/statistics \ do if [ -d ${PRODUCTS_MKDIR} ] then echo " OK - already have ${PRODUCTS_MKDIR} " else if mkdir -p ${PRODUCTS_MKDIR} then echo " OK - created ${PRODUCTS_MKDIR} " else echo " OOPS - could not create ${PRODUCTS_MKDIR} " exit 1 fi fi done export UPD_USERCODE_DB UPD_USERCODE_DB=${PRODUCTS_UPSDB} export UPD_USERCODE_DIR UPD_USERCODE_DIR=${PRODUCTS_UPSDB}/.updfiles PRODUCTS=${PRODUCTS_UPSDB} ################ # redirect upd # ################ export UPD_USERCODE_DB UPD_USERCODE_DB=${PRODUCTS_UPSDB} export UPD_USERCODE_DIR UPD_USERCODE_DIR=${PRODUCTS_UPSDB}/.updfiles export PRODUCTS PRODUCTS=${PRODUCTS_UPSDB} ################# # configuration # ################# echo ${PRODUCTS_UPSDB} > ${PRODUCTS_SETUPS}/upsdb_list cp ${PRODUCTS_TMP}/dbconfig.${project} ${PRODUCTS_UPSDB}/.upsfiles/dbconfig cp ${PRODUCTS_TMP}/updconfig.${project} ${PRODUCTS_UPSDB}/.updfiles/updconfig cp ${PRODUCTS_TMP}/upsdb/.updfiles/updusr.pm ${PRODUCTS_UPSDB}/.updfiles/updusr.pm ################ # final target # ################ echo " OK - installing ups under ${PRODUCTS_ROOT} " echo " " if ups exist ups ${UPS_VER} then echo " OK - already have ups " else upd install -Cj ups ${UPS_VER} -h file://localhost${PRODUCTS_TMP}/upsdb && \ ups declare -c ups ${UPS_VER} fi echo " " if ups exist perl ${PERL_VER} then echo " OK - already have perl " else upd install -Cj perl ${PERL_VER} -h file://localhost${PRODUCTS_TMP}/upsdb && \ ups declare -c perl ${PERL_VER} fi echo " " if ups exist upd ${UPD_VER} then echo " OK - already have upd " else upd install -Cj upd ${UPD_VER} -h file://localhost${PRODUCTS_TMP}/upsdb && \ ups declare -c upd ${UPD_VER} fi ################## # courtesy links # ################## if [ -w /usr/local/etc ] then rm -f /usr/local/etc/setups.csh rm -f /usr/local/etc/setups.sh ln -s ${PRODUCTS_SETUPS}/setups.csh /usr/local/etc/setups.csh ln -s ${PRODUCTS_SETUPS}/setups.sh /usr/local/etc/setups.sh fi ######## # done # ######## echo ' ' echo ' ===================================================================== ' echo " Bootstrapping UPS complete `date`" echo ' ===================================================================== ' echo ' ' exit Issues: how to recognize current ups/upd/perl (if desired) CDF uses form ---.tar for tarfile name