dracut/modules.d/99squash/setup-squash.sh

62 lines
1.3 KiB
Bash
Executable File

#!/bin/sh
PATH=/bin:/sbin
SQUASH_IMG=/squash/root.img
SQUASH_MNT=/squash/root
SQUASH_MNT_REC=/squash/mounts
SQUASHED_MNT="usr etc"
echo $SQUASH_MNT > $SQUASH_MNT_REC
# Following mount points are neccessary for mounting a squash image
[ ! -d /proc/self ] && \
mount -t proc -o nosuid,noexec,nodev proc /proc
[ ! -d /sys/kernel ] && \
mount -t sysfs -o nosuid,noexec,nodev sysfs /sys
[ ! -e /dev/loop-control ] && \
mount -t devtmpfs -o mode=0755,noexec,nosuid,strictatime devtmpfs /dev
# Need a loop device backend, overlayfs, and squashfs module
modprobe loop
if [ $? != 0 ]; then
echo "Unable to setup loop module"
fi
modprobe squashfs
if [ $? != 0 ]; then
echo "Unable to setup squashfs module"
fi
modprobe overlay
if [ $? != 0 ]; then
echo "Unable to setup overlay module"
fi
[ ! -d "$SQUASH_MNT" ] && \
mkdir -m 0755 -p $SQUASH_MNT
# Mount the squashfs image
mount -t squashfs -o ro,loop $SQUASH_IMG $SQUASH_MNT
if [ $? != 0 ]; then
echo "Unable to mount squashed initramfs image"
fi
for file in $SQUASHED_MNT; do
lowerdir=$SQUASH_MNT/$file
workdir=/squash/overlay-work/$file
upperdir=/$file
mntdir=/$file
mkdir -m 0755 -p $workdir
mkdir -m 0755 -p $mntdir
mount -t overlay overlay -o\
lowerdir=$lowerdir,upperdir=$upperdir,workdir=$workdir $mntdir
echo $mntdir >> $SQUASH_MNT_REC
done