log_action "Connecting image to NBD device $NBDEV"
execute "qemu-nbd -c $NBDEV $ROOTFS"
+do_on_exit qemu-nbd -d $NBDEV
log_action "Partitioning disk"
sfdisk /dev/nbd0 -D -uM >>$LOGFILE 2>&1 << EOF
log_action "Mounting $NBDPARTITION to $LOOPDIR"
execute "mount $NBDPARTITION $LOOPDIR"
+do_on_exit graceful_umount $LOOPDIR
log_action "Using $CACHEDIR as archive for apt"
mkdir -p $APTCACHE
execute "mount -o bind $CACHEDIR $APTCACHE"
-
do_on_exit graceful_umount $APTCACHE
-do_on_exit graceful_umount $LOOPDIR
-do_on_exit qemu-nbd -d $NBDEV
log_action "Running debootstrap ($ROOTFSSUITE, $ROOTFSARCH)"
execute "debootstrap --arch=$ROOTFSARCH --include=$PACKAGES $ROOTFSSUITE $LOOPDIR $ROOTFSMIRROR"
fi
# just to be sure
+do_on_exit qemu-nbd -d $NBDEV
do_on_exit umount $LOOPDIR
for host in $HOSTS
log_action "Connecting base image to NBD device $NBDEV"
execute "qemu-nbd -c $NBDEV $BASE"
+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/compile
log_action "Mounting $ROOTFSCOMPILEDIR as /root/compile"
execute "mount -o bind $ROOTFSCOMPILEDIR $LOOPDIR/root/compile"
-
do_on_exit umount $LOOPDIR/root/compile
-do_on_exit umount $LOOPDIR/proc
-do_on_exit umount $LOOPDIR
-do_on_exit qemu-nbd -d $NBDEV
echo "Installing software from source"
RECPDIR=$TESTDIR/testing/scripts/recipes
# perform registered actions on exit
on_exit()
{
- for i in "${on_exit_items[@]}"
+ for ((onex=${#on_exit_items[@]}-1; onex>=0; onex--))
do
- eval $i >>$LOGFILE 2>&1
+ echo "On_Exit: ${on_exit_items[$onex]}" >>$LOGFILE
+ ${on_exit_items[$onex]} >>$LOGFILE 2>&1
done
on_exit_items=""
trap - EXIT
}
# register a command to execute when the calling script terminates. The
-# registered commands are called in FIFO order.
+# registered commands are called in FILO order.
# $* - command to register
do_on_exit()
{
[ ! $secs ] && secs=5
let steps=$secs*100
- for i in `seq 1 $steps`
+ for st in `seq 1 $steps`
do
umount $1 >>$LOGFILE 2>&1
mount | grep $1 >/dev/null 2>&1