#!/bin/bash
DIR=$(dirname `readlink -f $0`)
. $DIR/../testing.conf
. $DIR/function.sh
[ `id -u` -eq 0 ] || die "You must be root to run $0"
running_any $STRONGSWANHOSTS && die "Please stop test environment before running $0"
[ -n "$1" ] || die "$0 <image to mount: base|root|<guest>>"
check_commands partprobe qemu-nbd
load_qemu_nbd
mkdir -p $LOOPDIR
mkdir -p $IMGDIR
mkdir -p $SHAREDDIR
echo "Mounting image"
case "$1" in
base)
[ -f "$BASEIMG" ] || die "Base image $BASEIMG not found"
log_action "Connecting base image to NBD device $NBDEV"
execute "qemu-nbd -c $NBDEV $BASEIMG"
affected="root and guest"
;;
root)
[ -f "$ROOTIMG" ] || die "Root image $ROOTIMG not found"
log_action "Connecting root image to NBD device $NBDEV"
execute "qemu-nbd -c $NBDEV $ROOTIMG"
affected="guest"
;;
*)
echo $STRONGSWANHOSTS | grep -q "\b$1\b" || die "Guest $1 not found"
GUESTIMG="$IMGDIR/$1.$IMGEXT"
[ -f "$GUESTIMG" ] || die "Guest image $GUESTIMG not found"
log_action "Connecting guest image to NBD device $NBDEV"
execute "qemu-nbd -c $NBDEV $GUESTIMG"
;;
esac
do_on_exit qemu-nbd -d $NBDEV
partprobe $NBDEV
log_action "Mounting $NBDPARTITION to $LOOPDIR"
execute "mount $NBDPARTITION $LOOPDIR"
do_on_exit umount $LOOPDIR
log_action "Mounting proc filesystem to $LOOPDIR/proc"
execute "mount -t proc none $LOOPDIR/proc"
do_on_exit umount $LOOPDIR/proc
mkdir -p $LOOPDIR/root/shared
log_action "Mounting $SHAREDDIR as /root/shared"
execute "mount -o bind $SHAREDDIR $LOOPDIR/root/shared"
do_on_exit umount $LOOPDIR/root/shared
log_action "Copy /etc/resolv.conf"
execute "cp /etc/resolv.conf $LOOPDIR/etc/resolv.conf"
do_on_exit rm $LOOPDIR/etc/resolv.conf
if [ -n "$affected" ]; then
echo
echo "Rebuild the $affected images after making changes to this image!"
echo
fi
export debian_chroot="$1"
chroot $LOOPDIR /bin/bash -i
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>