#!/bin/bash printhelp() { cat << EOF Usage: $(basename $0) (omit command to chroot only) EOF } msgerr() { echo -e "ERROR: $@" } if [ "$UID" != "0" ]; then msgerr "$(basename $0) need root access!" printhelp exit 1 fi LFS=$1 if [ -z $1 ]; then msgerr "Please set directory for chroot!" printhelp exit 1 fi if [ ! -d $LFS ]; then msgerr "Directory '$LFS' not exist" printhelp exit 1 fi shift CMD=$@ if [ -z $2 ]; then CMD="/bin/bash --login" fi if [ -e /sys/firmware/efi/systab ]; then EFI_SYSTEM=1 fi pushd $LFS &>/dev/null mount --bind /dev $LFS/dev mount -t devpts devpts $LFS/dev/pts -o gid=5,mode=620 mount -t proc proc $LFS/proc mount -t sysfs sysfs $LFS/sys if [ -n "$EFI_SYSTEM" ]; then mount --bind /sys/firmware/efi/efivars $LFS/sys/firmware/efi/efivars fi mount -t tmpfs tmpfs $LFS/run if [ -h $LFS/dev/shm ]; then mkdir -p $LFS/$(readlink $LFS/dev/shm) fi cp -L /etc/resolv.conf $LFS/etc echo ":: entering chroot to $LFS." chroot "$LFS" /usr/bin/env -i \ HOME=/root \ TERM="$TERM" \ PS1='\u:\w\$ ' \ PATH=/bin:/usr/bin:/sbin:/usr/sbin $CMD retval=$? popd &>/dev/null umount $LFS/dev/pts umount $LFS/dev umount $LFS/run umount $LFS/proc if [ -n "$EFI_SYSTEM" ]; then umount $LFS/sys/firmware/efi/efivars fi umount $LFS/sys echo ":: chroot exited." exit $retval