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>
This commit is contained in:
Simo Leone 2007-10-16 05:10:36 -05:00
parent 413b2fd552
commit a0a8c9ef09
2 changed files with 34 additions and 19 deletions

View File

@ -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

View File

@ -31,13 +31,37 @@ 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