#!/bin/sh # # $NetBSD: ufsdiskimage,v 1.2 2004/04/24 19:17:09 danw Exp $ _getdevice_and_halfway_mount() { hdid -nomount "$1" | _getdevicebasename | tail -1 } _getdevicebasename() { awk '{print $1}' | sed -e 's|^/dev/||' } _normalize_filename() { echo "$1" | sed -e 's|\.dmg$||' -e 's|$|.dmg|' } dmg_create() { local file mountedname megabytes device [ $# -eq 2 ] || die 1 "Usage: $0 create " file="`_normalize_filename \"$1\"`" mountedname="`basename \"${file}\" .dmg`" megabytes=$2 # create hdiutil create -quiet "${file}" -megabytes ${megabytes} \ -partitionType Apple_UFS -layout SPUD # format device=`_getdevice_and_halfway_mount "${file}"` newfs ${device} hdiutil eject -quiet "${device}" # rename hdiutil mount "${file}" disktool -n "${device}" "${mountedname}" hdiutil eject -quiet "${device}" # mountpoint="`hdiutil mount -verbose '${file}' | grep -A 1 'mount-point' | grep -v 'mount-point' | sed -e 's|||' -e 's|||' | awk '{print $1}'`" # mount | grep '^/dev/disk1' | awk '{print $3}' | sed -e 's|^/Volumes/||' } dmg_mount() { local file device exitcode [ $# -eq 1 ] || die 1 "Usage: $0 mount " file="`_normalize_filename \"$1\"`" hdiutil mount ${file} } dmg_umount() { local mountpoint device [ $# -eq 1 ] || die 1 "Usage: $0 umount " mountpoint="$1" device=`mount | grep "${mountpoint} (local" | _getdevicebasename` [ "${device}" ] || die 1 "error: no device mounted at ${mountpoint}" hdiutil eject -quiet "${device}" } die() { local exitcode exitcode=$1; shift warn "$@" exit ${exitcode} } warn() { echo >&2 "$@" } try() { exitcode=$1; shift action=$1; shift error=`"${action}" "$@" 2>&1` || die ${exitcode} "${error}" } main() { [ $# -eq 0 ] && die 1 "Usage: $0 " ACTION="$1"; shift case ${ACTION} in create|mount|umount) try 1 "dmg_${ACTION}" "$@" return 0 ;; *) die 1 "Usage: $0 " ;; esac } PATH=${PATH}:/sbin:/usr/sbin main "$@" exit $?