wXCOMM!/bin/ksh XCOMM $XConsortium: dinstall.dt.src /main/6 1996/04/23 11:18:22 drk $ XCOMM ========================================================================== XCOMM ========================================================================== XCOMM deinstall.dt XCOMM XCOMM Script to deinstall the April 1994 Snapshot Desktop on XCOMM HP, IBM, Sun or Novell Unix systems from a CDROM XCOMM XCOMM ========================================================================== XCOMM ========================================================================== XCOMM ========================================================================== XCOMM XCOMM DtiClearScreen - clears the screen XCOMM XCOMM Input - none XCOMM Output - none XCOMM Return -none XCOMM ========================================================================== #define HASH # #define STAR * DtiClearScreen() { clear 1>&2 HASH DtiPrint "clear" } XCOMM ========================================================================== XCOMM XCOMM Log - echo to log XCOMM XCOMM Input XCOMM $1 - data to echo to log XCOMM Output - none XCOMM Return -none XCOMM ========================================================================== Log() { printf "$1" $2 $3 $4 $5 >> $LOG_FILE } XCOMM ========================================================================== XCOMM XCOMM DtiPrint - echo to stderr and log XCOMM XCOMM Input XCOMM $1 - data to echo to stdout XCOMM Output - none XCOMM Return -none XCOMM ========================================================================== DtiPrint() { printf "$1" $2 $3 $4 $5 $6 $7 $8 $9 >&2 Log "$1" $2 $3 $4 $5 $6 $7 $8 $9 } XCOMM ========================================================================== XCOMM XCOMM DtiShow - echo to stdout XCOMM XCOMM Input XCOMM $1 - data to echo to stdout XCOMM Output - none XCOMM Return -none XCOMM ========================================================================== DtiShow() { printf "$1" $2 $3 $4 $5 $6 $7 $8 $9 >&2 } XCOMM ========================================================================== XCOMM XCOMM DtiReturn - return a string to stdout XCOMM XCOMM Input XCOMM $1 - data to return XCOMM Output - none XCOMM Return -none XCOMM ========================================================================== DtiReturn() { echo "$1" } XCOMM ========================================================================== XCOMM XCOMM DtiWhoami XCOMM XCOMM Input - none XCOMM Output - none XCOMM Return XCOMM result of system 'whoami' command XCOMM XCOMM ========================================================================== DtiWhoami() { $WHOAMI_PATH/whoami } XCOMM ========================================================================== XCOMM XCOMM Exit - log and exit XCOMM XCOMM Input XCOMM $1 - data to echo to log XCOMM Output - none XCOMM Return -none XCOMM ========================================================================== Exit() { Log "\n==================================================================\n" Log "* $(date) $($WHOAMI_PATH/whoami)@$(hostname)*" Log "* $1*" Log "\n*exit_code = $2*" Log "\n==================================================================\n" exit $2 } XCOMM ========================================================================== XCOMM XCOMM GetPlatform XCOMM XCOMM Input - none XCOMM Output - none XCOMM Return XCOMM "hpux" XCOMM "aix" XCOMM "sun" XCOMM ========================================================================== GetPlatform() { if [ -z "$getPlatform" ]; then os=`uname -s` case $os in *HP-UX*) getPlatform=hp;; *AIX*) getPlatform=ibm;; *SunOS*) getPlatform=sun;; esac fi DtiReturn $getPlatform } XCOMM ========================================================================== XCOMM XCOMM ValidOS - Verify OS is valid to deinstall on XCOMM XCOMM Input - none XCOMM Output - Error message if invalid platform, will exit. XCOMM Return XCOMM "hpux" XCOMM "aix" XCOMM "sun" XCOMM ========================================================================== ValidOS() { platform=$(GetPlatform) case "$platform" in hp|ibm|sun) DtiReturn $platform ;; *) Exit $INVALID_OS_MSG 1 ;; esac } XCOMM ========================================================================== XCOMM XCOMM ResolvePathName XCOMM XCOMM Input - File Name to be resolved to actual file XCOMM Output - none XCOMM Return XCOMM Actual File Name resolved down to through all links XCOMM XCOMM ========================================================================== ResolvePathName() { if [ "/" = "$1" ]; then echo $1$2 elif [ -L $1 ]; then ResolvePathName `/bin/ls -l $1 | awk '{print $NF}'` $2 else ResolvePathName `dirname $1` `basename $1`${2+/}$2 fi } XCOMM ========================================================================== XCOMM XCOMM FileIsLink XCOMM XCOMM Input - File Name XCOMM Output - none XCOMM Return XCOMM TRUE, if file is a link XCOMM FALSE, if file is not a link XCOMM ========================================================================== FileIsLink() { if [[ -L $1 ]] && [[ -a $1 ]] then DtiReturn "TRUE" else DtiReturn "FALSE" fi } XCOMM ========================================================================== XCOMM XCOMM StateObjective - States the objective of the Script to the user XCOMM XCOMM Input - none XCOMM Output - none XCOMM XCOMM ========================================================================== StateObjective() { XCOMM Display information to the user, ask if user wishes to continue while : do DtiClearScreen DtiShow "$HERALD_MSG" DtiPrint "$OBJECTIVE_MSG" DtiPrint "$YESNO_MSG" read response Log "$RESPONSE_MSG" Log "$response" Log "\n" case $response in [yY]*) return 0 ;; [nN]*) exit 0 ;; *) continue esac done } XCOMM ========================================================================== XCOMM XCOMM DoFilesetScript - Runs a unconfiguration script in the post_install dirs XCOMM XCOMM Input - none XCOMM Output - none XCOMM XCOMM ========================================================================== DoFilesetScript() { FilesetName=$1 HASH HASH Check for the lowercase PLATFORM dir. If doesn't exist then HASH the tree is in uppercase. HASH if [ ! -f $TAR_TREE/dt.pkg ]; then typeset -u ScriptName fi if [ "$BUILD_TREE" = "" ] then ScriptName=$3 else ScriptName=$2 fi test_string=${DATABASE_FILES#*$FilesetName} if (( ${#DATABASE_FILES} > ${#test_string} )) then if [ -x $POST_INSTALL_DIR/$PLATFORM_SCRIPT_DIR/$ScriptName ] then DtiPrint "\n\nExecuting $PLATFORM specific $FilesetName unconfigure script...\n" $POST_INSTALL_DIR/$PLATFORM_SCRIPT_DIR/$ScriptName -d 2>&1 | \ tee -a $LOG_FILE elif [ -x $POST_INSTALL_DIR/$ScriptName ] then DtiPrint "\n\nExecuting $FilesetName unconfigure script...\n" $POST_INSTALL_DIR/$ScriptName -d 2>&1 | tee -a $LOG_FILE fi fi } XCOMM ========================================================================== XCOMM XCOMM RunUnconfigScripts - Runs relevant unconfiguration scripts, based on XCOMM fileset installed, calls DoFilesetScript XCOMM Input - none XCOMM Output - none XCOMM XCOMM ========================================================================== RunUnconfigScripts() { DtiPrint "\n\nRunning unconfigure scripts...\n" DoFilesetScript CDE-TT configTT tt.cfg DoFilesetScript CDE-MIN configMin min.cfg DoFilesetScript CDE-RUN configRun run.cfg DoFilesetScript CDE-HELP configHelp help.cfg DoFilesetScript CDE-HELP-PRG configHelpPrg helpprg.cfg DoFilesetScript CDE-HELP-RUN configHelpRun helprun.cfg DoFilesetScript CDE-SHLIBS configShlibs shlibs.cfg DoFilesetScript CDE-AB configAb ab.cfg DoFilesetScript CDE-DEMOS configDemos demos.cfg DoFilesetScript CDE-ICONS configIcons icons.cfg DoFilesetScript CDE-INC configInc inc.cfg DoFilesetScript CDE-MAN configMan man.cfg DoFilesetScript CDE-MAN-DEV configManDev mandev.cvg DoFilesetScript CDE-MSG-CAT configMsgCat msgcat.cfg DoFilesetScript CDE-PRG configPrg prg.cfg } XCOMM ========================================================================== XCOMM XCOMM ValidConfiguration - Checks to see if the desktop was installed or XCOMM partially installed on your system XCOMM XCOMM Input - none XCOMM Output - none XCOMM Return - TRUE, if valid configuration XCOMM FALSE, for no desktop was found on the system XCOMM XCOMM ========================================================================== ValidConfiguration() { if (( [[ -a $ABSOLUTE_USR_LOCATION ]] || [[ -a $DEFAULT_USR_LOCATION ]] ) && ( [[ -a $ABSOLUTE_ETC_LOCATION ]] || [[ -a $DEFAULT_ETC_LOCATION ]] ) && ( [[ -a $ABSOLUTE_VAR_LOCATION ]] || [[ -a $DEFAULT_VAR_LOCATION ]] )) then DtiReturn "TRUE" else STATUS="FALSE" for i in $ABSOLUTE_USR_LOCATION $ABSOLUTE_ETC_LOCATION \ $ABSLOUTE_VAR_LOCATION $DEFAULT_USR_LOCATION \ $DEFAULT_ETC_LOCATION $DEFAULT_VAR_LOCATION do if [ -a $i ] then STATUS="TRUE" break fi done DtiReturn "$STATUS" fi } XCOMM ========================================================================== XCOMM XCOMM DisplayDirs - Determines if directories should be presented XCOMM to the user to determin if they will be deleted or not. XCOMM XCOMM XCOMM Input - none XCOMM Output - none XCOMM Return - TRUE, if some directories will be deleted XCOMM FALSE, if NO directories will be deleted XCOMM XCOMM ========================================================================== DisplayDirs() { if [[ -d $ABSOLUTE_USR_LOCATION ]] && [[ -a $ABSOLUTE_USR_LOCATION ]] then DtiReturn "TRUE" elif [[ -d $ABSOLUTE_ETC_LOCATION ]] && [[ -a $ABSOLUTE_ETC_LOCATION ]] then DtiReturn "TRUE" elif [[ -d $ABSOLUTE_VAR_LOCATION ]] && [[ -a $ABSOLUTE_VAR_LOCATION ]] then DtiReturn "TRUE" else DtiReturn "FALSE" fi } XCOMM ========================================================================== XCOMM XCOMM DisplayDirs - Determines if links should be presented XCOMM to the user to determine if they will be deleted or not. XCOMM XCOMM XCOMM Input - none XCOMM Output - none XCOMM Return - TRUE, if some links will be deleted XCOMM FALSE, if NO links will be deleted XCOMM XCOMM ========================================================================== DisplayLinks() { if [[ -L $DEFAULT_USR_LOCATION ]] && [[ -a $DEFAULT_USR_LOCATION ]] then DtiReturn "TRUE" elif [[ -L $DEFAULT_ETC_LOCATION ]] && [[ -a $DEFAULT_ETC_LOCATION ]] then DtiReturn "TRUE" elif [[ -L $DEFAULT_VAR_LOCATION ]] && [[ -a $DEFAULT_VAR_LOCATION ]] then DtiReturn "TRUE" else DtiReturn "FALSE" fi } XCOMM ========================================================================== XCOMM XCOMM ShowDirsToBeDeleted - Shows what dirs and links will be deleted to the user XCOMM XCOMM Input - none XCOMM Output - none XCOMM XCOMM ========================================================================== ShowDirsToBeDeleted() { XCOMM Display information to the user, ask if user wishes to continue while : do DtiClearScreen DtiShow "$HERALD_MSG" if [ $(DisplayDirs) = "TRUE" ] then DtiPrint "$DELETE_DIRS_MSG" if [ -a $ABSOLUTE_USR_LOCATION ] then DtiPrint "$DIR_MSG" "$ABSOLUTE_USR_LOCATION" fi if [ -a $ABSOLUTE_ETC_LOCATION ] then DtiPrint "$DIR_MSG" "$ABSOLUTE_ETC_LOCATION" fi if [ -a $ABSOLUTE_VAR_LOCATION ] then DtiPrint "$DIR_MSG" "$ABSOLUTE_VAR_LOCATION" fi fi if [ $(DisplayLinks) = "TRUE" ] then DtiPrint "\n\n$DELETE_LINKS_MSG" if [ $(FileIsLink $DEFAULT_USR_LOCATION) = "TRUE" ] then DtiPrint "$LINK_DIR_MSG" "$DEFAULT_USR_LOCATION" fi if [ $(FileIsLink $DEFAULT_ETC_LOCATION) = "TRUE" ] then DtiPrint "$LINK_DIR_MSG" "$DEFAULT_ETC_LOCATION" fi if [ $(FileIsLink $DEFAULT_VAR_LOCATION) = "TRUE" ] then DtiPrint "$LINK_DIR_MSG" "$DEFAULT_VAR_LOCATION" fi fi DtiPrint "\n\n$WARNING_MSG" DtiPrint "\n\n\n$YESNO_MSG" read response Log "$RESPONSE_MSG" Log "$response" Log "\n" case $response in [yY]*) return 0 ;; [nN]*) exit 0 ;; *) continue esac done } XCOMM ========================================================================== XCOMM XCOMM StopDesktop - Stops the desktop if it was running XCOMM XCOMM Input - none XCOMM Output - none XCOMM XCOMM ========================================================================== StopDesktop() { if [ -f $ABSOLUTE_VAR_LOCATION/Xpid ] then DtiPrint "\n\nStopping Desktop... \n" kill -TERM `cat $ABSOLUTE_VAR_LOCATION/Xpid` 2> /dev/null fi } XCOMM ========================================================================== XCOMM XCOMM RemoveDesktop - Deletes Desktop files from the system XCOMM XCOMM Input - none XCOMM Output - none XCOMM XCOMM ========================================================================== RemoveDesktop () { DtiPrint "Removing files from Desktop Directories...\n" rm -rf $ABSOLUTE_USR_LOCATION rm -rf $ABSOLUTE_ETC_LOCATION rm -rf $ABSOLUTE_VAR_LOCATION rm -rf $DEFAULT_USR_LOCATION rm -rf $DEFAULT_ETC_LOCATION rm -rf $DEFAULT_VAR_LOCATION DtiPrint "The Desktop was successfully removed from your system.\n" } XCOMM ========================================================================== XCOMM XCOMM XCOMM This is the MAIN of the script XCOMM XCOMM XCOMM ========================================================================== XCOMM Set up Messages USAGE_MSG="\ Usage: deinstall.dt [-noprompt]\n" PERMISSION_MSG="\ You must be ROOT to run this command\n" RESPONSE_MSG="\n response is: " HERALD_MSG="\ The Common Open Systems Environment Desktop\n\ April 1994 Snapshot Deinstallation Procedure\n\n" OBJECTIVE_MSG="\ This procedure will REMOVE the Desktop from your system.\n\n\n" YESNO_MSG="\ Do you wish to continue? [y/n] " DELETE_DIRS_MSG="\ The deinstallation will remove files from the following\n\ directories listed below:\n\n" DIR_MSG="\ '%s'\n" DELETE_LINKS_MSG="\ The deinstallation will remove the following symbolic \n\ link(s) listed below:\n\n" LINK_DIR_MSG="\ '%s'\n" WARNING_MSG="\ Any customizations made will be LOST!\n" INVALID_OS_MSG="\ The Desktop does not support this system configuration.\n\ The deinstallation procedure will terminate.\n" INVALID_CONFIGURATION_MSG="\ The deinstallation procedure could not locate any Desktop files\n\ on your system. The deinstallation will terminate. Please check\n\ that you are running the deinstallation script on a system that\n\ has the Desktop already installed.\n" XCOMM Set up variables NO_PROMPT="FALSE" DEFAULT_USR_LOCATION="/usr/dt" DEFAULT_ETC_LOCATION="/etc/dt" DEFAULT_VAR_LOCATION="/var/dt" ABSOLUTE_USR_LOCATION=$(ResolvePathName $DEFAULT_USR_LOCATION) ABSOLUTE_ETC_LOCATION=$(ResolvePathName $DEFAULT_ETC_LOCATION) ABSOLUTE_VAR_LOCATION=$(ResolvePathName $DEFAULT_VAR_LOCATION) XCOMM Set up the log file LOG_FILE="/tmp/dinstall.dt.log" if [ -f $LOG_FILE ] then rm -rf $LOG_FILE 2>/dev/null fi touch $LOG_FILE 2>/dev/null chmod 777 $LOG_FILE 2>/dev/null XCOMM change directories to deinstall.dt location as all XCOMM installation packages are relative to this XCOMM if [ ${0%/STAR} != "dinstall.dt" ]; then cd ${0%/STAR} fi XCOMM set up the TOP directory of where the CD is mounted TOP=`pwd` XCOMM set up the path for whoami command WHOAMI_PATH=/bin platform=$(GetPlatform) case "$platform" in hp) WHOAMI_PATH=/usr/bin ;; ibm) WHOAMI_PATH=/bin ;; sun) WHOAMI_PATH=/usr/ucb ;; esac DTIDINSTALLDT=dinstall.dt DTICONFIGDIR=config dtiPlatform=$(GetPlatform) DTIPLATFORMDIR=$dtiPlatform DTIREADME=config/config.$dtiPlatform if [ ${0##STAR/} != $DTIDINSTALLDT ]; then HASH HASH CDROM driver folds filenames to uppercase HASH typeset -u DTIDINSTALLDT typeset -u DTICONFIGDIR typeset -u DTIPLATFORMDIR typeset -u DTIREADME fi XCOMM Parse the command line while [ $# -ne 0 ]; do case $1 in -noprompt) NO_PROMPT=TRUE print "NO_PROMPT is set" shift ;; *) print "$USAGE_MSG" DtiPrint $USAGE exit 1;; esac done XCOMM Verify that we have the Root User if [ $(DtiWhoami) != "root" ] then DtiShow "$PERMISSION_MSG" Exit "$PERMISSION_MSG" 1 fi XCOMM Check to see if the Desktop is actually installed on the system if [ $(ValidConfiguration ) != "TRUE" ] then DtiPrint "$INVALID_CONFIGURATION_MSG" exit 1 fi XCOMM Determine if the OS is supported PLATFORM=$(ValidOS) XCOMM XCOMM Initially PLATFORM is in lower case. XCOMM Check if the $PLATFORM directory exists. XCOMM if doesn't exist translate all to upper case. XCOMM if [ -d $PLATFORM ] then TAR_TREE=$TOP/$PLATFORM POST_INSTALL_DIR=$TAR_TREE/config DATABASE_FILES=$(awk 'BEGIN {FS=":"} /FILESETS: /{print $2}' $TAR_TREE/dt.pkg 2>/dev/null) else PLATFORM=`echo "$PLATFORM" | /usr/bin/tr "[a-z]" "[A-Z]"` TAR_TREE=$TOP/$PLATFORM POST_INSTALL_DIR=$TAR_TREE/CONFIG DATABASE_FILES=$(awk 'BEGIN {FS=":"} /FILESETS: /{print $2}' $TAR_TREE/DT.PKG 2>/dev/null) fi XCOMM Tell the user what is going to happen if [ $NO_PROMPT = FALSE ] then StateObjective fi XCOMM Show the user what directories are going to be deleted if [ $NO_PROMPT = FALSE ] then ShowDirsToBeDeleted fi XCOMM Stop the Desktop StopDesktop XCOMM Run the Unconfigure Scripts RunUnconfigScripts XCOMM Remove the Desktop Files RemoveDesktop