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
2 changed files with 34 additions and 19 deletions
|
@ -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…
Add table
Add a link
Reference in a new issue