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:
parent
413b2fd552
commit
a0a8c9ef09
21
addon_config
21
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
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user