Sun Sep 20 10:24:00 2009 UTC ()
Avoid hardcoding sandbox location in a shell script.


(wiz)
diff -r1.51 -r1.52 pkgsrc/mk/bulk/mksandbox

cvs diff -r1.51 -r1.52 pkgsrc/mk/bulk/Attic/mksandbox (switch to unified diff)

--- pkgsrc/mk/bulk/Attic/mksandbox 2009/09/06 19:43:18 1.51
+++ pkgsrc/mk/bulk/Attic/mksandbox 2009/09/20 10:24:00 1.52
@@ -1,391 +1,391 @@ @@ -1,391 +1,391 @@
1#! /bin/sh 1#! /bin/sh
2 2
3# $NetBSD: mksandbox,v 1.51 2009/09/06 19:43:18 wiz Exp $ 3# $NetBSD: mksandbox,v 1.52 2009/09/20 10:24:00 wiz Exp $
4# 4#
5# 5#
6# Copyright (c) 2002 Alistair G. Crooks. All rights reserved. 6# Copyright (c) 2002 Alistair G. Crooks. All rights reserved.
7# 7#
8# Redistribution and use in source and binary forms, with or without 8# Redistribution and use in source and binary forms, with or without
9# modification, are permitted provided that the following conditions 9# modification, are permitted provided that the following conditions
10# are met: 10# are met:
11# 1. Redistributions of source code must retain the above copyright 11# 1. Redistributions of source code must retain the above copyright
12# notice, this list of conditions and the following disclaimer. 12# notice, this list of conditions and the following disclaimer.
13# 2. Redistributions in binary form must reproduce the above copyright 13# 2. Redistributions in binary form must reproduce the above copyright
14# notice, this list of conditions and the following disclaimer in the 14# notice, this list of conditions and the following disclaimer in the
15# documentation and/or other materials provided with the distribution. 15# documentation and/or other materials provided with the distribution.
16# 3. All advertising materials mentioning features or use of this software 16# 3. All advertising materials mentioning features or use of this software
17# must display the following acknowledgement: 17# must display the following acknowledgement:
18# This product includes software developed by Alistair G. Crooks 18# This product includes software developed by Alistair G. Crooks
19# for the NetBSD project. 19# for the NetBSD project.
20# 4. The name of the author may not be used to endorse or promote 20# 4. The name of the author may not be used to endorse or promote
21# products derived from this software without specific prior written 21# products derived from this software without specific prior written
22# permission. 22# permission.
23# 23#
24# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS 24# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
25# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 25# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
26# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 26# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY 27# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
28# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 28# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 29# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
30# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 30# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
31# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 31# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
32# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 32# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
33# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 33# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
34# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 34# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35# 35#
36 36
37# Usage: mksandbox [--pkgsrc=dir] [--src=srcdir] [--xsrc=xsrcdir] [--without-x] [--verbose] sandbox-dir 37# Usage: mksandbox [--pkgsrc=dir] [--src=srcdir] [--xsrc=xsrcdir] [--without-x] [--verbose] sandbox-dir
38# 38#
39# A small shell script to set up a sandbox (usually for a pkgsrc bulk 39# A small shell script to set up a sandbox (usually for a pkgsrc bulk
40# build), using null mounts. 40# build), using null mounts.
41 41
42pkgsrc=/usr/pkgsrc 42pkgsrc=/usr/pkgsrc
43src=/usr/src 43src=/usr/src
44xsrc=/usr/xsrc 44xsrc=/usr/xsrc
45with_x=yes 45with_x=yes
46 46
47kernel="" 47kernel=""
48sandboxMountDirs="/bin /sbin /lib /libexec /usr/X11R7 /usr/bin /usr/games /usr/include /usr/lib /usr/libdata /usr/libexec /usr/lkm /usr/share /usr/sbin /var/mail" 48sandboxMountDirs="/bin /sbin /lib /libexec /usr/X11R7 /usr/bin /usr/games /usr/include /usr/lib /usr/libdata /usr/libexec /usr/lkm /usr/share /usr/sbin /var/mail"
49sandboxEmptyDirs="/var/run /var/log /var/spool/lock /var/spool/mqueue" 49sandboxEmptyDirs="/var/run /var/log /var/spool/lock /var/spool/mqueue"
50sandboxEmptyFiles="/var/run/utmp /var/run/utmpx /var/log/wtmp /var/log/wtmpx /var/log/lastlog /var/log/lastlogx" 50sandboxEmptyFiles="/var/run/utmp /var/run/utmpx /var/log/wtmp /var/log/wtmpx /var/log/lastlog /var/log/lastlogx"
51 51
52usage() 52usage()
53{ 53{
54 echo "Usage: mksandbox [--pkgsrc=dir] [--src=srcdir] [--xsrc=xsrcdir] [--without-x] [--verbose] sandbox-dir" 54 echo "Usage: mksandbox [--pkgsrc=dir] [--src=srcdir] [--xsrc=xsrcdir] [--without-x] [--verbose] sandbox-dir"
55 exit 1 55 exit 1
56} 56}
57 57
58err() 58err()
59{ 59{
60 echo "error: $1" 60 echo "error: $1"
61 exit 1 61 exit 1
62} 62}
63 63
64# by default, don't require src and xsrc to be available 64# by default, don't require src and xsrc to be available
65need_src=no 65need_src=no
66need_xsrc=no 66need_xsrc=no
67 67
68opsys=`uname -s` 68opsys=`uname -s`
69case "$opsys" in 69case "$opsys" in
70Darwin) 70Darwin)
71 bmakeprog=bmake 71 bmakeprog=bmake
72 chmodprog=/bin/chmod 72 chmodprog=/bin/chmod
73 chownprog=/usr/sbin/chown 73 chownprog=/usr/sbin/chown
74 cpprog=/bin/cp 74 cpprog=/bin/cp
75 gtarprog=/usr/bin/gnutar 75 gtarprog=/usr/bin/gnutar
76 idprog=/usr/bin/id 76 idprog=/usr/bin/id
77 mkdirprog="/bin/mkdir -p" 77 mkdirprog="/bin/mkdir -p"
78 mountflags="-t null" 78 mountflags="-t null"
79 mountprog=/sbin/mount 79 mountprog=/sbin/mount
80 paxprog=/bin/pax 80 paxprog=/bin/pax
81 sedprog=/usr/bin/sed 81 sedprog=/usr/bin/sed
82 ;; 82 ;;
83Interix) 83Interix)
84 echo >&2 "This script cannot be used on Interix; a different procedure is required." 84 echo >&2 "This script cannot be used on Interix; a different procedure is required."
85 echo >&2 "(To be documented.)" 85 echo >&2 "(To be documented.)"
86 exit 1 86 exit 1
87 ;; 87 ;;
88Linux) 88Linux)
89 bmakeprog=bmake 89 bmakeprog=bmake
90 chmodprog=/bin/chmod 90 chmodprog=/bin/chmod
91 chownprog=/bin/chown 91 chownprog=/bin/chown
92 cpprog=/bin/cp 92 cpprog=/bin/cp
93 gtarprog=/bin/tar 93 gtarprog=/bin/tar
94 idprog=/usr/bin/id 94 idprog=/usr/bin/id
95 mkdirprog="/bin/mkdir -p" 95 mkdirprog="/bin/mkdir -p"
96 mountflags="--bind" 96 mountflags="--bind"
97 if [ -f /bin/mount ]; then 97 if [ -f /bin/mount ]; then
98 mountprog=/bin/mount 98 mountprog=/bin/mount
99 else 99 else
100 mountprog=/sbin/mount 100 mountprog=/sbin/mount
101 fi 101 fi
102 paxprog="" 102 paxprog=""
103 sedprog=/bin/sed 103 sedprog=/bin/sed
104 sandboxMountDirs="$sandboxMountDirs /proc /usr/kerberos" 104 sandboxMountDirs="$sandboxMountDirs /proc /usr/kerberos"
105 ;; 105 ;;
106NetBSD) 106NetBSD)
107 bmakeprog=make 107 bmakeprog=make
108 chmodprog=/bin/chmod 108 chmodprog=/bin/chmod
109 chownprog=/usr/sbin/chown 109 chownprog=/usr/sbin/chown
110 cpprog=/bin/cp 110 cpprog=/bin/cp
111 gtarprog=/usr/bin/tar 111 gtarprog=/usr/bin/tar
112 idprog=/usr/bin/id 112 idprog=/usr/bin/id
113 kernel=/netbsd 113 kernel=/netbsd
114 mkdirprog="/bin/mkdir -p" 114 mkdirprog="/bin/mkdir -p"
115 mountflags="-t null" 115 mountflags="-t null"
116 mountprog=/sbin/mount 116 mountprog=/sbin/mount
117 paxprog=/bin/pax 117 paxprog=/bin/pax
118 sedprog=/usr/bin/sed 118 sedprog=/usr/bin/sed
119 need_src=yes 119 need_src=yes
120 need_xsrc=yes 120 need_xsrc=yes
121 ;; 121 ;;
122SunOS) 122SunOS)
123 bmakeprog=bmake 123 bmakeprog=bmake
124 chmodprog=/usr/bin/chmod 124 chmodprog=/usr/bin/chmod
125 chownprog=/usr/bin/chown 125 chownprog=/usr/bin/chown
126 cpprog=/usr/bin/cp 126 cpprog=/usr/bin/cp
127 gtarprog="" 127 gtarprog=""
128 idprog=/usr/xpg4/bin/id 128 idprog=/usr/xpg4/bin/id
129 mkdirprog="/usr/bin/mkdir -p" 129 mkdirprog="/usr/bin/mkdir -p"
130 mountflags="-F lofs" 130 mountflags="-F lofs"
131 mountprog=/sbin/mount 131 mountprog=/sbin/mount
132 paxprog=/bin/pax 132 paxprog=/bin/pax
133 sedprog=/usr/xpg4/bin/sed 133 sedprog=/usr/xpg4/bin/sed
134 sandboxMountDirs="/bin /sbin /kernel /lib /proc /opt/SUNWspro /usr/X11R6 /usr/5bin /usr/bin /usr/ccs /usr/dt /usr/games /usr/include /usr/lib /usr/openwin /usr/share /usr/sbin /usr/sadm /usr/ucb /usr/ucblib /usr/xpg4 /var/mail /var/sadm" 134 sandboxMountDirs="/bin /sbin /kernel /lib /proc /opt/SUNWspro /usr/X11R6 /usr/5bin /usr/bin /usr/ccs /usr/dt /usr/games /usr/include /usr/lib /usr/openwin /usr/share /usr/sbin /usr/sadm /usr/ucb /usr/ucblib /usr/xpg4 /var/mail /var/sadm"
135 sandboxEmptyDirs="$sandboxEmptyDirs /usr/tmp /var/tmp" 135 sandboxEmptyDirs="$sandboxEmptyDirs /usr/tmp /var/tmp"
136 ;; 136 ;;
137*) 137*)
138 echo "Unknown Operating System ($opsys) - good luck" 138 echo "Unknown Operating System ($opsys) - good luck"
139 bmakeprog=bmake 139 bmakeprog=bmake
140 chmodprog=chmod 140 chmodprog=chmod
141 chownprog=chown 141 chownprog=chown
142 cpprog=cp 142 cpprog=cp
143 gtarprog="tar" 143 gtarprog="tar"
144 idprog="id" 144 idprog="id"
145 mkdirprog="mkdir -p" 145 mkdirprog="mkdir -p"
146 mountflags="-t null" 146 mountflags="-t null"
147 mountprog=mount 147 mountprog=mount
148 paxprog=pax 148 paxprog=pax
149 sedprog=sed 149 sedprog=sed
150 ;; 150 ;;
151esac 151esac
152 152
153while [ $# -gt 0 ]; do 153while [ $# -gt 0 ]; do
154 case "$1" in 154 case "$1" in
155 --pkgsrc=*) pkgsrc=`echo $1 | $sedprog -e 's|^--pkgsrc=||'` ;; 155 --pkgsrc=*) pkgsrc=`echo $1 | $sedprog -e 's|^--pkgsrc=||'` ;;
156 --src=*) src=`echo $1 | $sedprog -e 's|^--src=||'` ;; 156 --src=*) src=`echo $1 | $sedprog -e 's|^--src=||'` ;;
157 --xsrc=*) xsrc=`echo $1 | $sedprog -e 's|^--xsrc=||'` ;; 157 --xsrc=*) xsrc=`echo $1 | $sedprog -e 's|^--xsrc=||'` ;;
158 --without-x) with_x=no ;; 158 --without-x) with_x=no ;;
159 --verbose) set -x ;; 159 --verbose) set -x ;;
160 -*) usage ;; 160 -*) usage ;;
161 *) break ;; 161 *) break ;;
162 esac 162 esac
163 shift 163 shift
164done 164done
165 165
166if [ $# -ne 1 ]; then 166if [ $# -ne 1 ]; then
167 usage 167 usage
168fi 168fi
169 169
170if [ "$with_x" = "no" ]; then 170if [ "$with_x" = "no" ]; then
171 need_xsrc=no 171 need_xsrc=no
172fi 172fi
173 173
174if [ `$idprog -u` -ne 0 ]; then 174if [ `$idprog -u` -ne 0 ]; then
175 err "You must be root to run this script." 175 err "You must be root to run this script."
176fi 176fi
177 177
178if [ ! -d $pkgsrc ]; then 178if [ ! -d $pkgsrc ]; then
179 err "pkgsrc directory $pkgsrc does not exist." 179 err "pkgsrc directory $pkgsrc does not exist."
180fi 180fi
181 181
182if [ ! -d $src -a "$need_src" = "yes" ]; then 182if [ ! -d $src -a "$need_src" = "yes" ]; then
183 err "source directory $src does not exist." 183 err "source directory $src does not exist."
184fi 184fi
185 185
186if [ ! -d $xsrc -a "$need_xsrc" = "yes" ]; then 186if [ ! -d $xsrc -a "$need_xsrc" = "yes" ]; then
187 err "xsrc directory $xsrc does not exist." 187 err "xsrc directory $xsrc does not exist."
188fi 188fi
189 189
190sandbox=$1 190sandbox=$1
191sandbox_script="$sandbox/sandbox" 191sandbox_script="$sandbox/sandbox"
192 192
193packages=`(cd $pkgsrc/pkgtools/lintpkgsrc; $bmakeprog show-var VARNAME=PACKAGES)` 193packages=`(cd $pkgsrc/pkgtools/lintpkgsrc; $bmakeprog show-var VARNAME=PACKAGES)`
194distfiles=`(cd $pkgsrc/pkgtools/lintpkgsrc; $bmakeprog show-var VARNAME=DISTDIR)` 194distfiles=`(cd $pkgsrc/pkgtools/lintpkgsrc; $bmakeprog show-var VARNAME=DISTDIR)`
195localbase=`(cd $pkgsrc/pkgtools/lintpkgsrc; $bmakeprog show-var VARNAME=LOCALBASE)` 195localbase=`(cd $pkgsrc/pkgtools/lintpkgsrc; $bmakeprog show-var VARNAME=LOCALBASE)`
196pkg_dbdir=`(cd $pkgsrc/pkgtools/lintpkgsrc; $bmakeprog show-var VARNAME=PKG_DBDIR)` 196pkg_dbdir=`(cd $pkgsrc/pkgtools/lintpkgsrc; $bmakeprog show-var VARNAME=PKG_DBDIR)`
197localpatches=`(cd $pkgsrc/pkgtools/lintpkgsrc; $bmakeprog show-var VARNAME=LOCALPATCHES)` 197localpatches=`(cd $pkgsrc/pkgtools/lintpkgsrc; $bmakeprog show-var VARNAME=LOCALPATCHES)`
198 198
199test -d "$localpatches" || echo "WARNING: LOCALPATCHES directory does not exist - ignoring" 199test -d "$localpatches" || echo "WARNING: LOCALPATCHES directory does not exist - ignoring"
200 200
201$mkdirprog $sandbox 201$mkdirprog $sandbox
202cat > $sandbox_script <<EOS 202cat > $sandbox_script <<EOS
203#! /bin/sh - 203#! /bin/sh -
204sandbox=$sandbox 204sandbox=$sandbox
205 205
206r3() { 206r3() {
207 _R= 207 _R=
208 while [ \$# -ge 3 ] 208 while [ \$# -ge 3 ]
209 do 209 do
210 _R="\$1 \$2 \$3 \$_R" 210 _R="\$1 \$2 \$3 \$_R"
211 shift; shift; shift 211 shift; shift; shift
212 done 212 done
213 echo "\$_R" 213 echo "\$_R"
214} 214}
215 215
216fses="\\ 216fses="\\
217EOS 217EOS
218 218
219if [ ! -z "$kernel" ]; then 219if [ ! -z "$kernel" ]; then
220 echo "Copying the kernel" 220 echo "Copying the kernel"
221 $cpprog $kernel $sandbox 221 $cpprog $kernel $sandbox
222fi 222fi
223 223
224echo "Checking package hierarchy in $localbase and package database in $pkg_dbdir exist" 224echo "Checking package hierarchy in $localbase and package database in $pkg_dbdir exist"
225$mkdirprog $sandbox/$localbase $sandbox/$pkg_dbdir 225$mkdirprog $sandbox/$localbase $sandbox/$pkg_dbdir
226 226
227echo "Make and populate $sandbox/dev" 227echo "Make and populate $sandbox/dev"
228$mkdirprog $sandbox/dev 228$mkdirprog $sandbox/dev
229 229
230case "$opsys" in 230case "$opsys" in
231SunOS) 231SunOS)
232 /usr/sbin/devfsadm -r $sandbox 232 /usr/sbin/devfsadm -r $sandbox
233 if [ -f /usr/ucblib/ucblinks.awk -a -x /usr/ucb/ucblinks ]; then 233 if [ -f /usr/ucblib/ucblinks.awk -a -x /usr/ucb/ucblinks ]; then
234 /usr/ucb/ucblinks -r $sandbox 234 /usr/ucb/ucblinks -r $sandbox
235 fi 235 fi
236 ;; 236 ;;
237Linux) 237Linux)
238 $cpprog /dev/MAKEDEV* $sandbox/dev 238 $cpprog /dev/MAKEDEV* $sandbox/dev
239 (cd $sandbox/dev; ./MAKEDEV generic random) 239 (cd $sandbox/dev; ./MAKEDEV generic random)
240 ;; 240 ;;
241FreeBSD) 241FreeBSD)
242 $mountprog -t devfs devfs $sandbox/dev 242 $mountprog -t devfs devfs $sandbox/dev
243 ;; 243 ;;
244*) 244*)
245 $cpprog /dev/MAKEDEV* $sandbox/dev 245 $cpprog /dev/MAKEDEV* $sandbox/dev
246 (cd $sandbox/dev; ./MAKEDEV all) 246 (cd $sandbox/dev; ./MAKEDEV all)
247esac 247esac
248 248
249echo "Make and populate $sandbox/etc" 249echo "Make and populate $sandbox/etc"
250$mkdirprog $sandbox/etc 250$mkdirprog $sandbox/etc
251case "$paxprog" in 251case "$paxprog" in
252"") (cd /etc; $gtarprog -cf - . | (cd $sandbox/etc; $gtarprog xf - )) ;; 252"") (cd /etc; $gtarprog -cf - . | (cd $sandbox/etc; $gtarprog xf - )) ;;
253*) (cd /etc; $paxprog -rwpe . $sandbox/etc) ;; 253*) (cd /etc; $paxprog -rwpe . $sandbox/etc) ;;
254esac 254esac
255rm -f $sandbox/etc/localtime 255rm -f $sandbox/etc/localtime
256 256
257case "$opsys" in 257case "$opsys" in
258SunOS) 258SunOS)
259 $cpprog /etc/TIMEZONE $sandbox/etc/TIMEZONE 259 $cpprog /etc/TIMEZONE $sandbox/etc/TIMEZONE
260 ;; 260 ;;
261*) 261*)
262 $cpprog /usr/share/zoneinfo/GMT $sandbox/etc/localtime 262 $cpprog /usr/share/zoneinfo/GMT $sandbox/etc/localtime
263 ;; 263 ;;
264esac 264esac
265 265
266echo "Make empty dirs upon which to mount the null mounts" 266echo "Make empty dirs upon which to mount the null mounts"
267for d in $sandboxMountDirs; do 267for d in $sandboxMountDirs; do
268 test -d $d || continue; 268 test -d $d || continue;
269 case $d in 269 case $d in
270 *X11*) test "$with_x" = "yes" || continue ;; 270 *X11*) test "$with_x" = "yes" || continue ;;
271 esac 271 esac
272 $mkdirprog $sandbox$d; 272 $mkdirprog $sandbox$d;
273 $mountprog $mountflags -r $d $sandbox$d; 273 $mountprog $mountflags -r $d $sandbox$d;
274 echo "$d $d ro \\" >> $sandbox_script 274 echo "$d $d ro \\" >> $sandbox_script
275done 275done
276 276
277echo "Making /tmp in $sandbox" 277echo "Making /tmp in $sandbox"
278$mkdirprog $sandbox/tmp $sandbox/var/tmp 278$mkdirprog $sandbox/tmp $sandbox/var/tmp
279$chmodprog 1777 $sandbox/tmp $sandbox/var/tmp 279$chmodprog 1777 $sandbox/tmp $sandbox/var/tmp
280 280
281echo "Making /var/games in $sandbox" 281echo "Making /var/games in $sandbox"
282$mkdirprog $sandbox/var/games 282$mkdirprog $sandbox/var/games
283$chownprog games:games $sandbox/var/games 283$chownprog games:games $sandbox/var/games
284$chmodprog 2775 $sandbox/var/games 284$chmodprog 2775 $sandbox/var/games
285 285
286for d in $sandboxEmptyDirs; do 286for d in $sandboxEmptyDirs; do
287 test -d $d || continue 287 test -d $d || continue
288 echo "Making $d in $sandbox" 288 echo "Making $d in $sandbox"
289 $mkdirprog $sandbox$d 289 $mkdirprog $sandbox$d
290done 290done
291 291
292for f in $sandboxEmptyFiles; do 292for f in $sandboxEmptyFiles; do
293 test -f $f || continue 293 test -f $f || continue
294 echo "Making $f in $sandbox" 294 echo "Making $f in $sandbox"
295 $cpprog /dev/null $sandbox$f 295 $cpprog /dev/null $sandbox$f
296done 296done
297 297
298if [ "$need_src" = "yes" ]; then 298if [ "$need_src" = "yes" ]; then
299 echo "Mount $src from $sandbox" 299 echo "Mount $src from $sandbox"
300 $mkdirprog $sandbox/usr/src 300 $mkdirprog $sandbox/usr/src
301 $mountprog $mountflags -r $src $sandbox/usr/src 301 $mountprog $mountflags -r $src $sandbox/usr/src
302 echo "$src /usr/src ro \\" >> $sandbox_script 302 echo "$src /usr/src ro \\" >> $sandbox_script
303fi 303fi
304 304
305echo "Mount $pkgsrc from $sandbox" 305echo "Mount $pkgsrc from $sandbox"
306$mkdirprog $sandbox/usr/pkgsrc 306$mkdirprog $sandbox/usr/pkgsrc
307$mountprog $mountflags $pkgsrc $sandbox/usr/pkgsrc 307$mountprog $mountflags $pkgsrc $sandbox/usr/pkgsrc
308echo "$pkgsrc /usr/pkgsrc rw \\" >> $sandbox_script 308echo "$pkgsrc /usr/pkgsrc rw \\" >> $sandbox_script
309 309
310if [ "$need_xsrc" = "yes" ]; then 310if [ "$need_xsrc" = "yes" ]; then
311 echo "Mount $xsrc from $sandbox" 311 echo "Mount $xsrc from $sandbox"
312 $mkdirprog $sandbox/usr/xsrc 312 $mkdirprog $sandbox/usr/xsrc
313 $mountprog $mountflags -r $xsrc $sandbox/usr/xsrc 313 $mountprog $mountflags -r $xsrc $sandbox/usr/xsrc
314 echo "$xsrc /usr/xsrc ro \\" >> $sandbox_script 314 echo "$xsrc /usr/xsrc ro \\" >> $sandbox_script
315fi 315fi
316 316
317echo "Mounting $packages and $distfiles from $sandbox" 317echo "Mounting $packages and $distfiles from $sandbox"
318$mkdirprog $sandbox/$packages $sandbox/$distfiles 318$mkdirprog $sandbox/$packages $sandbox/$distfiles
319$mkdirprog $packages $distfiles 319$mkdirprog $packages $distfiles
320$mountprog $mountflags $packages $sandbox/$packages 320$mountprog $mountflags $packages $sandbox/$packages
321$mountprog $mountflags $distfiles $sandbox/$distfiles 321$mountprog $mountflags $distfiles $sandbox/$distfiles
322echo "$packages $packages rw \\" >> $sandbox_script 322echo "$packages $packages rw \\" >> $sandbox_script
323echo "$distfiles $distfiles rw \\" >> $sandbox_script 323echo "$distfiles $distfiles rw \\" >> $sandbox_script
324 324
325if [ -n "$localpatches" ] && [ -d "$localpatches" ]; then 325if [ -n "$localpatches" ] && [ -d "$localpatches" ]; then
326 echo "Mounting $localpatches from $sandbox" 326 echo "Mounting $localpatches from $sandbox"
327 $mkdirprog $sandbox/$localpatches 327 $mkdirprog $sandbox/$localpatches
328 $mountprog $mountflags $localpatches $sandbox/$localpatches 328 $mountprog $mountflags $localpatches $sandbox/$localpatches
329 echo "$localpatches $localpatches rw \\" >> $sandbox_script 329 echo "$localpatches $localpatches rw \\" >> $sandbox_script
330fi 330fi
331 331
332cat >> $sandbox_script <<EOS 332cat >> $sandbox_script <<EOS
333" 333"
334case x\$1 in 334case x\$1 in
335 xmount) 335 xmount)
336 set dummy \$fses 336 set dummy \$fses
337 shift 337 shift
338 while [ \$# -ge 3 ]; do 338 while [ \$# -ge 3 ]; do
339 fs=\$1; shift 339 fs=\$1; shift
340 mntpoint=\$1; shift 340 mntpoint=\$1; shift
341 rwro=\$1; shift 341 rwro=\$1; shift
342 case \$rwro in 342 case \$rwro in
343 ro) mount $mountflags -r \$fs \$sandbox/\$mntpoint || exit 1 ;; 343 ro) mount $mountflags -r \$fs \$sandbox/\$mntpoint || exit 1 ;;
344 rw) mount $mountflags \$fs \$sandbox/\$mntpoint || exit 1 ;; 344 rw) mount $mountflags \$fs \$sandbox/\$mntpoint || exit 1 ;;
345 esac 345 esac
346 done 346 done
347 ;; 347 ;;
348 xumount) 348 xumount)
349 set dummy \`r3 \$fses\` 349 set dummy \`r3 \$fses\`
350 shift 350 shift
351 while [ \$# -ge 3 ]; do 351 while [ \$# -ge 3 ]; do
352 fs=\$1; shift 352 fs=\$1; shift
353 mntpoint=\$1; shift 353 mntpoint=\$1; shift
354 dummy=\$1; shift 354 dummy=\$1; shift
355 umount \$sandbox/\$mntpoint 355 umount \$sandbox/\$mntpoint
356 done 356 done
357 ;; 357 ;;
358 xchroot) 358 xchroot)
359 case x\$2 in 359 case x\$2 in
360 x) rootshell=/bin/ksh ;; 360 x) rootshell=/bin/ksh ;;
361 *) rootshell="\$2" ;; 361 *) rootshell="\$2" ;;
362 esac 362 esac
363 script="$sandbox/tmp/script.\$\$" 363 script="\$sandbox/tmp/script.\$\$"
364 echo "#!/bin/sh" > \$script 364 echo "#!/bin/sh" > \$script
365 echo "ENV=/etc/shrc \$rootshell" >> \$script 365 echo "ENV=/etc/shrc \$rootshell" >> \$script
366 chmod +x \$script 366 chmod +x \$script
367 ENV=/etc/shrc chroot \$sandbox /tmp/\`basename \$script\` 367 ENV=/etc/shrc chroot \$sandbox /tmp/\`basename \$script\`
368 rm -f \$script 368 rm -f \$script
369 ;; 369 ;;
370 *) 370 *)
371 if [ \$# -eq 0 ]; then 371 if [ \$# -eq 0 ]; then
372 set dummy /bin/sh 372 set dummy /bin/sh
373 shift 373 shift
374 fi 374 fi
375 chroot \$sandbox "\$@" 375 chroot \$sandbox "\$@"
376 ;; 376 ;;
377esac 377esac
378EOS 378EOS
379 379
380chmod +x $sandbox_script 380chmod +x $sandbox_script
381 381
382case $opsys in 382case $opsys in
383SunOS) 383SunOS)
384 $cpprog /etc/mnttab $sandbox/etc/mnttab 384 $cpprog /etc/mnttab $sandbox/etc/mnttab
385 ;; 385 ;;
386*) 386*)
387esac 387esac
388 388
389echo "Sandbox creation is now complete" 389echo "Sandbox creation is now complete"
390 390
391exit 0 391exit 0