So I am very rusty at scripting, and I am tasked with pushing Mcafee Endpoint Protection 2.1.0 to our Mac systems using Casper.
So I have the default installation script the McAfee administrator gave us, but the script requires user input in order to function (need to type "-i" for a fresh install).
How can I edit the script so it defaults this this option automatically and starts the install?
Heres the install script I am working with:
#!/bin/sh
###getopt for command line arguments.
###Handle the following
### -i install, rpm ivh
### -u upgrade, rpm Uvh )
### -b upgrade but no server info
### -c cloud config path (option for internal usage in bootstrap)
### -h help
PATH=/usr/bin:/bin
umask 022
NATIVE_INSTALLER_FILE=MFEcma.dmg #NATIVE_INSTALL_PACKAGE_NAME_HERE
command=$0
install=
upgrade=
extract=
directory=
unzip_exe_size=104088
cloud=
usage()
{
echo "Usage: $command [-i|-u|-b|-h ]"
echo "-i : fresh install "
echo "-u : upgrade install"
echo "-b :Upgrade Agent only , no server info will be updated"
echo "-h : show this help"
echo ""
}
user=id | cut -d'=' -f2 | cut -d( -f1
if [ $user -ne 0 ]; then
echo "This package needs root authentication to install."
exit 1
fi
###BZ 392336 Bail out if NWA exists
if [ -d /Library/NETAepoagt ];then
echo "Detected presence of previous agent in /Library/NETAepoagt. Installation cannot continue."
exit 1
fi
###Validation: No args, go away
if [ $# -eq 0 ]; then
usage
exit 1
fi
updateserverinfo="yes"
##First get the options
while getopts e:ic:ubh: opt
do case "$opt" in
i) install="yes";;
c) cloud="$OPTARG";;
u) upgrade="yes";;
b) upgrade="yes";;
h) usage
exit 0;;
[?]) usage
exit 1;;
esac
value=expr $OPTIND - 1
done
shift $value
returncode=0
keydata_dir=/Library/McAfee/cma/scratch/keydata
###Cannot have install and upgrade together
if [ ! -z "$install" ] && [ ! -z "$upgrade" ];then
echo You cannot specify install and upgrade at the same time
usage
exit 1
fi
##Cannot have "neither install, nor upgrade"
if [ -z "$install" ] && [ -z "$upgrade" ];then
echo "Neither install nor upgrade has been specified in the options"
usage
exit 1
fi
if [ -e /Volumes/MFECMA ];then
echo /Volumes/MFECMA already exists.The agent disk image cannot be mounted
echo Please move or rename /Volumes/MFECMA and then rerun this setup
exit 1
fi
###Okay, now that everything has been checked, its time to get going
##First we need to extract everything to a temp location,
##and then unzip it to the final destination
if [ ! -z "$cloud" ];then
#For Agent installation through bootstrap.
echo "Agent installation through bootstrap."
if [ ! -d "$cloud" ];then
echo "Cloud config path doesn't exist($cloud)."
exit 1
else
directory="$cloud"
temp_directory="$cloud"
fi
else
#For On-Prem install
temp_directory=mktemp -d mfeXXXXXX
if [ -f /etc/cma.d/bootstrap.xml ];then
rm -rf /etc/cma.d/bootstrap.xml
fi
if [ -z "$directory" ];then directory=$temp_directory fi
if [ -f "$directory" ];then echo Output destination specified is a file which laready exists. Cannot overwrite rm -rf "$temp_directory" exit 1 fi
if [ ! -e "$directory" ];then
mkdir -p "$directory"
fi
fi
if [ -e "$temp_directory" ] ;then
###installer has checks for disk space, and so I wont bother about it.
###unzip will also complain is there isnt enough space for the extracted file
###So, all I care about is to have enough space for the zip itself.
###Since the zip is appended to this file itself, it would never be larger that
###this sfx itself.So havin enough space in $temp_dir to hold the sfx is good enough
if [ -z "$cloud" ];then
required_space=stat -f %z "$command"
required_space=expr $required_space 2
echo space required to copy archive is $required_space bytes
available_space=df -k $temp_directory | tail -n -1 | awk '{if ( $4 ~ /%/) { print $3 } else { print $4 } }'
#convert the kb to bytes
available_space=expr $available_space 1024
echo space available at $temp_directory is $available_space bytes
if [ $required_space -gt $available_space ];then
echo Not enough space to extract contents
rm -rf $temp_directory
exit 1
fi
echo "extracting archive to $directory... please wait"
SKIP=awk '/^ARCHIVE_FOLLOWS/ { print NR + 1; exit 0; }' "$0"
# take the archive portion of this file and pipe it to unzip tail +$SKIP "$command" > "$temp_directory"/payload
block_size=512
nblocks=expr $unzip_exe_size / $block_size
remainder=expr $unzip_exe_size % $block_size
if [ 0 != $remainder ];then
nblocks=expr $nblocks + 1
fi
dd if="$temp_directory"/payload of="$temp_directory"/unz bs=$block_size count=$nblocks
dd if="$temp_directory"/payload of="$temp_directory"/package.zip bs=$block_size skip=$nblocks
chmod +x "$temp_directory"/unz
# /bin/sh "$temp_directory"/unz -j -o $"$temp_directory"/package.zip -d "$directory"
unzip -j -o $"$temp_directory"/package.zip -d "$directory"
rm -rf "$temp_directory"/package.zip
rm -rf "$temp_directory"/unz
fi
if [ -n "$install" ] || [ -n "$upgrade" ];then
if [ "$updateserverinfo" = "yes" ] ; then
mkdir -p "$keydata_dir"
returncode=$?
if [ $returncode -ne 0 ] ; then
echo "Failed to create keydata directory.exiting"
exit 1
fi
cp -f "$directory"/sitelist.xml "$keydata_dir"/SiteList.xml
cp -f "$directory"/srpubkey.bin "$keydata_dir"
cp -f "$directory"/reqseckey.bin "$keydata_dir"
cp -f "$directory"/sr2048pubkey.bin "$keydata_dir"
cp -f "$directory"/req2048seckey.bin "$keydata_dir"
cp -f "$directory"/agentfipsmode "$keydata_dir"/agentfipsmode
cp -f "$directory"/RepoKeys.ini "$keydata_dir"/RepoKeys.ini
if [ ! -f "$keydata_dir"/SiteList.xml ] || [ ! -f "$keydata_dir"/srpubkey.bin ] || [ ! -f "$keydata_dir"/reqseckey.bin ] || [ ! -f "$keydata_dir"/sr2048pubkey.bin ] || [ ! -f "$keydata_dir"/req2048seckey.bin ];then
echo "Could not find key data files. Installation cannot continue"
rm -rf "$keydata_dir"
exit 1
fi
fi
fi
hdiutil attach "$directory/MFEcma.dmg"
fi
####Now do the actual install/ upgrade stuff
####The actual operations for copying the reqseckey and other files should already be there in the installer
returncode=0
if [ -z "$extract" ];then
mypwd=pwd
cd "/Volumes/MFECMA"
echo "IsLegacyEPO:N" > /etc/mainstall.config
echo "ConfigDirPath:/Volumes/MFECMA" >> /etc/mainstall.config
echo "StartService:Y" >> /etc/mainstall.config
flag=1
pltvrsn=/usr/bin/sw_vers | grep ProductVersion | cut -d: -f2
majvrsn=echo $pltvrsn | cut -d. -f1
minvrsn=echo $pltvrsn | cut -d. -f2
if [ -f /Library/McAfee/cma/bin/msaconfig ];then
flag=0;
fi
if (($majvrsn>=10 && $minvrsn>=6 && $flag)); then
sudo /usr/sbin/pkgutil --forget comp.nai.cmamac > /dev/null 2>&1
fi
sudo /usr/sbin/installer -pkg cma.pkg -target "/"
returncode=$?
sleep 5
cd "$mypwd"
hdiutil detach /Volumes/MFECMA
rm -rf /etc/mainstall.config
else
hdiutil detach /Volumes/MFECMA
fi
if [ -z "$cloud" ];then
rm -rf "$temp_directory"
fi
if [ $returncode -ne 0 ];then
rm -rf "$keydata_dir"
exit 1
fi
if [ -d "$keydata_dir" ] ; then
rm -rf "$keydata_dir"
fi
exit 0
##DO NOT PUT ANYTHING AFTER ARCHIVE_FOLLOWS UNDER ANY CIRCUMSTANCE (NOT EVEN WHITESPACE).
##DOING SO WILL RENDER THE SCRIPT UNUSABLE
###SUCCESSFUL extraction from the zip depends on it

