-echo "* Setting up CRAMFS-based images"
-tmp=$(mktemp -d ${BUILDTMP}/bootcd.XXXXXX)
-cramfs=$(mktemp ${BUILDTMP}/cramfs.XXXXXX)
-trap "$tmp; rm -rf $tmp $cramfs" ERR INT
-pushd $tmp
-gzip -d -c $isofs/bootcd.img | cpio -diu
-gzip -d -c $isofs/overlay.img | cpio -diu
-
-# clean out unnecessary rpm lib
-echo "* clearing var/lib/rpm/*"
-rm -f var/lib/rpm/*
-
-# bootcd requires this directory
-mkdir -p mnt/confdevice
-
-# relocate various directory to /tmp
-rm -rf root
-ln -fs /tmp/root root
-ln -fs /sbin/init linuxrc
-ln -fs /tmp/resolv.conf etc/resolv.conf
-ln -fs /tmp/etc/mtab etc/mtab
-
-# have pl_rsysinit copy over appropriate etc & var directories into /tmp/etc/
-# make /tmp/etc
-echo "* renaming dirs in ./etc"
-pushd etc
-for dir in `find * -type d -prune | grep -v rc.d`; do mv ${dir} ${dir}_o; ln -fs /tmp/etc/${dir} ${dir} ; done
-popd
-
-echo "* renaming dirs in ./var"
-# rename all top-level directories and put in a symlink to /tmp/var
-pushd var
-for dir in `find * -type d -prune`; do mv ${dir} ${dir}_o; ln -fs /tmp/var/${dir} ${dir} ; done
-popd
-
-#overwrite fstab to mount / as cramfs and /tmp as tmpfs
-echo "* Overwriting etc/fstab to use cramfs and tmpfs"
-rm -f ./etc/fstab
-cat >./etc/fstab <<EOF
+function prepare_cramfs()
+{
+ [ -n "$CRAMFS_PREPARED" ] && return 0
+ local custom=$1
+
+ echo "* Setting up CRAMFS-based images"
+ local tmp="${BUILDTMP}/cramfs-tree"
+ mkdir -p "$tmp"
+ push_cleanup rm -rf $tmp
+ pushd $tmp
+ gzip -d -c $isofs/bootcd.img | cpio -diu
+ gzip -d -c $isofs/overlay.img | cpio -diu
+ [ -n "$custom" ] && \
+ gzip -d -c $isofs/custom.img | cpio -diu
+
+ # clean out unnecessary rpm lib
+ echo "* clearing var/lib/rpm/*"
+ rm -f var/lib/rpm/*
+
+ # bootcd requires this directory
+ mkdir -p mnt/confdevice
+
+ # relocate various directory to /tmp
+ rm -rf root
+ ln -fs /tmp/root root
+ ln -fs /sbin/init linuxrc
+ ln -fs /tmp/resolv.conf etc/resolv.conf
+ ln -fs /tmp/etc/mtab etc/mtab
+
+ # have pl_rsysinit copy over appropriate etc & var directories into /tmp/etc/
+ # make /tmp/etc
+ echo "* renaming dirs in ./etc"
+ pushd etc
+ for dir in `find * -type d -prune | grep -v rc.d`; do
+ mv ${dir} ${dir}_o
+ ln -fs /tmp/etc/${dir} ${dir}
+ done
+ popd
+
+ echo "* renaming dirs in ./var"
+ # rename all top-level directories and put in a symlink to /tmp/var
+ pushd var
+ for dir in `find * -type d -prune`; do
+ mv ${dir} ${dir}_o
+ ln -fs /tmp/var/${dir} ${dir}
+ done
+ popd
+
+ # overwrite fstab to mount / as cramfs and /tmp as tmpfs
+ echo "* Overwriting etc/fstab to use cramfs and tmpfs"
+ rm -f ./etc/fstab
+ cat >./etc/fstab <<EOF