#!/bin/sh if [ "$EUID" -ne 0 ]; then echo "Must be ran as root" exit fi # Take user on the chrooted machine as 1st argument, # this will be the logged user after chroot, # default to root if none provided if [ $# -ge 1 ]; then USERNAME="$1" else USERNAME="root" fi MOUNT_POINT="/mnt/arch" CLIENT_SCRIPT="/usr/local/bin/chroot-client" # Make sure the partition is mounted according to fstab mount "$MOUNT_POINT" 2> /dev/null # Mount necessary directories for chroot to be possible mount --types proc /proc "$MOUNT_POINT/proc" mount --rbind /sys "$MOUNT_POINT/sys" mount --make-rslave "$MOUNT_POINT/sys" mount --rbind /dev "$MOUNT_POINT/dev" mount --make-rslave "$MOUNT_POINT/dev" # Chroot with custom script, if aviable if [ -f "$MOUNT_POINT/$CLIENT_SCRIPT" ]; then chroot "$MOUNT_POINT" "$CLIENT_SCRIPT" "$USERNAME" else # If we didn't find the script in the chroot environment # try to find it in this mahcine and copy it over if [ -f "$CLIENT_SCRIPT" ]; then echo "Client script not in chroot environment, copying" mkdir -p "$MOUNT_POINT/$(dirname $CLIENT_SCRIPT)" cp "$CLIENT_SCRIPT" "$MOUNT_POINT/$CLIENT_SCRIPTt" chroot "$MOUNT_POINT" "$CLIENT_SCRIPT" "$USERNAME" else echo "Unable to run chroot client script, proceeding manually" echo "You may need to run 'source /etc/profile' afterwards" # Try to obtain chroot user's default shell from /etc/passwd awkstring="BEGIN { FS=\":\" } /$USERNAME/ { print \$7 }" shell="$(cat /etc/passwd | awk "$awkstring")" if [ -n "$shell" ]; then echo "Found user's shell, trying to chroot with it ($shell)" chroot "$MOUNT_POINT" "$shell" --login else echo "Unable to find user in chroot's /etc/passwd, using root with bash shell" chroot "$MOUNT_POINT" "/bin/bash" --login fi fi fi # Unmount recursively mounted directories umount -l "$MOUNT_POINT/dev{/shm,/pts,}" umount -R "$MOUNT_POINT" # Remount partition accordingly to fstab # (the above umountings will unmount gentoo completely, # which means that remounting is necessary) mount "$MOUNT_POINT"