summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimo Leone <simo@archlinux.org>2007-10-16 05:10:36 -0500
committerSimo Leone <simo@archlinux.org>2007-10-16 23:49:30 -0500
commita0a8c9ef09dc234e7318f0d6dc60dc3af0e81e44 (patch)
treea85dc0020bfa4dbad1914ef9531607f2a362b630
parent413b2fd55202f3fa5880d5a42994220c74e84e60 (diff)
Implement fstab-like addon config
For now all it handles is bind mounting and squashfs images that have to overlay at the root. The config file syntax is obviously borrowed from fstab. This is far from final, much of it could use some cleanup. Signed-off-by: Simo Leone <simo@archlinux.org>
-rw-r--r--addon_config21
-rw-r--r--hooks/archiso32
2 files changed, 34 insertions, 19 deletions
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: <img> <mount point> <type>
-# 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