#!/bin/bash

# A few bits taken from http://www.linuxfromscratch.org/lfs/view/stable/

Usage() {
	echo
	echo "Helper script to chroot into environment created by create-fakeroot.sh"
	echo
	echo "USAGE: $0 [options]"
	echo
	echo "options:"
	echo
	echo "-r/--root [PATH]  .. fake root path"
	echo "-u/--umount       .. umount paths mounted under fake root (dev,proc,sys,run)"
	echo
	echo "Example usage:"
	echo
	echo "How to chroot into created environment?"
	echo
	echo "# $0 -r /root/fakeroot-6.8"
	echo
	echo "How to umount /root/fakeroot-6.8/{dev,proc,sys,run}?"
	echo
	echo "# $0 -r /root/fakeroot-6.8 -u"
	echo
}

Debug=0
Umount=0

if [ $# -ne 0 ]; then
	while [ ! -z "$1" ]; do
		case "$1" in
			-r | --root ) FakeRoot=$2; shift;;
			-u | --umount ) Umount=1;;
			-d ) Debug=1;;
			-h ) Usage; exit 0;;
			* ) echo "ERR: wrong option"; Usage; exit 1;;
		esac
		shift
	done
else
	echo "ERR No command-line argument"; Usage; exit 1
fi

[ -z "$FakeRoot" ] && echo "ERR: you must specify -r/--root option" && Usage && exit 1
[ ! -d "$FakeRoot" ] && echo "ERR: cannot find given root directory: \"$FakeRoot\"" && exit 1

if [ $Umount -eq 1 ]; then
	# '/' after '$(echo $FakeRoot | sed -e 's#/\{1,\}$##')' is to distinguish between mount points having the same first part of directory name, e.g. fakeroot vs fakeroot-6.8
	for mountpoint in $(cat /proc/mounts | grep "$(echo $FakeRoot | sed -e 's#/\{1,\}$##')/" | awk '{ print $2 }' | sort -r); do umount $mountpoint; done
	exit 0
fi

mkdir -pv $FakeRoot/{dev,proc,sys,run}
[ -z "`cat /proc/mounts | grep "$(echo $FakeRoot | sed -e 's#/\{1,\}$##')/dev"`" ] && mount --rbind /dev $FakeRoot/dev
[ -z "`cat /proc/mounts | grep "$(echo $FakeRoot | sed -e 's#/\{1,\}$##')/proc"`" ] && mount -t proc proc $FakeRoot/proc
[ -z "`cat /proc/mounts | grep "$(echo $FakeRoot | sed -e 's#/\{1,\}$##')/sys"`" ] && mount -t sysfs sysfs $FakeRoot/sys
[ -z "`cat /proc/mounts | grep "$(echo $FakeRoot | sed -e 's#/\{1,\}$##')/run"`" ] && mount -t tmpfs tmpfs $FakeRoot/run

cp /etc/resolv.conf $FakeRoot/etc/
chroot $FakeRoot /bin/env -i HOME=/root TERM="$TERM" PS1='[\u@\h \W]\$ ' PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin /bin/bash --login +h
