# License: This file is licensed under the GPL v2.
################################################################################
-PROG_NAME_=$(basename $0)
+PROG_NAME_=$(basename "$0")
DEST_=""
MOUNTED_="" # all mounted destinations
function die
{
- echo "Error: $@" >&2
+ echo "Error: $*" >&2
exit 1
}
local all_options_=""
- if [[ $options_ == "--rbind" ]]; then
- all_options_="--rbind $type_"
+ if [[ $options_ == "--bind" ]]; then
+ all_options_="--bind $type_"
else
all_options_="-t $type_ none"
fi
- mount $all_options_ "${DEST_}/$dest_" && storeMounts "$dest_"
+ mount "$all_options_" "${DEST_}/$dest_" && storeMounts "$dest_"
}
function umount_all
{
- for i in $MOUNTED_; do
- umount --recursive "${DEST_}/$i"
+ local reverse
+ reverse=$(echo "$MOUNTED_" | awk '{ for (i=NF; i>1; i--) printf("%s ",$i); print $1; }')
+ for i in $reverse; do
+ umount "${DEST_}/$i"
done
}
?) printUsage; exit 64 ;;
esac
done
-shift $(($OPTIND - 1))
+shift $((OPTIND - 1))
if (( $# < 1 )); then
printUsage
die "Wrong number of arguments."
fi
+if ! command -v awk >/dev/null 2>&1 ; then
+ die "No awk binary found, required for execution."
+fi
+
DEST_="$1"; shift
if [ ! -d "$DEST_" ]; then
fi
-mountit "proc" "proc"
-mountit "sysfs" "sys"
-mountit "/dev" "dev" "--rbind"
+
+if [ -f "$DEST_"/proc/cmdline ] ; then
+ echo "Looks like $DEST_ already has filesystems mounted, skipping."
+else
+ mountit "proc" "proc"
+ mountit "sysfs" "sys"
+ mountit "/dev" "dev" "--bind"
+ mountit "devpts" "dev/pts"
+ if [ -d /sys/firmware/efi/efivars ] ; then
+ mountit "efivarfs" "sys/firmware/efi/efivars"
+ fi
+ if [ -d "$DEST_"/run/udev ] && [ -d /run/udev ] ; then
+ mountit "/run/udev" "/run/udev" "--bind"
+ fi
+fi
WROTE_DEBIAN_CHROOT=""
if [ ! -f "$DEST_"/etc/debian_chroot ]; then
fi
umount_all
-if [ ! -z "$WROTE_DEBIAN_CHROOT" ]; then
+if [ -n "$WROTE_DEBIAN_CHROOT" ]; then
rm "$DEST_"/etc/debian_chroot
fi