92 lines
2.5 KiB
Bash
92 lines
2.5 KiB
Bash
#!/bin/bash
|
|
|
|
# Automatically abort if any command returns a non-zero exit code.
|
|
# Append something like "|| true" to the end of the command line if you really need to ignore errors for some reason.
|
|
set -e
|
|
|
|
APP_PATH=$(cd "$1" > /dev/null; pwd)
|
|
APP_SIZE=$(expr $(du -sm "$APP_PATH" | awk '{print $1}') + 500)
|
|
APP_NAME=$(basename "$APP_PATH")
|
|
DMG_PATH=$2
|
|
DMG_TEMP_PATH="${DMG_PATH}.temp.dmg"
|
|
VOLUME_NAME=$3
|
|
MOUNT_DIR="/Volumes/$VOLUME_NAME"
|
|
BACKGROUND_FILE_PATH=$4
|
|
BACKGROUND_FILE_NAME=$(basename "$BACKGROUND_FILE_PATH")
|
|
VOLUME_ICON_PATH=$5
|
|
|
|
# Create and mount the image
|
|
test -d "$MOUNT_DIR" && hdiutil detach "$MOUNT_DIR" > /dev/null
|
|
test -f "$DMG_TEMP_PATH" && rm -f "$DMG_TEMP_PATH"
|
|
hdiutil create -srcfolder "$APP_PATH" -volname "$VOLUME_NAME" -fs HFS+ -fsargs "-c c=64,a=16,e=16" -format UDRW -size ${APP_SIZE}m "$DMG_TEMP_PATH" > /dev/null
|
|
sleep 8
|
|
hdiutil attach -readwrite -noverify -noautoopen "$DMG_TEMP_PATH" > /dev/null
|
|
sleep 8
|
|
|
|
# Create /Applications link
|
|
ln -s /Applications "$MOUNT_DIR/Applications"
|
|
|
|
# Copy background image
|
|
mkdir -p "$MOUNT_DIR/.background"
|
|
cp "$BACKGROUND_FILE_PATH" "$MOUNT_DIR/.background/$BACKGROUND_FILE_NAME"
|
|
|
|
# Set volume icon - @todo: requires sudo
|
|
#cp "$VOLUME_ICON_PATH" "$MOUNT_DIR/.VolumeIcon.icns"
|
|
#SetFile -c icnC "$MOUNT_DIR/.VolumeIcon.icns"
|
|
#SetFile -a C "$MOUNT_DIR"
|
|
|
|
# Setup image window look
|
|
echo '
|
|
tell application "Finder"
|
|
tell disk "'$VOLUME_NAME'"
|
|
open
|
|
|
|
delay 12
|
|
|
|
tell container window
|
|
set current view to icon view
|
|
set toolbar visible to false
|
|
set statusbar visible to false
|
|
set the bounds to {200, 200, 840, 575}
|
|
end tell
|
|
|
|
delay 12
|
|
|
|
set Options to the icon view options of container window
|
|
tell Options
|
|
set icon size to 128
|
|
set arrangement to not arranged
|
|
end tell
|
|
set background picture of Options to file ".background:'$BACKGROUND_FILE_NAME'"
|
|
|
|
delay 12
|
|
|
|
set position of item "'$APP_NAME'" of container window to {170, 220}
|
|
set position of item "Applications" of container window to {485, 220}
|
|
|
|
delay 12
|
|
|
|
update without registering applications
|
|
|
|
delay 12
|
|
close
|
|
end tell
|
|
end tell
|
|
' | osascript
|
|
|
|
# Make the volume contents read-only - @todo: requires sudo
|
|
#chmod -Rf go-w "$MOUNT_DIR" > /dev/null
|
|
|
|
# Make the image open its window in Finder on mount
|
|
bless --folder "$MOUNT_DIR" --openfolder "$MOUNT_DIR"
|
|
|
|
# Unmount the image
|
|
hdiutil detach "$MOUNT_DIR" > /dev/null
|
|
|
|
# Compress the image
|
|
test -f "$DMG_PATH" && rm -f "$DMG_PATH"
|
|
hdiutil convert "$DMG_TEMP_PATH" -format UDZO -imagekey zlib-level=9 -o "$DMG_PATH" > /dev/null
|
|
rm -f "$DMG_TEMP_PATH"
|
|
|
|
exit 0
|