#! /bin/sh # # diskImageHelper # # RCS: @(#) $Id: diskImageHelper,v 1.5 2005/05/04 14:20:56 das Exp $ # # Copyright (c) 2003-2005, Daniel A. Steffen # # BSD License: c.f. # # ext=.sparseimage #ext=.dmg if [ $# -gt 1 ] ; then # We have at least the minimum 2 args hdivers=`hdiutil info | awk '/revision/ {print substr($3,4,1)}'` if [ z"$1" = z"create" ] ; then if [ $# -eq 3 ] ; then # Create requires three args imageName="$2" imageSize=$3 echo echo "Creating ${imageSize} MB disk image named ${imageName}..." if [ ${hdivers} -ge 2 ] ; then hdiutil create "${imageName}${ext}" -megabytes ${imageSize} -fs HFS+ -volname "${imageName}" -layout NONE if [ ${hdivers} -ge 3 ] ; then hdiutil attach -owners on "${imageName}${ext}" else disktool -A `hdiutil attach "${imageName}${ext}" | awk '/^\/dev\// {print substr($1,6,100); exit}'` >&- fi else hdiutil create ${imageName}.dmg -megabytes ${imageSize} -layout NONE hdidOutput=`hdid -nomount ${imageName}.dmg | grep '/dev/disk[0-9]*'` /sbin/newfs_hfs -w -v ${imageName} -b 4096 ${hdidOutput} hdiutil eject ${hdidOutput} disktool -va `hdid ${imageName}.dmg | awk '/\/dev\/disk[0-9]*/ {print substr($1,6,100)}'` #echo "${hdidOutput}" > "/tmp/diskImageDev-${imageName}" fi echo "Done." echo exit 0 fi elif [ z"$1" = z"freeze" ] ; then if [ $# -eq 2 ] ; then # Freeze requires two args imageName=$2 echo echo "Converting disk image in file ${imageName} to compressed format..." if [ ${hdivers} -ge 2 ] ; then hdiutil detach `hdiutil attach "${imageName}${ext}" | awk '/^\/dev\// {print substr($1,6,100); exit}'` hdiutil resize -sectors min "${imageName}${ext}" #mv "${imageName}${ext}" "${imageName}.orig${ext}"; ext=.orig${ext} hdiutil convert "${imageName}${ext}" -format "UDZO UDIF" -tgtimagekey zlib-level=9 -o "${imageName}" rm -f "${imageName}${ext}" hdiutil unflatten "${imageName}.dmg" hdiutil flatten "${imageName}.dmg" -norsrcfork else #if [ ! -f "/tmp/diskImageDev-${imageName}" ]; then # echo "error: devinfo file /tmp/diskImageDev-${imageName} missing !"; exit 1 #fi #hdiutil eject $(cat "/tmp/diskImageDev-${imageName}") hdiutil eject `hdiutil info | awk "/\/Volumes\/${imageName}/ {print \\$1}"` mv ${imageName}.dmg ${imageName}.orig.dmg hdiutil convert ${imageName}.orig.dmg -format UDZO -o ${imageName} #rm -f "/tmp/diskImageDev-${imageName}" rm -f ${imageName}.orig.dmg fi echo "Done." echo exit 0 fi fi fi # if we did not exit above, it is an input error echo "usage: $0 create " echo " $0 freeze " exit 1