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 # img - location of image/directory to mount relative to addons directory
# These are some typical examples of what addons may need # mount point - absolute location on the post-initrd root
# type - either 'bind' or 'squashfs' for now
# installer package payload in a plain directory # syntax: <img> <mount point> <type>
mkdir -p /real_root/packages
mount -o bind $BOOT_MOUNT/addons/core /real_root/packages
# a squashed livecd-specific overlay for a pristine system core /packages bind
#TODO: we should keep track of used loop devices in case of multiple images live_overlay.sqfs / squashfs
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:

View File

@ -31,13 +31,37 @@ run_hook ()
msg ":: Mounting root (union) filesystem" msg ":: Mounting root (union) filesystem"
/bin/modprobe -q unionfs >/dev/null 2>&1 /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" # TODO: some of this could be broken into functions
if [ -e "${addon_conf}" ]; then LOOP_NUM="1"
addon_dir="${BOOT_MOUNT}/addons"
if [ -e "${addon_dir}/config" ]; then
msg ":: Mounting addons" 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 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 if [ -d /proc/sys/dev/cdrom ]; then
echo 0 > /proc/sys/dev/cdrom/lock echo 0 > /proc/sys/dev/cdrom/lock