2004-03-11 14:03:58 +01:00
|
|
|
#!/bin/sh
|
|
|
|
#
|
2004-04-24 21:17:09 +02:00
|
|
|
# $NetBSD: ufsdiskimage,v 1.2 2004/04/24 19:17:09 danw Exp $
|
2004-03-11 14:03:58 +01:00
|
|
|
|
|
|
|
_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
|
|
|
|
}
|
|
|
|
|
2004-04-24 21:17:09 +02:00
|
|
|
PATH=${PATH}:/sbin:/usr/sbin
|
2004-03-11 14:03:58 +01:00
|
|
|
main "$@"
|
|
|
|
exit $?
|