Posted on 02-26-2024 01:42 PM
Hello guys, I have an IBM ACS software which I need to package and show in Self service. This app doesn't have a regular dmg or an installer. It installs via a script:
Once the script runs, it puts the app in the Applications folder:
This is what the script does:
#!/bin/bash
# Description:
# This script will install IBM i Access Client Solutions in the Applications folder on Mac OS X
#
# Usage: ./install_acs
#
args=$@
args_length=$#
arg1=$1
prefix_arg1=${arg1:0:9}
suffix_arg1=${arg1:9}
printhelp="no"
default_noparms="no"
reset_start_over="no"
quiet_mode="no"
exclude_functions="no"
install_type_shared="no"
install_type_preset="no"
declare source
declare target
declare old_target
declare source_AcsConfig
declare target_AcsConfig
declare old_target_AcsConfig
function copyProductFiles {
echo "Copying product files" >> $HOME/IBM/install_acs_log.txt
#Remove the old app so we don't leave cruft laying around.
rm -rf "/Applications/IBM i Access Client Solutions.app/Contents"
rm -rf "/Applications/IBM i Access Client Solutions.app/Mac_Application"
rm -rf "/Applications/IBM i Access Client Solutions.app/Icons"
rm -rf "/Applications/IBM i Access Client Solutions.app/Documentation"
rm -rf "/Applications/IBM i Access Client Solutions.app/Start_Programs"
rm -rf "/Applications/IBM i Access Client Solutions.app/Fonts"
rm -rf "/Applications/IBM i Access Client Solutions.app/acsbundle.jar"
unzip -oq acs_mac_app.zip -d /Applications
cp -Rpf "$source/Documentation" "$target"
cp -Rpf "$source/Fonts" "$target"
cp -Rpf "$source/Icons" "$target"
# Do not copy the install scripts
cp -Rpf "$source/Mac_Application" "$target"
#cp -Rpf "$source/Linux_Application" "$target"
#cp -Rpf "$source/Windows_Application" "$target"
cp -Rpf "$source/Start_Programs" "$target"
cp -Rpf "$source/acsbundle.jar" "$target"
if [ -e "$source/acs_bak.zip" ]; then
cp -Rpf "$source/acs_bak.zip" "$target"
fi
if [ "yes" == $1 ]; then
# The p in the following command sometimes causes the following message:
# "cp: chflags: /Application/IBM i Access Client Solutions.app/AcsConfig.properties: Operation not permitted"
# The message only seems to occur when copying an unmodified AcsConfig.properties file from a remote source location.
# However, all testing indicates the file does get copied along with the timestamp from the source location.
# If we remove the p, then the timestamp is not taken from the source file and gets changed to be current time.
# The message can be safely ignored.
cp -Rpf "$source_AcsConfig" "$target"
echo "Copied AcsConfig.properties" >> $HOME/IBM/install_acs_log.txt
else
echo "Did not copy AcsConfig.properties" >> $HOME/IBM/install_acs_log.txt
fi
}
function customize_local_install {
echo "Customizing local installation" >> $HOME/IBM/install_acs_log.txt
copyProductFiles yes
exclude_functions=`osascript user_dialog.scpt`
# keep track of length returned so we can see if we stripped sub_string
exclude_length_before=${#exclude_functions}
# remove the answer we got for whether we should restrict the printer filter
sub_string='splf_restrict,'
exclude_functions=${exclude_functions%$sub_string*}
exclude_length=${#exclude_functions}
exclude_length=${#exclude_functions}
if [ $exclude_length -eq 0 ]; then
echo "Wrote AcsConfig.properties with no functions excluded" >> $HOME/IBM/install_acs_log.txt
else
echo " " >> "$target_AcsConfig"
echo "# ——— $str_date ——— " >> "$target_AcsConfig"
echo "com.ibm.iaccess.ExcludeComps=$exclude_functions" >> "$target_AcsConfig"
echo "Wrote AcsConfig.properties and excluded: $exclude_functions" >> $HOME/IBM/install_acs_log.txt
fi
# See if we are suppose to set the RestrictFilter property
if [ $exclude_length_before -ne $exclude_length ]; then
echo " " >> "$target_AcsConfig"
echo "# ——— $str_date ——— " >> "$target_AcsConfig"
echo "com.ibm.iaccess.splf.FilterRestricted=true" >> "$target_AcsConfig"
echo "Wrote AcsConfig.properties com.ibm.iaccess.splf.FilterRestricted=true" >> $HOME/IBM/install_acs_log.txt
fi
}
# Begin Main
#
# Verify parameters
if [ $args_length -gt 1 ]; then
return_value=`osascript help_text.scpt`
exit
fi
if [ $args_length -eq 1 ]; then
if [[ ($prefix_arg1 != /Exclude=) && ($prefix_arg1 != /exclude=) && ($arg1 != /Reset) && ($arg1 != /reset) && ($arg1 != /Q) && ($arg1 != /q) ]]; then
return_value=`osascript help_text.scpt`
exit
fi
fi
#Create the IBM directory for the install log
if [ ! -d $HOME/IBM ]; then
mkdir $HOME/IBM
fi
str_date=`date`
echo "BEGIN =============== $str_date =============== BEGIN" >> $HOME/IBM/install_acs_log.txt
if [ $args_length -eq 0 ]; then
default_noparms="yes"
echo "No args specified" >> $HOME/IBM/install_acs_log.txt
else
echo "Command-line args: $args" >> $HOME/IBM/install_acs_log.txt
if [[ ($prefix_arg1 == /Exclude=) || ($prefix_arg1 == /exclude=) ]]; then
check=${#suffix_arg1}
if [ $check -gt 0 ]; then
exclude_functions=$suffix_arg1
else
default_noparms="yes"
fi
elif [[ ($arg1 == /Reset) || ($arg1 == /reset) ]]; then
reset_start_over="yes"
elif [[ ($arg1 == /Q) || ($arg1 == /q) ]]; then
quiet_mode="yes"
default_noparms="yes"
else
dummy=do_nothing
fi
fi
#The following two directories are needed for using acslaunch_mac when JDK6 is not installed
#However, we are not allowed to create them starting with OS X 10.11 El Capitan. If users
#want to use acslaunch_mac on El Capitan, they will need to install JDK6.
#dir1=/System/Library/Java/JavaVirtualMachines/1.6.0.jdk
#dir2=/System/Library/Java/Support/Deploy.bundle
#swversion=`sw_vers | grep "ProductVersion" | awk -F . '{print $2}'`
#if [ $swversion -lt 11 ]; then
# if [ ! -d $dir1 ]; then
# sudo mkdir -p $dir1
# fi
# if [ ! -d $dir2 ]; then
# sudo mkdir -p $dir2
# fi
#fi
# cd to the directory where this script exists
cd "$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
echo "script: ${0}" >> $HOME/IBM/install_acs_log.txt
source=`pwd`/..
old_target="/Applications/IBM i Access Client Solutions.app"
target="/usr/local/ibmiaccess"
#The target directory is where we need to put acsbundle.jar, AcsConfig.properties and Icons.
#The Mac application bundle cannot be modified since the Mac Gatekeeper will complain about that.
#Need to change owner to current user so other copies can be done w/o sudo AND so auto-update from ACS works
if [ ! -d $target ]; then
sudo mkdir -p $target
sudo chown $USER $target
fi
echo "source: $source" >> $HOME/IBM/install_acs_log.txt
echo "InstallPath: $target" >> $HOME/IBM/install_acs_log.txt
source_AcsConfig="$source/AcsConfig.properties"
target_AcsConfig="$target/AcsConfig.properties"
#Move an existing AcsConfig.properties from old to new location so we keep any customization.
old_target_AcsConfig="$old_target/AcsConfig.properties"
if [ -e "$old_target_AcsConfig" ]; then
mv "$old_target_AcsConfig" "$target_AcsConfig"
fi
# check for install_type_shared or install_type_preset
if [ -e "$source_AcsConfig" ]; then
count=`grep -c "com.ibm.iaccess.InstallType=shared" "$source_AcsConfig"`
if [ $count -gt 0 ]; then
echo "com.ibm.iaccess.InstallType=shared was found" >> $HOME/IBM/install_acs_log.txt
install_type_share="yes"
echo "install_type_share is treated like install_type_preset on Mac" >> $HOME/IBM/install_acs_log.txt
install_type_preset="yes"
fi
count=`grep -c "com.ibm.iaccess.InstallType=preset" "$source_AcsConfig"`
if [ $count -gt 0 ]; then
echo "com.ibm.iaccess.InstallType=preset was found" >> $HOME/IBM/install_acs_log.txt
install_type_preset="yes"
fi
fi
if [ "yes" == $install_type_preset ]; then
echo "Install: preset functions by AdminConfig" >> $HOME/IBM/install_acs_log.txt
if [ "no" == $default_noparms ]; then
echo "$args ignored because Admin preset product functions" >> $HOME/IBM/install_acs_log.txt
fi
copyProductFiles yes
echo "Install: Copied product files and configuration set by admin" >> $HOME/IBM/install_acs_log.txt
elif [ "yes" == $default_noparms ]; then
if [ -e "$target_AcsConfig" ]; then
# This is assumed to be the upgrade path
echo "Upgrading existing installation" >> $HOME/IBM/install_acs_log.txt
copyProductFiles no
echo "Install: Did not write AcsConfig.properties" >> $HOME/IBM/install_acs_log.txt
else
# AcsConfig.properties does not exist at target. We assume never been installed.
customize_local_install
fi
elif [ "no" != $exclude_functions ]; then
# Excluded functions were specified
if [ -e "$target_AcsConfig" ]; then
# Do not overlay AcsConfig.properties
copyProductFiles no
else
copyProductFiles yes
fi
echo " " >> "$target_AcsConfig"
echo "# ——— $str_date ———" >> "$target_AcsConfig"
echo "com.ibm.iaccess.ExcludeComps=$exclude_functions" >> "$target_AcsConfig"
echo "Excluded functions: $exclude_functions" >> $HOME/IBM/install_acs_log.txt
elif [ "yes" == $reset_start_over ]; then
echo "User requested a configuration reset" >> $HOME/IBM/install_acs_log.txt
customize_local_install
fi
echo " "
echo " Installation completed."
echo " You may exit this terminal window."
echo " "
echo "END ================= `date` ================= END" >> $HOME/IBM/install_acs_log.txt
if [ "no" == $quiet_mode ]; then
return_value=`osascript completion_text.scpt`
fi
How can I package this app using Jamf composer and put it in Self Service?
Solved! Go to Solution.
Posted on 02-26-2024 01:57 PM
crumbs.. thats some 'installer', dump it all to /tmp with composer and run the script..
Posted on 02-26-2024 01:57 PM
crumbs.. thats some 'installer', dump it all to /tmp with composer and run the script..
Posted on 02-26-2024 02:39 PM
So you're saying that put the contents of the IBM iSeries ACS folder in /temp and run the installer script? And then what do I do with composer?
Posted on 02-29-2024 06:28 AM
figured it out