Skip to content

Instantly share code, notes, and snippets.

@checktravis
Forked from linkdd/enter-chroot.bash
Created September 16, 2018 23:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save checktravis/c4d3b5c0e51ba470ceac24226e9b6c54 to your computer and use it in GitHub Desktop.
Save checktravis/c4d3b5c0e51ba470ceac24226e9b6c54 to your computer and use it in GitHub Desktop.
Script to manage chroot
#!/bin/bash
if [ "$UID" != "0" ]
then
echo "You have to be root" >&2
exit 1
fi
CHROOT=$1
if [ ! -f $CHROOT.in ]
then
for mnt in /dev /dev/pts /proc /sys
do
echo "-- Mounting $mnt on $CHROOT/$mnt"
mount -o bind $mnt $CHROOT/$mnt || exit 1
done
if [ -f $CHROOT.shared ]
then
cat $CHROOT.shared | while read entry
do
folder=${entry%:*}
mnt=${entry#*:}
echo "-- Mounting $folder on $CHROOT/$mnt"
mkdir -p $CHROOT/$mnt || exit 1
mount -o bind $folder $CHROOT/$mnt || exit 1
done
fi
echo "1" > $CHROOT.in
else
n=`cat $CHROOT.in`
let n=$n+1
echo "$n" > $CHROOT.in
fi
echo "-- Entering chroot"
chroot $CHROOT /usr/bin/env HOME=/root TERM=$TERM /bin/bash --login +h || exit 1;
n=`cat $CHROOT.in`
let n=$n-1
if [ "$n" = "0" ]
then
for umnt in /sys /proc /dev/pts /dev
do
echo "-- Umounting $CHROOT/$umnt"
umount $CHROOT/$umnt || exit 1
done
if [ -f $CHROOT.shared ]
then
cat $CHROOT.shared | while read entry
do
mnt=${entry#*:}
echo "-- Umounting $CHROOT/$mnt"
umount $CHROOT/$mnt || exit 1
done
fi
rm $CHROOT.in
else
echo "$n" > $CHROOT.in
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment