diff --git a/addon_config b/addon_config
index e8bbdea..7288348 100644
--- a/addon_config
+++ b/addon_config
@@ -1,17 +1,8 @@
-# This script gets run around the end of the archiso hook
-# These are some typical examples of what addons may need
+# img - location of image/directory to mount relative to addons directory
+# mount point - absolute location on the post-initrd root
+# type - either 'bind' or 'squashfs' for now
-# installer package payload in a plain directory
-mkdir -p /real_root/packages
-mount -o bind $BOOT_MOUNT/addons/core /real_root/packages
+# syntax:
-# a squashed livecd-specific overlay for a pristine system
-#TODO: we should keep track of used loop devices in case of multiple images
-mkdir -p /tmpfs/mnt/live_overlay
-if ! /bin/losetup /dev/loop1 "${BOOT_MOUNT}/addons/live_overlay.sqfs" >/dev/null 2>&1; then
- echo "ERROR: Cannot mount loop device /dev/loop1...aborting"
-fi
-/bin/mount -r -t squashfs /dev/loop1 /tmpfs/mnt/live_overlay
-mount -t unionfs -o remount,add=/tmpfs/squashfs_root:/tmpfs/mnt/live_overlay=ro none /real_root
-
-# vim:ft=sh:ts=4:sw=4:et:
+core /packages bind
+live_overlay.sqfs / squashfs
diff --git a/hooks/archiso b/hooks/archiso
index e345382..70b06c3 100644
--- a/hooks/archiso
+++ b/hooks/archiso
@@ -31,14 +31,38 @@ run_hook ()
msg ":: Mounting root (union) filesystem"
/bin/modprobe -q unionfs >/dev/null 2>&1
- /bin/mount -t unionfs -o dirs=/tmpfs=rw:/tmpfs/squashfs_root=ro none /real_root
+ /bin/mount -t unionfs -o dirs=/tmpfs=rw none /real_root
- addon_conf="${BOOT_MOUNT}/addons/config"
- if [ -e "${addon_conf}" ]; then
+ # TODO: some of this could be broken into functions
+ LOOP_NUM="1"
+ addon_dir="${BOOT_MOUNT}/addons"
+ if [ -e "${addon_dir}/config" ]; then
msg ":: Mounting addons"
- . $addon_conf
+ while read img mountpoint type; do
+ # check if this line is a comment (starts with #)
+ [ "${img#'#'}" != "${img}" ] && continue
+
+ if [ "${type}" = "bind" ]; then
+ msg " Binding ${img} to ${mountpoint}"
+ mkdir -p /real_root${mountpoint}
+ /bin/mount -o bind ${addon_dir}/$img /real_root${mountpoint}
+ elif [ "${type}" = "squashfs" ]; then
+ msg " Adding new union branch: ${img}"
+ mkdir -p "/tmpfs/mnt/loop${LOOP_NUM}"
+ if ! /bin/losetup "/dev/loop${LOOP_NUM}" ${addon_dir}/$img > /dev/null 2>&1; then
+ echo "ERROR: Cannot mount loop device /dev/loop${LOOP_NUM}"
+ echo " Couldn't mount all addons"
+ break
+ fi
+ /bin/mount -r -t squashfs "/dev/loop${LOOP_NUM}" "/tmpfs/mnt/loop${LOOP_NUM}"
+ /bin/mount -t unionfs -o remount,add=:/tmpfs/mnt/loop${LOOP_NUM}=ro none "/real_root"
+ LOOP_NUM=$(( $LOOP_NUM + 1 ))
+ fi
+ done < ${addon_dir}/config
fi
+ /bin/mount -t unionfs -o remount,add=:/tmpfs/squashfs_root=ro none /real_root
+
if [ -d /proc/sys/dev/cdrom ]; then
echo 0 > /proc/sys/dev/cdrom/lock
echo 1 > /proc/sys/dev/cdrom/autoeject