2002-08-07 14:03:00 +02:00
|
|
|
#! /bin/sh
|
|
|
|
|
2002-08-12 12:12:09 +02:00
|
|
|
# $NetBSD: mksandbox,v 1.4 2002/08/12 10:12:09 agc Exp $
|
2002-08-07 14:03:00 +02:00
|
|
|
#
|
|
|
|
#
|
|
|
|
# Copyright (c) 2002 Alistair G. Crooks. All rights reserved.
|
|
|
|
#
|
|
|
|
# Redistribution and use in source and binary forms, with or without
|
|
|
|
# modification, are permitted provided that the following conditions
|
|
|
|
# are met:
|
|
|
|
# 1. Redistributions of source code must retain the above copyright
|
|
|
|
# notice, this list of conditions and the following disclaimer.
|
|
|
|
# 2. Redistributions in binary form must reproduce the above copyright
|
|
|
|
# notice, this list of conditions and the following disclaimer in the
|
|
|
|
# documentation and/or other materials provided with the distribution.
|
|
|
|
# 3. All advertising materials mentioning features or use of this software
|
|
|
|
# must display the following acknowledgement:
|
|
|
|
# This product includes software developed by Alistair G. Crooks
|
|
|
|
# for the NetBSD project.
|
|
|
|
# 4. The name of the author may not be used to endorse or promote
|
|
|
|
# products derived from this software without specific prior written
|
|
|
|
# permission.
|
|
|
|
#
|
|
|
|
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
|
|
|
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
|
|
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
|
|
# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
|
|
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
|
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
|
|
# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
|
|
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
|
|
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
|
|
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
|
|
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
#
|
|
|
|
|
|
|
|
# Usage: mksandbox [--pkgsrc=dir] [--src=srcdir] [--verbose] sandbox-dir
|
|
|
|
#
|
|
|
|
# A small shell script to set up a sandbox (usually for a pkgsrc bulk
|
2002-08-07 14:14:12 +02:00
|
|
|
# build), using null mounts.
|
2002-08-07 14:03:00 +02:00
|
|
|
|
|
|
|
pkgsrc=/usr/pkgsrc
|
|
|
|
src=/usr/src
|
|
|
|
|
|
|
|
opsys=`uname -s`
|
|
|
|
case "$opsys" in
|
|
|
|
Darwin)
|
|
|
|
bmakeprog=bmake
|
|
|
|
chmodprog=/bin/chmod
|
|
|
|
cpprog=/bin/cp
|
|
|
|
gtarprog=/usr/bin/gnutar
|
|
|
|
mkdirprog="/bin/mkdir -p"
|
|
|
|
mountprog=/sbin/mount
|
|
|
|
paxprog=/bin/pax
|
|
|
|
sedprog=/usr/bin/sed
|
|
|
|
;;
|
|
|
|
Linux)
|
|
|
|
bmakeprog=bmake
|
|
|
|
chmodprog=/bin/chmod
|
|
|
|
cpprog=/bin/cp
|
|
|
|
gtarprog=/bin/tar
|
|
|
|
mkdirprog="/bin/mkdir -p"
|
|
|
|
mountprog=/sbin/mount
|
|
|
|
paxprog=""
|
|
|
|
sedprog=/bin/sed
|
|
|
|
;;
|
|
|
|
NetBSD)
|
|
|
|
bmakeprog=make
|
|
|
|
chmodprog=/bin/chmod
|
|
|
|
cpprog=/bin/cp
|
|
|
|
gtarprog=/usr/bin/tar
|
|
|
|
mkdirprog="/bin/mkdir -p"
|
|
|
|
mountprog=/sbin/mount
|
|
|
|
paxprog=/bin/pax
|
|
|
|
sedprog=/usr/bin/sed
|
|
|
|
;;
|
|
|
|
SunOS)
|
|
|
|
bmakeprog=bmake
|
|
|
|
chmodprog=/usr/bin/chmod
|
|
|
|
cpprog=/usr/bin/cp
|
|
|
|
gtarprog=""
|
|
|
|
mkdirprog="/usr/bin/mkdir -p"
|
|
|
|
mountprog=/sbin/mount
|
|
|
|
paxprog=/bin/pax
|
|
|
|
sedprog=/usr/xpg4/bin/sed
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
echo "Unknown Operating System ($opsys) - good luck"
|
|
|
|
bmakeprog=bmake
|
|
|
|
chmodprog=chmod
|
|
|
|
cpprog=cp
|
|
|
|
gtarprog="tar"
|
|
|
|
mkdirprog="mkdir -p"
|
|
|
|
mountprog=mount
|
|
|
|
paxprog=pax
|
|
|
|
sedprog=sed
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
while [ $# -gt 0 ]; do
|
|
|
|
case "$1" in
|
|
|
|
--pkgsrc=*) pkgsrc=`echo $1 | $sedprog -e 's|^--pkgsrc=||'` ;;
|
|
|
|
--src=*) src=`echo $1 | $sedprog -e 's|^--src=||'` ;;
|
|
|
|
--verbose) set -x ;;
|
|
|
|
*) break ;;
|
|
|
|
esac
|
|
|
|
shift
|
|
|
|
done
|
|
|
|
|
|
|
|
if [ $# -ne 1 ]; then
|
|
|
|
echo "Usage: mksandbox [--pkgsrc=dir] [--src=srcdir] [--verbose] sandbox-dir"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [ `id -u` -ne 0 ]; then
|
|
|
|
echo "You must be root to run this script"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
sandbox=$1
|
|
|
|
|
|
|
|
packages=`(cd $pkgsrc/pkgtools/pkglint; $bmakeprog show-var VARNAME=PACKAGES)`
|
|
|
|
distfiles=`(cd $pkgsrc/pkgtools/pkglint; $bmakeprog show-var VARNAME=DISTDIR)`
|
|
|
|
localbase=`(cd $pkgsrc/pkgtools/pkglint; $bmakeprog show-var VARNAME=LOCALBASE)`
|
|
|
|
pkg_dbdir=`(cd $pkgsrc/pkgtools/pkglint; $bmakeprog show-var VARNAME=PKG_DBDIR)`
|
|
|
|
|
|
|
|
$mkdirprog $sandbox
|
|
|
|
|
|
|
|
echo "Copying the kernel"
|
|
|
|
$cpprog /netbsd $sandbox
|
|
|
|
|
|
|
|
echo "Checking package hierarchy in $localbase and package database in $pkg_dbdir exist"
|
|
|
|
$mkdirprog $sandbox/$localbase $sandbox/$pkg_dbdir
|
|
|
|
|
|
|
|
echo "Make and populate $sandbox/dev"
|
|
|
|
$mkdirprog $sandbox/dev
|
|
|
|
$cpprog /dev/MAKEDEV* $sandbox/dev
|
|
|
|
(cd $sandbox/dev; ./MAKEDEV all)
|
|
|
|
|
|
|
|
echo "Make and populate $sandbox/etc"
|
|
|
|
$mkdirprog $sandbox/etc
|
|
|
|
case "$paxprog" in
|
|
|
|
"") (cd /etc; $gtarprog -cf - . | (cd $sandbox/etc; $gtarprog xf - )) ;;
|
|
|
|
*) (cd /etc; $paxprog -rwpe . $sandbox/etc) ;;
|
|
|
|
esac
|
|
|
|
$cpprog /usr/share/zoneinfo/GMT $sandbox/etc/localtime
|
|
|
|
|
|
|
|
echo "Make empty dirs upon which to mount the null mounts"
|
|
|
|
for d in /bin \
|
|
|
|
/sbin \
|
|
|
|
/usr/X11R6 \
|
|
|
|
/usr/bin \
|
|
|
|
/usr/games \
|
|
|
|
/usr/include \
|
|
|
|
/usr/lib \
|
|
|
|
/usr/libdata \
|
|
|
|
/usr/libexec \
|
|
|
|
/usr/lkm \
|
|
|
|
/usr/share \
|
2002-08-12 11:55:35 +02:00
|
|
|
/usr/sbin \
|
2002-08-12 12:12:09 +02:00
|
|
|
/var/mail; do \
|
2002-08-07 14:03:00 +02:00
|
|
|
$mkdirprog $sandbox$d; \
|
|
|
|
$mountprog -r -t null $d $sandbox$d; \
|
|
|
|
done
|
|
|
|
|
|
|
|
echo "Making /tmp in $sandbox"
|
|
|
|
$mkdirprog $sandbox/tmp $sandbox/var/tmp
|
|
|
|
$chmodprog 1777 $sandbox/tmp $sandbox/var/tmp
|
|
|
|
|
|
|
|
echo "Mount /usr/src in $sandbox"
|
|
|
|
$mkdirprog $sandbox/usr/src
|
|
|
|
$mountprog -r -t null $src $sandbox/usr/src
|
|
|
|
|
|
|
|
echo "Mount /usr/pkgsrc in $sandbox"
|
|
|
|
$mkdirprog $sandbox/usr/pkgsrc
|
|
|
|
$mountprog -t null $pkgsrc $sandbox/usr/pkgsrc
|
|
|
|
|
|
|
|
echo "Mounting $packages and $distfiles from $sandbox"
|
|
|
|
$mkdirprog $packages $distfiles
|
|
|
|
$mountprog -t null $packages $sandbox/$packages
|
|
|
|
$mountprog -t null $distfiles $sandbox/$distfiles
|
|
|
|
|
|
|
|
echo "Sandbox creation is now complete"
|
|
|
|
|
|
|
|
exit 0
|