| @@ -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 | |
42 | pkgsrc=/usr/pkgsrc | | 42 | pkgsrc=/usr/pkgsrc |
43 | src=/usr/src | | 43 | src=/usr/src |
44 | xsrc=/usr/xsrc | | 44 | xsrc=/usr/xsrc |
45 | with_x=yes | | 45 | with_x=yes |
46 | | | 46 | |
47 | kernel="" | | 47 | kernel="" |
48 | sandboxMountDirs="/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" | | 48 | sandboxMountDirs="/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" |
49 | sandboxEmptyDirs="/var/run /var/log /var/spool/lock /var/spool/mqueue" | | 49 | sandboxEmptyDirs="/var/run /var/log /var/spool/lock /var/spool/mqueue" |
50 | sandboxEmptyFiles="/var/run/utmp /var/run/utmpx /var/log/wtmp /var/log/wtmpx /var/log/lastlog /var/log/lastlogx" | | 50 | sandboxEmptyFiles="/var/run/utmp /var/run/utmpx /var/log/wtmp /var/log/wtmpx /var/log/lastlog /var/log/lastlogx" |
51 | | | 51 | |
52 | usage() | | 52 | usage() |
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 | |
58 | err() | | 58 | err() |
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 |
65 | need_src=no | | 65 | need_src=no |
66 | need_xsrc=no | | 66 | need_xsrc=no |
67 | | | 67 | |
68 | opsys=`uname -s` | | 68 | opsys=`uname -s` |
69 | case "$opsys" in | | 69 | case "$opsys" in |
70 | Darwin) | | 70 | Darwin) |
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 | ;; |
83 | Interix) | | 83 | Interix) |
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 | ;; |
88 | Linux) | | 88 | Linux) |
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 | ;; |
106 | NetBSD) | | 106 | NetBSD) |
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 | ;; |
122 | SunOS) | | 122 | SunOS) |
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 | ;; |
151 | esac | | 151 | esac |
152 | | | 152 | |
153 | while [ $# -gt 0 ]; do | | 153 | while [ $# -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 |
164 | done | | 164 | done |
165 | | | 165 | |
166 | if [ $# -ne 1 ]; then | | 166 | if [ $# -ne 1 ]; then |
167 | usage | | 167 | usage |
168 | fi | | 168 | fi |
169 | | | 169 | |
170 | if [ "$with_x" = "no" ]; then | | 170 | if [ "$with_x" = "no" ]; then |
171 | need_xsrc=no | | 171 | need_xsrc=no |
172 | fi | | 172 | fi |
173 | | | 173 | |
174 | if [ `$idprog -u` -ne 0 ]; then | | 174 | if [ `$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." |
176 | fi | | 176 | fi |
177 | | | 177 | |
178 | if [ ! -d $pkgsrc ]; then | | 178 | if [ ! -d $pkgsrc ]; then |
179 | err "pkgsrc directory $pkgsrc does not exist." | | 179 | err "pkgsrc directory $pkgsrc does not exist." |
180 | fi | | 180 | fi |
181 | | | 181 | |
182 | if [ ! -d $src -a "$need_src" = "yes" ]; then | | 182 | if [ ! -d $src -a "$need_src" = "yes" ]; then |
183 | err "source directory $src does not exist." | | 183 | err "source directory $src does not exist." |
184 | fi | | 184 | fi |
185 | | | 185 | |
186 | if [ ! -d $xsrc -a "$need_xsrc" = "yes" ]; then | | 186 | if [ ! -d $xsrc -a "$need_xsrc" = "yes" ]; then |
187 | err "xsrc directory $xsrc does not exist." | | 187 | err "xsrc directory $xsrc does not exist." |
188 | fi | | 188 | fi |
189 | | | 189 | |
190 | sandbox=$1 | | 190 | sandbox=$1 |
191 | sandbox_script="$sandbox/sandbox" | | 191 | sandbox_script="$sandbox/sandbox" |
192 | | | 192 | |
193 | packages=`(cd $pkgsrc/pkgtools/lintpkgsrc; $bmakeprog show-var VARNAME=PACKAGES)` | | 193 | packages=`(cd $pkgsrc/pkgtools/lintpkgsrc; $bmakeprog show-var VARNAME=PACKAGES)` |
194 | distfiles=`(cd $pkgsrc/pkgtools/lintpkgsrc; $bmakeprog show-var VARNAME=DISTDIR)` | | 194 | distfiles=`(cd $pkgsrc/pkgtools/lintpkgsrc; $bmakeprog show-var VARNAME=DISTDIR)` |
195 | localbase=`(cd $pkgsrc/pkgtools/lintpkgsrc; $bmakeprog show-var VARNAME=LOCALBASE)` | | 195 | localbase=`(cd $pkgsrc/pkgtools/lintpkgsrc; $bmakeprog show-var VARNAME=LOCALBASE)` |
196 | pkg_dbdir=`(cd $pkgsrc/pkgtools/lintpkgsrc; $bmakeprog show-var VARNAME=PKG_DBDIR)` | | 196 | pkg_dbdir=`(cd $pkgsrc/pkgtools/lintpkgsrc; $bmakeprog show-var VARNAME=PKG_DBDIR)` |
197 | localpatches=`(cd $pkgsrc/pkgtools/lintpkgsrc; $bmakeprog show-var VARNAME=LOCALPATCHES)` | | 197 | localpatches=`(cd $pkgsrc/pkgtools/lintpkgsrc; $bmakeprog show-var VARNAME=LOCALPATCHES)` |
198 | | | 198 | |
199 | test -d "$localpatches" || echo "WARNING: LOCALPATCHES directory does not exist - ignoring" | | 199 | test -d "$localpatches" || echo "WARNING: LOCALPATCHES directory does not exist - ignoring" |
200 | | | 200 | |
201 | $mkdirprog $sandbox | | 201 | $mkdirprog $sandbox |
202 | cat > $sandbox_script <<EOS | | 202 | cat > $sandbox_script <<EOS |
203 | #! /bin/sh - | | 203 | #! /bin/sh - |
204 | sandbox=$sandbox | | 204 | sandbox=$sandbox |
205 | | | 205 | |
206 | r3() { | | 206 | r3() { |
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 | |
216 | fses="\\ | | 216 | fses="\\ |
217 | EOS | | 217 | EOS |
218 | | | 218 | |
219 | if [ ! -z "$kernel" ]; then | | 219 | if [ ! -z "$kernel" ]; then |
220 | echo "Copying the kernel" | | 220 | echo "Copying the kernel" |
221 | $cpprog $kernel $sandbox | | 221 | $cpprog $kernel $sandbox |
222 | fi | | 222 | fi |
223 | | | 223 | |
224 | echo "Checking package hierarchy in $localbase and package database in $pkg_dbdir exist" | | 224 | echo "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 | |
227 | echo "Make and populate $sandbox/dev" | | 227 | echo "Make and populate $sandbox/dev" |
228 | $mkdirprog $sandbox/dev | | 228 | $mkdirprog $sandbox/dev |
229 | | | 229 | |
230 | case "$opsys" in | | 230 | case "$opsys" in |
231 | SunOS) | | 231 | SunOS) |
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 | ;; |
237 | Linux) | | 237 | Linux) |
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 | ;; |
241 | FreeBSD) | | 241 | FreeBSD) |
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) |
247 | esac | | 247 | esac |
248 | | | 248 | |
249 | echo "Make and populate $sandbox/etc" | | 249 | echo "Make and populate $sandbox/etc" |
250 | $mkdirprog $sandbox/etc | | 250 | $mkdirprog $sandbox/etc |
251 | case "$paxprog" in | | 251 | case "$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) ;; |
254 | esac | | 254 | esac |
255 | rm -f $sandbox/etc/localtime | | 255 | rm -f $sandbox/etc/localtime |
256 | | | 256 | |
257 | case "$opsys" in | | 257 | case "$opsys" in |
258 | SunOS) | | 258 | SunOS) |
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 | ;; |
264 | esac | | 264 | esac |
265 | | | 265 | |
266 | echo "Make empty dirs upon which to mount the null mounts" | | 266 | echo "Make empty dirs upon which to mount the null mounts" |
267 | for d in $sandboxMountDirs; do | | 267 | for 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 |
275 | done | | 275 | done |
276 | | | 276 | |
277 | echo "Making /tmp in $sandbox" | | 277 | echo "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 | |
281 | echo "Making /var/games in $sandbox" | | 281 | echo "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 | |
286 | for d in $sandboxEmptyDirs; do | | 286 | for 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 |
290 | done | | 290 | done |
291 | | | 291 | |
292 | for f in $sandboxEmptyFiles; do | | 292 | for 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 |
296 | done | | 296 | done |
297 | | | 297 | |
298 | if [ "$need_src" = "yes" ]; then | | 298 | if [ "$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 |
303 | fi | | 303 | fi |
304 | | | 304 | |
305 | echo "Mount $pkgsrc from $sandbox" | | 305 | echo "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 |
308 | echo "$pkgsrc /usr/pkgsrc rw \\" >> $sandbox_script | | 308 | echo "$pkgsrc /usr/pkgsrc rw \\" >> $sandbox_script |
309 | | | 309 | |
310 | if [ "$need_xsrc" = "yes" ]; then | | 310 | if [ "$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 |
315 | fi | | 315 | fi |
316 | | | 316 | |
317 | echo "Mounting $packages and $distfiles from $sandbox" | | 317 | echo "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 |
322 | echo "$packages $packages rw \\" >> $sandbox_script | | 322 | echo "$packages $packages rw \\" >> $sandbox_script |
323 | echo "$distfiles $distfiles rw \\" >> $sandbox_script | | 323 | echo "$distfiles $distfiles rw \\" >> $sandbox_script |
324 | | | 324 | |
325 | if [ -n "$localpatches" ] && [ -d "$localpatches" ]; then | | 325 | if [ -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 |
330 | fi | | 330 | fi |
331 | | | 331 | |
332 | cat >> $sandbox_script <<EOS | | 332 | cat >> $sandbox_script <<EOS |
333 | " | | 333 | " |
334 | case x\$1 in | | 334 | case 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 | ;; |
377 | esac | | 377 | esac |
378 | EOS | | 378 | EOS |
379 | | | 379 | |
380 | chmod +x $sandbox_script | | 380 | chmod +x $sandbox_script |
381 | | | 381 | |
382 | case $opsys in | | 382 | case $opsys in |
383 | SunOS) | | 383 | SunOS) |
384 | $cpprog /etc/mnttab $sandbox/etc/mnttab | | 384 | $cpprog /etc/mnttab $sandbox/etc/mnttab |
385 | ;; | | 385 | ;; |
386 | *) | | 386 | *) |
387 | esac | | 387 | esac |
388 | | | 388 | |
389 | echo "Sandbox creation is now complete" | | 389 | echo "Sandbox creation is now complete" |
390 | | | 390 | |
391 | exit 0 | | 391 | exit 0 |