#!/bin/sh
|
|
|
|
arg0=$(basename "$0")
|
|
|
|
fatal() {
|
|
echo "F: $arg0: $@"
|
|
exit 1
|
|
}
|
|
|
|
if [ $# -gt 0 -a -d "$1" ]; then
|
|
DIR="$1"
|
|
shift
|
|
else
|
|
DIR="."
|
|
fi
|
|
|
|
|
|
cd "$DIR" || fatal "$DIR: invalid chroot dir"
|
|
DIR=$(pwd -P)
|
|
|
|
error=false
|
|
for x in dev dev/pts proc sys tmp; do
|
|
if ! grep -q " $DIR/$x " /proc/mounts; then
|
|
mount --bind /$x $DIR/$x || error=true
|
|
|
|
if $error; then
|
|
[ "$x" != dev ] || fatal "can't do anything"
|
|
break
|
|
fi
|
|
fi
|
|
done
|
|
|
|
$error || HOME=/root chroot "$DIR" "$@"
|
|
|
|
while grep -q " $DIR/" /proc/mounts; do
|
|
sleep 0.2
|
|
grep " $DIR/" /proc/mounts | cut -d' ' -f2 | tac | xargs -r --verbose -- umount
|
|
done
|