diff options
Diffstat (limited to 'bootstrap/ufsdiskimage')
-rwxr-xr-x | bootstrap/ufsdiskimage | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/bootstrap/ufsdiskimage b/bootstrap/ufsdiskimage new file mode 100755 index 00000000000..e0c750ad00b --- /dev/null +++ b/bootstrap/ufsdiskimage @@ -0,0 +1,106 @@ +#!/bin/sh +# +# $NetBSD: ufsdiskimage,v 1.1.1.1 2004/03/11 13:03:59 grant 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> <megabytes>" + + 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 '<key>mount-point</key>' | grep -v '<key>mount-point</key>' | sed -e 's|<string>||' -e 's|</string>||' | 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>" + + file="`_normalize_filename \"$1\"`" + + hdiutil mount ${file} +} + + +dmg_umount() +{ + local mountpoint device + [ $# -eq 1 ] || die 1 "Usage: $0 umount <mount-point>" + + 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 <create|mount|umount>" + ACTION="$1"; shift + case ${ACTION} in + create|mount|umount) + try 1 "dmg_${ACTION}" "$@" + return 0 + ;; + *) + die 1 "Usage: $0 <create|mount|umount>" + ;; + esac +} + +main "$@" +exit $? |