Send patches - preferably formatted by git format-patch - to patches at archlinux32 dot org.
summaryrefslogtreecommitdiff
path: root/hooks/archiso
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
commit4264557e0d2bdf85674373cae064eee39971029a (patch)
tree92aaa143e619e83ba2b8d63db7f858d7553668a8 /hooks/archiso
parent2e2baf78e5c2d99cebc290bfdcbbc2fcab87c03f (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>
Diffstat (limited to 'hooks/archiso')
-rw-r--r--hooks/archiso32
1 files changed, 28 insertions, 4 deletions
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