summaryrefslogtreecommitdiff
path: root/bootstrap/ufsdiskimage
diff options
context:
space:
mode:
Diffstat (limited to 'bootstrap/ufsdiskimage')
-rwxr-xr-xbootstrap/ufsdiskimage106
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 $?