#!/bin/sh
RPM_INSTALL_PREFIX=
export RPM_INSTALL_PREFIX

CS=`rpm -qa | grep OB2-CS`
IS=`rpm -qa | grep OB2-CORE-IS`

if [ "$CS" = "" -a "$IS" = "" ]; then
   echo "Patches can only be installed on Cell Server and Installation Server"
   exit 1
fi

check_diskspace() # Checks required disk space
{
        #Assuming 200 MB, maximum size of any patch
        RPM_SIZE=200000
        AVBL_SPACE=`df -k -P $VAR | grep dev | tr -s " " | awk '{print $4}'`
        REQD_SPACE=`expr $RPM_SIZE \* 2`
        if [ $AVBL_SPACE -gt $REQD_SPACE ]; then
                return
        else
                echo "  ERROR: There is not enough space in the "${VAR}" directory."
                echo "  The patch requires ${REQD_SPACE}kb in this directory for backup"
                echo "  and installing the patch. Please free up necessory disk space."
                exit 1

        fi

}

take_backup() # Backup
{
       # Check if this is first patch for this component
       RPMENTRY=`rpm -qa | grep "$PACKET"`

       if [ "$RPMENTRY" != "" ]; then
             return
       else
             echo "     Backing up MR files "
       fi

       rm -rf $BACKUP_DIR/*
       rm -rf $TEMP_DIR/*

       FILE_NAME=`echo "$TEMP_DIR/files_$PACKET_NAME"`

       if [ "$PACKET_NAME" = "CORE" ]; then
            rpm -ql OB2-CORE-IS-A.06.11-1 > $FILE_NAME
            rpm -ql OB2-INTEGP-A.06.11-1 >> $FILE_NAME
       elif [ "$PACKET_NAME" = "DA" ]; then
            rpm -ql OB2-LINUXP-A.06.11-1 | grep da\/ > $FILE_NAME
            rpm -ql OB2-OTHUXP-A.06.11-1 | grep da\/ >> $FILE_NAME
       elif [ "$PACKET_NAME" = "MA" ]; then
            rpm -ql OB2-LINUXP-A.06.11-1 | grep ma > $FILE_NAME
            rpm -ql OB2-OTHUXP-A.06.11-1 | grep ma >> $FILE_NAME
            rpm -ql OB2-NDMPP-A.06.11-1 >> $FILE_NAME
       elif [ "$PACKET_NAME" = "CC" ]; then
            rpm -ql OB2-LINUXP-A.06.11-1 | grep cc > $FILE_NAME
            rpm -ql OB2-OTHUXP-A.06.11-1 | grep cc >> $FILE_NAME
       else
            FILESET=`echo "OB2-$PACKET_NAME"`
            FILESET_COMP=`rpm -qa | grep $FILESET`

            rpm -ql $FILESET_COMP > $FILE_NAME
       fi
       #This file is not part of MR fileset and is created dynamically
       echo "/etc/opt/omni/server/install/.patch_$PACKET_NAME" >> $FILE_NAME

        if [ -f $FILE_NAME ]; then
                cat $FILE_NAME  | cpio -padVL  --no-preserve-owner $BACKUP_DIR > /dev/null 2>&1
                RETCODE=$?
                if [ $RETCODE -ne 0 ]; then
                        echo "  ERROR : Cannot complete storing files !!! "
                        if [ $RETCODE -eq 28 ]; then
                            echo " ERROR : Insufficient disk space to create backup !!! "
                        fi
                        exit 1
                fi

                clean_files
        fi

        rm -rf $FILE_NAME

    return
}

clean_files() # cleans all temp files
{
    `rm -rf $TEMP_DIR/*`
}

BACKUP_DIR=/var/opt/omni/repackage
VAR=$BACKUP_DIR
TEMP_DIR=/tmp/omni_tmp
REQD_DBENTRY=OB2-CORE-A.06.11-1
PATCH_NAME=DPLNX_00114.rpm
PATCH_VERSION=CORE_Patch-A.06.11-2
DB_ENTRY=
PACKET_NAME=

#Check for ROOT user
if [ "$USER" != "root" ]; then
     echo "  Please login as root to execute "
     exit 1
fi

#Check for DP installation
DP_CHECK=`rpm -qa | grep $REQD_DBENTRY | cut -c 1-${#REQD_DBENTRY}`
if [ "$DP_CHECK" != "$REQD_DBENTRY" ]; then
     echo "Data Protector Not Installed !!!"
     exit 1
fi

mkdir -p $BACKUP_DIR $TEMP_DIR

PACKET=`echo $PATCH_VERSION | cut -d"-" -f1`                       # CS_Patch, CORE_Patch, CC_Patch
PACKET_NAME=`echo $PACKET | cut -d"_" -f1`
BACKUP_DIR=$BACKUP_DIR/$PACKET
DP_VERSION=`echo $PATCH_VERSION | cut -d"-" -f2`                   # A.06.11
PACKET=`echo "$PACKET-$DP_VERSION"`                                # 1,2,3....
CURRENT_VERSION=`echo $PATCH_VERSION | cut -d"-" -f3`              # 1,2,3....

DB_ENTRY=`rpm -qa | grep $PACKET`

# check if lower level or same version of the patch is being installed

if [ "$DB_ENTRY" != "" ]; then

        INSTALLED_VERSION=`echo $DB_ENTRY | cut -d"-" -f3`

        if [ $INSTALLED_VERSION -gt $CURRENT_VERSION ]; then
             INSTALLED_PATCH=`rpm -qi $DB_ENTRY | grep DPLNX |tr -s " " | awk '{print $NF}'` 
             echo "Please uninstalled the patch $INSTALLED_PATCH to"
             echo "install the current patch"
             exit 1
        fi

        if [ $INSTALLED_VERSION -eq $CURRENT_VERSION ]; then
             INSTALLED_PATCH=`rpm -qi $DB_ENTRY | grep DPLNX |tr -s " " | awk '{print $NF}'`
             echo "$INSTALLED_PATCH is already installed"
             exit 1
        fi
fi

check_diskspace

take_backup