-
-
Notifications
You must be signed in to change notification settings - Fork 29
/
make-diskimage.sh
executable file
·72 lines (59 loc) · 1.94 KB
/
make-diskimage.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
#!/bin/sh
# Create a read-only disk image of the contents of a folder
#
# Usage: make-diskimage <image_file>
# <src_folder>
# <volume_name>
# <applescript>
# <eula_resource_file>
set -e;
DMG_DIRNAME=$(dirname "$1")
DMG_DIR=$(cd "$DMG_DIRNAME" > /dev/null; pwd)
DMG_NAME=$(basename "$1")
DMG_TEMP_NAME=${DMG_DIR}/rw.${DMG_NAME}
SRC_FOLDER=$(cd "$2" > /dev/null; pwd)
VOLUME_NAME=$3
CODESIGN_IDENTITY=$4
# optional arguments
APPLESCRIPT=$5
EULA_RSRC=$6
# Create the image
echo "creating disk image"
rm -f "$DMG_TEMP_NAME"
hdiutil create -srcfolder "$SRC_FOLDER" -nocrossdev -volname "$VOLUME_NAME" -fs HFS+ -fsargs "-c c=64,a=16,e=16" -format UDRW "$DMG_TEMP_NAME"
# mount it
echo "mounting disk image"
MOUNT_DIR=/Volumes/$VOLUME_NAME
DEV_NAME=$(hdiutil attach -readwrite -noverify -noautoopen "$DMG_TEMP_NAME" | grep -E '^/dev/' | sed 1q | awk '{print $1}')
# run applescript
if [ -n "${APPLESCRIPT}" ] && [ "${APPLESCRIPT}" != "-null-" ]; then
echo "running ${APPLESCRIPT}"
/usr/bin/osascript "$APPLESCRIPT"
fi
# make sure it's not world writeable
echo "fixing permissions"
chmod -Rf go-w "${MOUNT_DIR}" || true
# make the top window open itself on mount:
if [ -x /usr/local/bin/openUp ]; then
/usr/local/bin/openUp "${MOUNT_DIR}"
elif [ -x ~/bin/openUp ]; then
~/bin/openUp "${MOUNT_DIR}"
fi
# unmount
echo "unmounting disk image"
hdiutil detach "$DEV_NAME"
# compress image
echo "compressing disk image"
hdiutil convert "$DMG_TEMP_NAME" -format UDBZ -o "${DMG_DIR}/${DMG_NAME}"
rm -f "$DMG_TEMP_NAME"
# adding EULA resources
if [ -n "${EULA_RSRC}" ] && [ "${EULA_RSRC}" != "-null-" ]; then
echo "adding EULA resources"
hdiutil unflatten "${DMG_DIR}/${DMG_NAME}"
xcrun ResMerger -a "${EULA_RSRC}" -o "${DMG_DIR}/${DMG_NAME}"
hdiutil flatten "${DMG_DIR}/${DMG_NAME}"
fi
# sign image
codesign -s "${CODESIGN_IDENTITY}" "${DMG_DIR}/${DMG_NAME}"
echo "disk image done"
exit 0