Chameleon Applications

Chameleon Applications Svn Source Tree

Root/branches/blackosx/trunk/PackageBuilder/Main_Package_Elements/Scripts/MainStandardPostinstall.sh

  • Property svn:executable set to *
1#!/bin/bash
2
3echo "==============================================="
4echo "Main Standard Post-Install Script"
5echo "*********************************"
6echo "-----------------------------------------------"
7echo ""
8
9# Find location of this script in the package installer
10# so we know where all the other scripts are located.
11MYLOCATION="${PWD}/${BASH_ARGV[0]}"
12export MYLOCATION="${MYLOCATION%/*}"
13scriptDir=$MYLOCATION
14
15
16#echo "==============================================="
17#echo "Apple Installer Package Variables"
18#echo "*********************************"
19#echo "DEBUG: $ 1 = Full path to the installation package the installer app is processing: " $1
20#echo "DEBUG: $ 2 = Full path to the installation destination: " $2
21#echo "DEBUG: $ 3 = Installation volume (mountpoint) to receive the payload: " $3
22#echo "DEBUG: $ 4 = Root directory for the system: " $4
23#echo "DEBUG: Script Name: " $SCRIPT_NAME
24#echo "DEBUG: Package Path: " $PACKAGE_PATH
25#echo "DEBUG: Installer Temp: " $INSTALLER_TEMP
26#echo "DEBUG: Full path to the temp directory containing the operation executable: " $RECEIPT_PATH
27#echo "-----------------------------------------------"
28#echo ""
29
30
31
32# Initialise Script Globals
33
34stage0Loader="boot0"
35stage0LoaderDualBoot="boot0hfs"
36stage1LoaderHFS="boot1h"
37stage1LoaderFAT="boot1f32"
38stage2Loader="boot"
39
40targetVolume=$3
41targetDevice=$( df "${targetVolume}" | sed -n '2p' | awk '{print $1}' )
42targetDeviceRaw=${targetDevice/disk/rdisk}
43targetDisk=${targetDevice%s*}
44targetDiskRaw=${targetDisk/disk/rdisk}
45targetSlice=${targetDevice#*disk*s}
46
47
48
49echo "==============================================="
50echo "DEBUG: display script variables"
51echo "*******************************"
52
53echo "DEBUG: stage0Loader: Disk loader is ${stage0Loader}"
54echo "DEBUG: stage0LoaderDualBoot: Disk loader is ${stage0LoaderDualBoot}"
55echo "DEBUG: stage1LoaderHFS: Partition loader is ${stage1LoaderHFS}"
56echo "DEBUG: stage1LoaderFat: Partition loader is ${stage1LoaderFAT}"
57echo "DEBUG: stage2Loader: Filesystem loader is ${stage2Loader}"
58echo "DEBUG: targetVolume: Volume is ${targetVolume}"
59echo "DEBUG: targetDevice: Volume device is ${targetDevice}"
60echo "DEBUG: targetDeviceRaw: Volume raw device is ${targetDeviceRaw}"
61echo "DEBUG: targetDisk: Disk device is ${targetDisk}"
62echo "DEBUG: targetDiskRaw: Disk raw device is ${targetDiskRaw}"
63echo "DEBUG: targetSlice: Volume slice is ${targetSlice}"
64echo "DEBUG: targetResources: Boot Resources is ${targetResources}"
65echo "-----------------------------------------------"
66echo ""
67
68
69# Double check we can see the selected partition and it's of the right type
70# if not the following script returns to indicate failure.
71
72"$scriptDir"CheckProceed.sh "${targetVolume}" "${targetDevice}"
73returnValue=$?
74if [ ${returnValue}=0 ]; then
75# OK to proceed
76
77
78# Does a GRUB or Linux loader already exist in the disk's MBR?
79# The script returns 1 if yes, 0 if no.
80
81"$scriptDir"CheckGRUBLinuxLoader.sh "${targetDisk}"
82returnValue=$?
83if [ ${returnValue} = 0 ]; then
84# OK to proceed
85
86
87# check for a 4-byte Windows disk signature in the disk's MBR.
88# the following script returns 1 if a Windows disk signature exists, and 0 if not.
89
90"$scriptDir"CheckWindowsDiskSignature.sh "${targetDisk}"
91diskSigCheck=$?
92
93
94# check for existing bootloaders in the disk's MBR
95# and find out if we can write the Chameleon boot files.
96# the following script returns 0 if we can proceed
97# with writing the boot files, and 1 for not.
98
99"$scriptDir"CheckDiskMicrocode.sh "${targetDisk}" "${diskSigCheck}"
100diskupdate=$?
101
102
103# check the format of the selected partition.
104# the following script returns 1 if HFS
105# the following script returns 2 if MSDOS
106# the following script returns 0 if nothing
107
108"$scriptDir"CheckFormat.sh "${targetDevice}"
109espformat=$?
110
111
112# check the partition scheme used for the selected disk.
113# the following script returns 1 if GPT
114# the following script returns 2 if GPT/MBR
115# the following script returns 3 if MBR
116# the following script returns 0 if nothing
117
118"$scriptDir"CheckPartitionScheme.sh "${targetDisk}"
119partitionTable=$?
120if [ ${partitionTable} = 3 ]; then
121# If MBR partition scheme then check for FAT16 or FAT32
122
123# the following script returns 1 if FAT16
124# the following script returns 2 if FAT32
125# the following script returns 0 if nothing
126
127"$scriptDir"CheckFatType.sh "${targetDeviceRaw}"
128fatType=$?
129fi
130
131if [ "${fatType}" = 1 ] && [ "${partitionTable}" = 3 ]; then
132echo "ERROR: - Can't install to a device using FAT16"
133# Write error to Chameleon_Error_Log file
134"$scriptDir"WriteInstallerLog.sh "${3}" "${3} is a FAT16 device - Chameleon boot files not written"
135else
136# Continue if the selected device is not a FAT16 format device
137
138# If diskupdate is flagged as 0 then the stage 0 loader can be written to the MBR
139if [ ${diskupdate} = 0 ]; then
140"$scriptDir"WriteChameleonStage0.sh "${diskupdate}" "${diskSigCheck}" "${stage0Loader}" "${stage0LoaderDualBoot}" "${targetDisk}" "${targetVolume}"
141fi
142
143# Write the stage 1 loader to the partition boot sector
144"$scriptDir"WriteChameleonStage1.sh "${espformat}" "${stage1LoaderHFS}" "${stage1LoaderFAT}" "${3}" "${targetDeviceRaw}" "${targetVolume}"
145
146# Write the stage 2 loader to the root of the selected partition
147"$scriptDir"WriteChameleonStage2.sh "${espformat}" "${stage2Loader}" "${3}" "${targetDevice}" "${targetVolume}"
148
149# Set the active partition ONLY if Windows is not installed
150"$scriptDir"SetActivePartition.sh "${espformat}" "${diskSigCheck}" "${targetDiskRaw}" "${targetSlice}" "${targetVolume}"
151fi
152else
153# Write error to Chameleon_Error_Log file
154"$scriptDir"WriteInstallerLog.sh "${targetVolume}" "Error: Target drive has existing GRUB / Linux loader in the MBR - Not sure how to continue"
155fi
156else
157# Write error to Chameleon_Error_Log file
158"$scriptDir"WriteInstallerLog.sh "${targetVolume}" "Error: ${targetVolume} couldn't be found or the disk doesn't use slices"
159fi
160
161exit 0
162

Archive Download this file

Revision: 255