#!/bin/zsh # from http://www.kernelthread.com/mac/apme/archive/ # (c) 1994-2005 Amit Singh # with modifications for p5 build process by fry PATH=/bin:/sbin:/usr/bin:/usr/sbin SCRATCH=/tmp/.mkdmg.$$ # Output # croak() { echo -n "\n$1" } # Clean up # halt() { rm -rf $SCRATCH # defaults write com.apple.finder ShowRemovableMediaOnDesktop 1 # chkerror # FINDERPID=`ps -auxwww | grep Finder.app | grep -v grep | awk '{print $2}'` # chkerror # kill -HUP $FINDERPID 2>/dev/null >/dev/null # chkerror exit 1 } # Check return status and bail out on error # chkerror() { if [ $? -ne 0 ] then halt fi } main() { # Check if exactly one command line argument was specified # if [ $ARGC -ne 1 ] then echo "usage: mkdmg " exit 1 fi # Check if the specified file/directory exists # if [ ! -e $1 ] then echo "*** $1 does not exist." exit 1 fi # changed these around a bit [fry] DEST=`pwd` SRC=$DEST/$1 NAME=`basename $SRC` NAME="$NAME" VOLNAME=$2 # don't add 'archive' to the end of the name [fry] #ARCH="$NAME Archive" ARCH="$NAME" echo -n "Using source $SRC" # Change directory to a scratch location # cd /tmp # Create a scratch directory # mkdir $SCRATCH croak "Creating temporary directory $SCRATCH" # Estimate how much space is needed to archive the file/folder # SIZE=`du -s -k $SRC | awk '{print $1}'` chkerror SIZE=`expr 5 + $SIZE / 1000` chkerror croak "Using $SIZE MB" # Create a disk image, redirecting all output to /dev/null # hdiutil create "$SCRATCH/$ARCH.dmg" -volname "$VOLNAME" -megabytes $SIZE -type SPARSE -fs HFS+ 2>/dev/null >/dev/null chkerror croak "$SCRATCH/$ARCH.dmg created" # Optionally disable display of removable media on Desktop # # defaults write com.apple.finder ShowRemovableMediaOnDesktop 0 # chkerror # FINDERPID=`ps -auxwww | grep Finder.app | grep -v grep | awk '{print $2}'` # chkerror # kill -HUP $FINDERPID 2>/dev/null >/dev/null # chkerror # # Mount sparse image # hdid $SCRATCH/$ARCH.dmg.sparseimage 2>/dev/null >/dev/null chkerror croak "$SCRATCH/$ARCH.dmg.sparseimage attached" # Find out allocated device # DEV=`mount | grep "Volumes/$ARCH" | awk '{print $1}'` croak "Device in use is $DEV" # Use ditto to copy everything to the image, preserving resource forks # # copy the contents, don't make another folder inside [fry] ditto -rsrcFork $SRC "/Volumes/$ARCH/$NAME" 2>/dev/null >/dev/null #ditto -rsrcFork $SRC "/Volumes/$ARCH" 2>/dev/null >/dev/null chkerror croak "Copied $SRC to /Volumes/$ARCH/$NAME" # Detach the disk image hdiutil detach $DEV 2>/dev/null >/dev/null chkerror croak "$DEV detached" # Compress the image (maximum compression) hdiutil convert "$SCRATCH/$ARCH.dmg.sparseimage" -format UDZO -o "/tmp/$ARCH.dmg" -imagekey zlib-devel=9 2>/dev/null >/dev/null chkerror croak "Disk image successfully compressed" #croak "/tmp/$ARCH.dmg is ready" # move the folder to the destination place [fry] mv /tmp/$ARCH.dmg $DEST/ echo halt } main $1