diff options
author | Simo Leone <simo@archlinux.org> | 2007-10-16 05:10:36 -0500 |
---|---|---|
committer | Simo Leone <simo@archlinux.org> | 2007-10-16 23:49:30 -0500 |
commit | a0a8c9ef09dc234e7318f0d6dc60dc3af0e81e44 (patch) | |
tree | a85dc0020bfa4dbad1914ef9531607f2a362b630 /hooks/archiso | |
parent | 413b2fd55202f3fa5880d5a42994220c74e84e60 (diff) | |
download | archiso32-a0a8c9ef09dc234e7318f0d6dc60dc3af0e81e44.tar.xz |
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/archiso | 32 |
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 |