PROG_NAME_=$(basename $0)
DEST_=""
MOUNTED_="" # all mounted destinations
-COMMAND_="" # command to start in chroot
function die
local all_options_=""
- if [[ $options_ == "--bind" ]]; then
- all_options_="--bind $type_"
+ if [[ $options_ == "--rbind" ]]; then
+ all_options_="--rbind $type_"
else
all_options_="-t $type_ none"
fi
function umount_all
{
for i in $MOUNTED_; do
- umount "${DEST_}/$i"
+ umount --recursive "${DEST_}/$i"
done
}
die "Wrong number of arguments."
fi
-DEST_="$1"
-COMMAND_="${2}"
+DEST_="$1"; shift
if [ ! -d "$DEST_" ]; then
die "Target chroot does not exist: $DEST_"
mountit "proc" "proc"
mountit "sysfs" "sys"
-mountit "/dev" "dev" "--bind"
-chroot "$DEST_" $COMMAND_
+mountit "/dev" "dev" "--rbind"
+
+WROTE_DEBIAN_CHROOT=""
+if [ ! -f "$DEST_"/etc/debian_chroot ]; then
+ WROTE_DEBIAN_CHROOT="yes"
+ echo "Writing /etc/debian_chroot ..."
+ cat "$DEST_"/etc/hostname > "$DEST_"/etc/debian_chroot
+fi
+
+if (( $# < 1 )); then
+ chroot "$DEST_"
+ RC=$?
+else
+ chroot "$DEST_" "$@"
+ RC=$?
+fi
umount_all
+if [ ! -z "$WROTE_DEBIAN_CHROOT" ]; then
+ rm "$DEST_"/etc/debian_chroot
+fi
+
+exit $RC