[issue659] grml-chroot does not properly handle multiple chroots
Marc 'Zugschlus' Haber
bts at bts.grml.org
Sun Apr 5 22:05:57 CEST 2009
Marc 'Zugschlus' Haber <mh+bts-grml at zugschlus.de> added the comment:
The following patch seems to do the trick after some _very_ limited testing.
diff -u ./grml-chroot /usr/sbin/grml-chroot
--- ./grml-chroot 2009-04-04 07:31:55.614147651 +0000
+++ /usr/sbin/grml-chroot 2009-04-04 07:30:55.290805628 +0000
@@ -9,6 +9,7 @@
PROG_NAME_=$(basename $0)
DEST_=""
MOUNTED_="" # all mounted destinations
+STATEDIR="tmp/grml-chroot"
function die
{
@@ -26,6 +27,16 @@
EOT
}
+function isMounted
+{
+ local dir="$1"
+ if < /proc/mounts cut -d\ -f 2 | grep -q "$dir"; then
+ return 0
+ else
+ return 1
+ fi
+}
+
function storeMounts
{
local to_append_="$1"
@@ -44,12 +55,14 @@
local all_options_=""
- if [[ $options_ == "--bind" ]]; then
- all_options_="--bind $type_"
- else
- all_options_="-t $type_ none"
+ if ! isMounted ${DEST_}/$dest_; then
+ if [[ $options_ == "--bind" ]]; then
+ all_options_="--bind $type_"
+ else
+ all_options_="-t $type_ none"
+ fi
+ mount $all_options_ "${DEST_}/$dest_" && storeMounts "$dest_"
fi
- mount $all_options_ "${DEST_}/$dest_" && storeMounts "$dest_"
}
function umount_all
@@ -87,9 +100,14 @@
mountit "proc" "proc"
mountit "sysfs" "sys"
mountit "/dev" "dev" "--bind"
+mkdir -p "$DEST_/$STATEDIR"
+touch "$DEST_/$STATEDIR/$$"
if (( $# < 1 )); then
chroot "$DEST_"
else
chroot "$DEST_" "$@"
fi
-umount_all
+rm "$DEST_/$STATEDIR/$$"
+if rmdir $DEST_/$STATEDIR 2>/dev/null; then
+ umount_all
+fi
----------
messages: 2127, 2128
nosy: zugschlus
priority: wish
status: chatting
title: grml-chroot does not properly handle multiple chroots
_____________________________________
GRML issue tracker <bts at bts.grml.org>
<http://bts.grml.org/grml/issue659>
_____________________________________
More information about the Bugs-changes
mailing list