source: freewrt/scripts/darwindiskimage@ 483c323

Last change on this file since 483c323 was 483c323, checked in by Thorsten Glaser <tg@…>, 18 years ago

we'll need this shortly

git-svn-id: svn://www.freewrt.org/trunk/freewrt@3072 afb5a338-a214-0410-bd46-81f09a774fd1

  • Property mode set to 100644
File size: 3.9 KB
Line 
1#!/usr/bin/env bash
2# $MirOS: ports/infrastructure/scripts/darwindiskimage,v 1.3 2007/07/02 13:18:21 tg Exp $
3# $NetBSD: darwindiskimage,v 1.2 2006/08/30 04:36:10 schmonz Exp $
4#-
5# Copyright (c) 2006
6# Thorsten Glaser <tg@mirbsd.de>
7# Derived from NetBSD(R) pkgsrc(R)
8#
9# Provided that these terms and disclaimer and all copyright notices
10# are retained or reproduced in an accompanying document, permission
11# is granted to deal in this work without restriction, including un-
12# limited rights to use, publicly perform, distribute, sell, modify,
13# merge, give away, or sublicence.
14#
15# This work is provided "AS IS" and WITHOUT WARRANTY of any kind, to
16# the utmost extent permitted by applicable law, neither express nor
17# implied; without malicious intent or gross negligence. In no event
18# may a licensor, author or contributor be held liable for indirect,
19# direct, other damage, loss, or other issues arising in any way out
20# of dealing in the work, even if advised of the possibility of such
21# damage or existence of a defect, except proven that it results out
22# of said person's immediate fault when using the work as intended.
23#-
24# Use this to create a disk image, for use with a MirPorts Framework
25# installation on a default case-insensitive Mac OSX installation.
26#
27# $ /usr/bin/cvs -d anoncvs@anoncvs.mirbsd.org:/cvs co ports/infrastructure
28# $ cp ports/infrastructure/scripts/darwindiskimage ~
29# $ bash ~/darwindiskimage create ~/Documents/MirPorts 512
30# # Mebibytes - season to taste
31# $ bash ~/darwindiskimage mount ~/Documents/MirPorts
32# $ sudo chown $(id -u):$(id -g) /Volumes/MirPorts
33# $ cd /Volumes/MirPorts
34# $ /usr/bin/cvs -d anoncvs@anoncvs.mirbsd.org:/cvs co ports
35# $ bash ./Setup.sh -uel /Volumes/MirPorts/mpkg
36# $ . /Volumes/MirPorts/mpkg/db/SetEnv.sh
37# $ cd devel/cvs
38# $ mmake install clean
39# $ cd ../..
40# $ /Volumes/MirPorts/mpkg/bin/cvs -Rq up -PAd
41#
42# To use:
43# $ bash ~/darwindiskimage mount ~/Documents/MirPorts
44# $ . /Volumes/MirPorts/mpkg/db/SetEnv.sh
45# $ cd /Volumes/MirPorts/ports/foo/bar; mmake install clean
46#
47# Have fun...
48
49
50_getdevice_and_halfway_mount() {
51 hdid -nomount "$1" | _getdevicebasename | tail -1
52}
53
54_getdevicebasename() {
55 awk '{print $1}' | sed -e 's|^/dev/||'
56}
57
58_normalise_filename() {
59 echo "$1" | sed -e 's|\.dmg$||' -e 's|$|.dmg|'
60}
61
62dmg_create() {
63 local fstype fs osmajor file mountedname megabytes device
64 [ $# -eq 2 ] || die 1 "Usage: $0 create <file> <megabytes>"
65
66 # Use case-sensitive HFS+ where available (Darwin >= 7)
67 fstype='Apple_UFS'
68 fs='UFS'
69 osmajor=`uname -r | awk 'BEGIN {FS="."} {print $1}'`
70 if [ ${osmajor} -ge 7 ]; then
71 fstype='Apple_HFSX'
72 fs='HFSX'
73 fi
74
75 file="`_normalise_filename \"$1\"`"
76 mountedname="`basename \"${file}\" .dmg`"
77 megabytes=$2
78
79 # create
80 hdiutil create -quiet "${file}" -megabytes ${megabytes} \
81 -partitionType ${fstype} -layout SPUD -fs ${fs}
82
83 # rename
84 device=`_getdevice_and_halfway_mount "${file}"`
85 hdiutil mount "${file}"
86 disktool -n "${device}" "${mountedname}"
87 hdiutil eject -quiet "${device}"
88}
89
90dmg_mount() {
91 local file device exitcode
92 [ $# -eq 1 ] || die 1 "Usage: $0 mount <file>"
93
94 file="`_normalise_filename \"$1\"`"
95
96 hdiutil mount ${file}
97}
98
99
100dmg_umount() {
101 local mountpoint device
102 [ $# -eq 1 ] || die 1 "Usage: $0 umount <mount-point>"
103
104 mountpoint="$1"
105 device=`mount | grep "${mountpoint} (local" | _getdevicebasename`
106
107 [ "${device}" ] || die 1 "error: no device mounted at ${mountpoint}"
108
109 hdiutil eject -quiet "${device}"
110}
111
112die() {
113 local exitcode
114 exitcode=$1; shift
115 warn "$@"
116 exit ${exitcode}
117}
118
119warn() {
120 echo >&2 "$@"
121}
122
123try() {
124 exitcode=$1; shift
125 action=$1; shift
126 error=`"${action}" "$@" 2>&1` || die ${exitcode} "${error}"
127}
128
129main() {
130 [ $# -eq 0 ] && die 1 "Usage: $0 <create|mount|umount>"
131 ACTION="$1"; shift
132 case ${ACTION} in
133 create|mount|umount)
134 try 1 "dmg_${ACTION}" "$@"
135 return 0
136 ;;
137 *)
138 die 1 "Usage: $0 <create|mount|umount>"
139 ;;
140 esac
141}
142
143PATH=${PATH}:/sbin:/usr/sbin
144main "$@"
145exit $?
Note: See TracBrowser for help on using the repository browser.