forked from MaddTheSane/perian
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCreateDiskImage.sh
139 lines (124 loc) · 5.6 KB
/
CreateDiskImage.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#dmgSize=${DiskImageSizeInMB}
#dmgBasePath="${TARGET_BUILD_DIR}/${DiskImageVolumeName}"
dmgSize=8
BUILT_PRODUCTS_DIR=build/Deployment
DiskImageProduct=Perian.component
dmgBasePath=build/Perian
DiskImageVolumeName="Perian Codec"
if [ x${ACTION} = xclean ]; then
echo "Removing disk image ${dmgPath}.dmg"
rm -f "${dmgBasePath}.dmg"
exit 0
fi
echo "Creating ${dmgSize} MB disk image named '${DiskImageVolumeName}'..."
rm -f "${dmgBasePath}.dmg"
hdiutil create "${dmgBasePath}.dmg" -volname "${DiskImageVolumeName}" -megabytes ${dmgSize} -layout NONE -fs HFS+ -quiet
if [ $? != 0 ]; then
echo error:0: Failed to create disk image at ${dmgBasePath}.dmg
exit 1
fi
echo "...done"
echo
echo "Mounting newly created disk image..."
hdidOutput=`hdiutil mount "${dmgBasePath}.dmg" | grep '/dev/disk[0-9]*' | awk '{print $1}'`
mountedDmgPath="/Volumes/${DiskImageVolumeName}"
if [ $? != 0 -o ! -x "${mountedDmgPath}" ]; then
echo error:0: Failed to mount newly created disk image at ${dmgBasePath}.dmg
exit 1
fi
sleep 2
echo "...done"
echo
echo "Copying contents to ${dmgPath}..."
#cp "${SOURCE_ROOT}/Fire-README.txt" "${mountedDmgPath}"
#cp "${SOURCE_ROOT}/GPL" "${mountedDmgPath}"
ditto -rsrc "${BUILT_PRODUCTS_DIR}/${DiskImageProduct}" "${mountedDmgPath}/${DiskImageProduct}"
strip -u -r "${mountedDmgPath}/${DiskImageProduct}/Contents/MacOS/Fire"
mkdir "${mountedDmgPath}/Pictures"
cp "${SOURCE_ROOT}/scripts/daily-img/camp_fire.jpg" "${mountedDmgPath}/Pictures"
cp "${SOURCE_ROOT}/scripts/daily-img/dsstore" "${mountedDmgPath}/.DS_Store"
echo "...done"
echo
echo "${mountedDmgPath}"
echo "Configuring folder properties..."
osascript -e "tell application \"Finder\"" \
-e " set mountedDiskImage to disk \"${DiskImageVolumeName}\"" \
-e " open mountedDiskImage" \
-e " tell container window of mountedDiskImage" \
-e " set toolbar visible to false" \
-e " set current view to icon view" \
-e " set bounds to {${DiskImageWindowMinX}, ${DiskImageWindowMinY}, ${DiskImageWindowMaxX}, ${DiskImageWindowMaxY}}" \
-e " set position of file \"Fire-README.txt\" to {0, 64}" \
-e " set position of folder \"Pictures\" to {0, 64}" \
-e " set position of file \"${DiskImageProduct}\" to {(${DiskImageWindowMaxX} - ${DiskImageWindowMinX}) / 2 - 64, ${DiskImageWindowMaxY} - ${DiskImageWindowMinY} - 90}" \
-e " set position of file \"GPL\" to {${DiskImageWindowMaxX} - ${DiskImageWindowMinX} - 155, 64}" \
-e " set opts to icon view options of container window of mountedDiskImage" \
-e " set background picture of opts to file \"camp_fire.jpg\" of folder \"Pictures\"" \
-e " end tell" \
-e "end tell" \
> /dev/null
# -e " set icon size of icon view options of container window of mountedDiskImage to 128" \
# -e " set background color of icon view options of container window of mountedDiskImage to { ${DiskImageWindowBackgroundRed} * 65535, ${DiskImageWindowBackgroundGreen} * 65535, ${DiskImageWindowBackgroundBlue} * 65535 }" \
echo "...done"
echo
mv "${mountedDmgPath}/Pictures" "${mountedDmgPath}/.Pictures"
osascript -e 'tell application "Xcode" to display dialog "Eject the image through Finder to keep background image"'
#echo "Unmounting disk image..."
#hdiutil eject -quiet ${hdidOutput}
#echo "...done"
#echo
echo "Compressing disk image..."
mv "${dmgBasePath}.dmg" "${dmgBasePath}-orig.dmg"
hdiutil convert "${dmgBasePath}-orig.dmg" -format UDZO -o "${dmgBasePath}"
if [ $? != 0 ]; then
echo error:0: Failed to compress newly created disk image at ${dmgBasePath}.dmg
exit 1
fi
rm "${dmgBasePath}-orig.dmg"
echo "...done"
echo
osascript -e "tell application \"Finder\"" -e "select posix file \"${TARGET_BUILD_DIR}/${DiskImageVolumeName}.dmg\"" -e "end tell" > /dev/null
svnrev=`svn info "${SOURCE_ROOT}" | grep 'Revision' | awk '{print $2}'`
echo "Creating 1${dmgSize} MB disk image named '${DiskImageVolumeName}'..."
rm -f "${dmgBasePath}_${svnrev}.dmg"
hdiutil create "${dmgBasePath}_${svnrev}.dmg" -volname "${DiskImageVolumeName}" -megabytes 1${dmgSize} -layout NONE -fs HFS+ -quiet
if [ $? != 0 ]; then
echo error:0: Failed to create disk image at ${dmgBasePath}_${svnrev}.dmg
exit 1
fi
echo "...done"
echo
echo "Mounting newly created disk image..."
hdidOutput=`hdiutil mount "${dmgBasePath}_${svnrev}.dmg" | grep '/dev/disk[0-9]*' | awk '{print $1}'`
mountedDmgPath="/Volumes/${DiskImageVolumeName}"
if [ $? != 0 -o ! -x "${mountedDmgPath}" ]; then
echo error:0: Failed to mount newly created disk image at ${dmgBasePath}_${svnrev}.dmg
exit 1
fi
sleep 2
echo "...done"
echo
echo "Copying contents to ${dmgPath}_${svnrev}..."
cd "${BUILT_PRODUCTS_DIR}/"
#tricky regex to reject those files within Fire.app/Contents/Resources and reject the mdimporter
find -E . -iregex "\./[^/]+[^r]/Contents/MacOS/[^/]*" -type f -perm +111 -exec cp {} "${mountedDmgPath}/" \;
#tricky regex to reject those frameworks within Fire.app/Contents/Frameworks
find -E . -iregex "\./[^/]+\.framework/.*" -type f -perm +111 -exec cp {} "${mountedDmgPath}/" \;
echo "...done"
echo
echo "${mountedDmgPath}"
echo "Unmounting disk image..."
hdiutil eject -quiet ${hdidOutput}
echo "...done"
echo
echo "Compressing disk image..."
mv "${dmgBasePath}_${svnrev}.dmg" "${dmgBasePath}_${svnrev}-orig.dmg"
hdiutil convert "${dmgBasePath}_${svnrev}-orig.dmg" -format UDZO -o "${dmgBasePath}_${svnrev}"
if [ $? != 0 ]; then
echo error:0: Failed to compress newly created disk image at ${dmgBasePath}_${svnrev}.dmg
exit 1
fi
rm "${dmgBasePath}_${svnrev}-orig.dmg"
echo "...done"
echo
exit 0