# set temporary directory␊ |
chamTemp="$dest_vol/usr/local/chamTemp"␊ |
␊ |
# Check for stopped installation due to Chameleon␊ |
# already existing on the same disk.␊ |
# TO DO - This check can be removed as it's no longer used!!␊ |
if [ ! -f "$dest_vol"/.ChameleonExists ]; then␊ |
# ---------------------------------------------␊ |
# Build org.chameleon.Boot.plist␊ |
# ---------------------------------------------␊ |
# All options selected are now dummy files with␊ |
# the filename of the option and value residing␊ |
# in /usr/local/chamTemp/options/␊ |
# for example. Boot Banner=Yes␊ |
␊ |
# ---------------------------------------------␊ |
# Add any installed modules to the Install Log␊ |
# ---------------------------------------------␊ |
if [ -e "${chamTemp}"/Extra/modules ]; then␊ |
ls "${chamTemp}"/Extra/modules | while read FILE␊ |
do␊ |
"$scriptDir"InstallLog.sh "${dest_vol}" "Added module: $FILE"␊ |
done␊ |
fi␊ |
# Are there any options to build?␊ |
if [ "$(ls -A ${chamTemp}/options )" ]; then␊ |
␊ |
# ---------------------------------------------␊ |
# Add any installed themes to the Install Log␊ |
# ---------------------------------------------␊ |
if [ -e "${chamTemp}"/Extra/Themes ]; then␊ |
ls "${chamTemp}"/Extra/Themes | while read FILE␊ |
do␊ |
"$scriptDir"InstallLog.sh "${dest_vol}" "Added Theme: $FILE"␊ |
done␊ |
# Check for temporary directory/Extra folder.␊ |
if [ ! -d "$chamTemp"/Extra ]; then␊ |
mkdir "$chamTemp"/Extra␊ |
fi␊ |
␊ |
# ---------------------------------------------␊ |
# Build org.chameleon.Boot.plist␊ |
# ---------------------------------------------␊ |
# All options selected are now dummy files with␊ |
# the filename of the option and value residing␊ |
# in /usr/local/chamTemp/options/␊ |
# for example. Boot Banner=Yes␊ |
tempOCBP="$chamTemp"/Extra/org.chameleon.Boot.plist␊ |
␊ |
# Are there any options to build?␊ |
if [ "$(ls -A ${chamTemp}/options )" ]; then␊ |
# Create template for org.chameleon.Boot.plist"␊ |
tempOCBP="$chamTemp"/Extra/org.chameleon.Boot.plist␊ |
cp "$4"/Library/Preferences/SystemConfiguration/com.apple.Boot.plist "$tempOCBP"␊ |
␊ |
# Check for temporary directory/Extra folder.␊ |
if [ ! -d "$chamTemp"/Extra ]; then␊ |
mkdir "$chamTemp"/Extra␊ |
fi␊ |
# Read list of all boot options the user added.␊ |
arrayCount=0␊ |
kernelFlagCount=0␊ |
while read FILE␊ |
do␊ |
options[arrayCount]="${FILE##*/}"␊ |
␊ |
tempOCBP="$chamTemp"/Extra/org.chameleon.Boot.plist␊ |
␊ |
# Create template for org.chameleon.Boot.plist"␊ |
tempOCBP="$chamTemp"/Extra/org.chameleon.Boot.plist␊ |
cp "$4"/Library/Preferences/SystemConfiguration/com.apple.Boot.plist "$tempOCBP"␊ |
␊ |
# Read list of all boot options the user added.␊ |
arrayCount=0␊ |
kernelFlagCount=0␊ |
while read FILE␊ |
do␊ |
options[arrayCount]="${FILE##*/}"␊ |
␊ |
# Check keyRead for 'KF' at beginning to␊ |
# indicate that should be a kernel flag␊ |
if [ ${options[arrayCount]:0:2} = "KF" ];then␊ |
# plistbuddy only add's if the key doesn't already exist.␊ |
# So let's store any kernelflags and add them all at the␊ |
# same time once when we reach the end of the options list.␊ |
kernelflag[kernelFlagCount]="${options[arrayCount]##*flag=}"␊ |
"$scriptDir"InstallLog.sh "${dest_vol}" "Added kernel flag: ${kernelflag[kernelFlagCount]}"␊ |
(( kernelFlagCount++ ))␊ |
else␊ |
keyRead="${options[$arrayCount]%=*}"␊ |
value="${options[$arrayCount]#*=}"␊ |
# escape any spaces␊ |
keyToUse=$( echo $keyRead | sed 's/ /\\ /g' )␊ |
if [ "${keyToUse}" != "DONT" ] && [ "${value}" != "ADD" ]; then␊ |
sudo /usr/libexec/plistbuddy -c "Add :${keyToUse} string ${value}" "$tempOCBP"␊ |
returnValue=$?␊ |
if [ ${returnValue} -ne 1 ]; then␊ |
"$scriptDir"InstallLog.sh "${dest_vol}" "Added boot option: ${keyRead}=${value}"␊ |
else␊ |
"$scriptDir"InstallLog.sh "${dest_vol}" "Can't add ${keyRead}=${value} as an option already exists for: ${keyRead}"␊ |
fi␊ |
# Check keyRead for 'KF' at beginning to␊ |
# indicate that should be a kernel flag␊ |
if [ ${options[arrayCount]:0:2} = "KF" ];then␊ |
# plistbuddy only add's if the key doesn't already exist.␊ |
# So let's store any kernelflags and add them all at the␊ |
# same time once when we reach the end of the options list.␊ |
kernelflag[kernelFlagCount]="${options[arrayCount]##*flag=}"␊ |
"$scriptDir"InstallLog.sh "${dest_vol}" "Added kernel flag: ${kernelflag[kernelFlagCount]}"␊ |
(( kernelFlagCount++ ))␊ |
else␊ |
keyRead="${options[$arrayCount]%=*}"␊ |
value="${options[$arrayCount]#*=}"␊ |
# escape any spaces␊ |
keyToUse=$( echo $keyRead | sed 's/ /\\ /g' )␊ |
if [ "${keyToUse}" != "DONT" ] && [ "${value}" != "ADD" ]; then␊ |
sudo /usr/libexec/plistbuddy -c "Add :${keyToUse} string ${value}" "$tempOCBP"␊ |
returnValue=$?␊ |
if [ ${returnValue} -ne 1 ]; then␊ |
"$scriptDir"InstallLog.sh "${dest_vol}" "Added boot option: ${keyRead}=${value}"␊ |
else␊ |
"$scriptDir"InstallLog.sh "${dest_vol}" "Can't add ${keyRead}=${value} as an option already exists for: ${keyRead}"␊ |
fi␊ |
fi␊ |
(( arrayCount++ ))␊ |
done < <(ls "${chamTemp}"/options )␊ |
␊ |
# If exclusive options were used and the 'None' option was chosen,␊ |
# then a dummy file named DONT=ADD would be in /$chamTemp/Extra/options.␊ |
# If that was the only option then the above code would have made a␊ |
# temporary Extra folder with a default org.chameleon.Boot.plist␊ |
# In this case we don't need it and should discard it otherwise the folder␊ |
# will be copied to the users / directory when it's not wanted.␊ |
if [ ${arrayCount} == 1 ] && [ "${keyToUse}" == "DONT" ] && [ "${value}" == "ADD" ]; then␊ |
if [ -e "${chamTemp}"/Extra ] && [ ! -e "${chamTemp}"/Extra/Themes ] && [ ! -e "${chamTemp}"/Extra/Modules ]; then␊ |
rm -r -f "$chamTemp"/Extra␊ |
fi␊ |
fi␊ |
(( arrayCount++ ))␊ |
done < <(ls "${chamTemp}"/options )␊ |
␊ |
if [ $kernelFlagCount -gt 0 ]; then␊ |
# Add any kernel flags together in to one string.␊ |
for (( i=0 ; i < $kernelFlagCount ; i++ ))␊ |
do␊ |
kernelFlagString="${kernelFlagString} ${kernelflag[i]}"␊ |
done␊ |
# We add the final string in the next section.␊ |
fi␊ |
if [ $kernelFlagCount -gt 0 ]; then␊ |
# Add any kernel flags together in to one string.␊ |
for (( i=0 ; i < $kernelFlagCount ; i++ ))␊ |
do␊ |
kernelFlagString="${kernelFlagString} ${kernelflag[i]}"␊ |
done␊ |
# We add the final string in the next section.␊ |
fi␊ |
fi␊ |
␊ |
# ---------------------------------------------␊ |
# Add any installed modules to the Install Log␊ |
# ---------------------------------------------␊ |
if [ -e "${chamTemp}"/Extra/modules ]; then␊ |
ls "${chamTemp}"/Extra/modules | while read FILE␊ |
do␊ |
"$scriptDir"InstallLog.sh "${dest_vol}" "Added module: $FILE"␊ |
if [ "$FILE" == "Keylayout.dylib" ]; then␊ |
"$scriptDir"InstallLog.sh "${dest_vol}" "Also adding required Keymaps."␊ |
fi␊ |
done␊ |
fi␊ |
␊ |
# ---------------------------------------------␊ |
# Add any installed themes to the Install Log␊ |
# ---------------------------------------------␊ |
if [ -e "${chamTemp}"/Extra/Themes ]; then␊ |
ls "${chamTemp}"/Extra/Themes | while read FILE␊ |
do␊ |
"$scriptDir"InstallLog.sh "${dest_vol}" "Added Theme: $FILE"␊ |
done␊ |
fi␊ |
␊ |
# Does a temporary /Extra folder exist?␊ |
if [ -d "$chamTemp"/Extra ]; then␊ |
␊ |
# ---------------------------------------------␊ |
# Merge /Extra folders?␊ |
# ---------------------------------------------␊ |
# Does the user want to upgrade an existing /Extra folder?␊ |
# If so, then merge their existing one in to the temp one␊ |
# If so, then merge their existing one in to the temp one.␊ |
if [ -e "$chamTemp/install_type_upgrade" ]; then␊ |
"$scriptDir"InstallLog.sh "${dest_vol}" "User selected to do an upgrade install."␊ |
␊ |
|
␊ |
# Merge new org.chameleon.Boot.plist (holding.plist)␊ |
# with their currently existing one.␊ |
"$scriptDir"InstallLog.sh "${dest_vol}" "Merging new options into org.chameleon.Boot.plist.␊ |
"$scriptDir"InstallLog.sh "${dest_vol}" "------␊ |
Merging new options into org.chameleon.Boot.plist.␊ |
NOTE: Please check the new merged org.chameleon.Boot.plist as␊ |
NOTE: any existing keys will NOT have been updated.␊ |
NOTE: For example: If you already had Wait=No as a boot option␊ |
NOTE: and chose Wait=Yes from the list, this will NOT be changed."␊ |
NOTE: and chose Wait=Yes from the list, this will NOT be changed.␊ |
------"␊ |
sudo /usr/libexec/plistbuddy -c "Merge $chamTemp/holding.plist" "$tempOCBP"␊ |
␊ |
if [[ -n "$currentFlags" ]];then␊ |
|
# ---------------------------------------------␊ |
# Copy temp Extra folder to target destination␊ |
# ---------------------------------------------␊ |
# If we've made a temporary Extra folder to use then␊ |
# check for an existing /Extra folder. If found, back it up␊ |
# Check for an existing /Extra folder. If found, back it up␊ |
# before copying the temporary Extra folder to destination.␊ |
# Extra folder now resides in /usr/local/chamTemp/␊ |
# Copy /usr/local/chamTemp/Extra to correct location.␊ |
␊ |
if [ -d "$chamTemp"/Extra ]; then␊ |
if [ ! -f "$dest_vol"/.ChameleonEFI ]; then␊ |
# The Standard install option chosen␊ |
if [ ! -f "$dest_vol"/.ChameleonEFI ]; then␊ |
# The Standard install option chosen␊ |
␊ |
# Does an /Extra folder already exist?␊ |
if [ -e "$dest_vol"/Extra ]; then␊ |
"$scriptDir"InstallLog.sh "${dest_vol}" "Moving $dest_vol/Extra folder to $dest_vol/Extra-OLD-$( date "+%H-%M-%S" )"␊ |
mv "$dest_vol/Extra" "$dest_vol/Extra_OLD-"$( date "+%H-%M-%S" )␊ |
fi␊ |
"$scriptDir"InstallLog.sh "${dest_vol}" "Writing new Extra folder to: $dest_vol/"␊ |
echo "Copying $chamTemp/Extra TO $dest_vol"␊ |
cp -R "$chamTemp"/Extra "$dest_vol"␊ |
else␊ |
# The EFI system partition install option was chosen␊ |
# Does a /Volumes/Extra folder already exist?␊ |
if [ -e "/Volumes/EFI/Extra" ]; then␊ |
"$scriptDir"InstallLog.sh "${dest_vol}" "Moving /Volumes/EFI/Extra folder to /Volumes/EFI/Extra-OLD-$( date "+%H-%M-%S" )"␊ |
mv "/Volumes/EFI/Extra" "/Volumes/EFI/Extra_OLD-"$( date "+%H-%M-%S" )␊ |
fi␊ |
"$scriptDir"InstallLog.sh "${dest_vol}" "Writing new Extra folder to: /Volumes/EFI/"␊ |
cp -R "$chamTemp"/Extra "/Volumes/EFI"␊ |
# Does an /Extra folder already exist?␊ |
if [ -e "$dest_vol"/Extra ]; then␊ |
"$scriptDir"InstallLog.sh "${dest_vol}" "Moving $dest_vol/Extra folder to $dest_vol/Extra-OLD-$( date "+%H-%M-%S" )"␊ |
mv "$dest_vol/Extra" "$dest_vol/Extra_OLD-"$( date "+%H-%M-%S" )␊ |
fi␊ |
"$scriptDir"InstallLog.sh "${dest_vol}" "Writing new Extra folder to: $dest_vol/"␊ |
echo "Copying $chamTemp/Extra TO $dest_vol"␊ |
cp -R "$chamTemp"/Extra "$dest_vol"␊ |
else␊ |
if [ ! -f "$dest_vol"/.ChameleonEFI ]; then␊ |
if [ -e "$dest_vol"/Extra ]; then␊ |
"$scriptDir"InstallLog.sh "${dest_vol}" "No elements selected for adding to an Extra folder,␊ |
# The EFI system partition install option was chosen␊ |
# Does a /Volumes/Extra folder already exist?␊ |
if [ -e "/Volumes/EFI/Extra" ]; then␊ |
"$scriptDir"InstallLog.sh "${dest_vol}" "Moving /Volumes/EFI/Extra folder to /Volumes/EFI/Extra-OLD-$( date "+%H-%M-%S" )"␊ |
mv "/Volumes/EFI/Extra" "/Volumes/EFI/Extra_OLD-"$( date "+%H-%M-%S" )␊ |
fi␊ |
"$scriptDir"InstallLog.sh "${dest_vol}" "Writing new Extra folder to: /Volumes/EFI/"␊ |
cp -R "$chamTemp"/Extra "/Volumes/EFI"␊ |
fi␊ |
else␊ |
if [ ! -f "$dest_vol"/.ChameleonEFI ]; then␊ |
if [ -e "$dest_vol"/Extra ]; then␊ |
"$scriptDir"InstallLog.sh "${dest_vol}" "No elements selected for adding to an Extra folder,␊ |
so leaving existing $dest_vol/Extra folder untouched."␊ |
fi␊ |
else␊ |
if [ -e "/Volumes/EFI/Extra" ]; then␊ |
"$scriptDir"InstallLog.sh "${dest_vol}" "No elements selected for adding to an Extra folder,␊ |
fi␊ |
else␊ |
if [ -e "/Volumes/EFI/Extra" ]; then␊ |
"$scriptDir"InstallLog.sh "${dest_vol}" "No elements selected for adding to an Extra folder,␊ |
so leaving existing /Volumes/EFI/Extra folder untouched."␊ |
fi␊ |
fi␊ |
fi␊ |
␊ |
# Unmount ALL mounted volumes named EFI␊ |
"$scriptDir"UnMountEFIvolumes.sh "${dest_vol}" "${scriptDir}"␊ |
else␊ |
cleanUp="${cleanUp},0"␊ |
rm "$dest_vol"/.ChameleonExists␊ |
fi␊ |
␊ |
# ---------------------------------------------␊ |
# Cleanup␊ |
# ---------------------------------------------␊ |
␊ |
# Unmount ALL mounted volumes named EFI␊ |
"$scriptDir"UnMountEFIvolumes.sh "${dest_vol}" "${scriptDir}"␊ |
␊ |
# remove any temporary boot sector files if they exist␊ |
if [ -d /tmp/newbs ]; then␊ |
cleanUp="${cleanUp},1a"␊ |