Cleanup archiso hook
Fix squashfs mounting of all isomounts images, along with a few other changes Signed-off-by: Aaron Griffin <aaronmgriffin@gmail.com>
This commit is contained in:
parent
978fdafbff
commit
f1c46e0d3f
@ -6,17 +6,27 @@ _mnt_bind()
|
||||
/bin/mount -o bind ${1} /real_root${2}
|
||||
}
|
||||
|
||||
# args: image file
|
||||
# args: /path/to/image_file
|
||||
_mnt_squashfs()
|
||||
{
|
||||
msg "::: Adding new union branch: ${1}"
|
||||
/bin/modprobe -q loop >/dev/null 2>&1
|
||||
|
||||
img="${1}"
|
||||
base_img="${img##*/}";
|
||||
|
||||
if [ "${copytoram}" = "y" ]; then
|
||||
msg ":: Copying squashfs image to RAM"
|
||||
/bin/cat ${img} > "/tmpfs/${base_img}"
|
||||
img="/tmpfs/${base_img}"
|
||||
fi
|
||||
|
||||
msg "::: Adding new union branch: ${base_img%.*}"
|
||||
mkdir -p "/tmpfs/mnt/loop${LOOP_NUM}"
|
||||
# sometimes it takes udev a while to create device nodes
|
||||
until [ -e "/dev/loop${LOOP_NUM}" ]; do
|
||||
while [ ! -e "/dev/loop${LOOP_NUM}" ]; do
|
||||
sleep 1
|
||||
done
|
||||
if ! /bin/losetup "/dev/loop${LOOP_NUM}" ${1}; then
|
||||
if ! /bin/losetup "/dev/loop${LOOP_NUM}" ${img}; then
|
||||
echo "ERROR: Cannot mount loop device /dev/loop${LOOP_NUM}"
|
||||
break
|
||||
fi
|
||||
@ -46,14 +56,13 @@ run_hook ()
|
||||
msg ":: Scanning for boot device..."
|
||||
|
||||
/bin/mkdir -p /bootmnt
|
||||
bootmnt="/bootmnt"
|
||||
found=0
|
||||
|
||||
/bin/modprobe -q isofs >/dev/null 2>&1
|
||||
msg ":: Scanning cd drives..."
|
||||
for cdrom in /dev/hd[a-z] /dev/sr[0-9]* /dev/scd[a-z] /dev/sg[0-9]*; do
|
||||
if mount -r -t iso9660 "${cdrom}" ${bootmnt} >/dev/null 2>&1; then
|
||||
if [ -e "${bootmnt}/isomounts" ]; then
|
||||
if mount -r -t iso9660 "${cdrom}" /bootmnt >/dev/null 2>&1; then
|
||||
if [ -e "/bootmnt/isomounts" ]; then
|
||||
found=1
|
||||
msg "${cdrom}"
|
||||
break
|
||||
@ -61,15 +70,15 @@ run_hook ()
|
||||
else
|
||||
echo "Failed to mount ${cdrom}"
|
||||
fi
|
||||
[ ${found} -eq 0 ] && umount ${bootmnt} >/dev/null 2>&1
|
||||
[ ${found} -eq 0 ] && umount /bootmnt >/dev/null 2>&1
|
||||
done
|
||||
|
||||
if [ ${found} -eq 0 ]; then
|
||||
msg ":: Scanning usb drives..."
|
||||
for usb in /dev/sd[a-z][0-9]; do
|
||||
if mount -r -t vfat "${usb}" ${bootmnt} >/dev/null 2>&1 ||\
|
||||
mount -r -t ext2 "${usb}" ${bootmnt} >/dev/null 2>&1; then
|
||||
if [ -e "${bootmnt}/isomounts" ]; then
|
||||
if mount -r -t vfat "${usb}" /bootmnt >/dev/null 2>&1 ||\
|
||||
mount -r -t ext2 "${usb}" /bootmnt >/dev/null 2>&1; then
|
||||
if [ -e "/bootmnt/isomounts" ]; then
|
||||
found=1
|
||||
msg "${usb}"
|
||||
break
|
||||
@ -77,7 +86,7 @@ run_hook ()
|
||||
else
|
||||
echo "Failed to mount ${usb}"
|
||||
fi
|
||||
[ ${found} -eq 0 ] && umount ${bootmnt} >/dev/null 2>&1
|
||||
[ ${found} -eq 0 ] && umount /bootmnt >/dev/null 2>&1
|
||||
done
|
||||
fi
|
||||
|
||||
@ -88,21 +97,13 @@ run_hook ()
|
||||
exit 1
|
||||
fi
|
||||
|
||||
base_img="${bootmnt}/root-image.sqfs"
|
||||
if [ "${copytoram}" = "y" ]; then
|
||||
msg ":: Copying squashfs image to RAM"
|
||||
/bin/cat ${base_img} > /tmpfs/root-image.sqfs
|
||||
base_img="/tmpfs/root-image.sqfs"
|
||||
fi
|
||||
|
||||
/bin/modprobe -q squashfs >/dev/null 2>&1
|
||||
/bin/modprobe -q unionfs >/dev/null 2>&1
|
||||
|
||||
msg ":: Mounting root (union) filesystem"
|
||||
/bin/modprobe -q unionfs >/dev/null 2>&1
|
||||
/bin/mount -t unionfs -o dirs=/tmpfs=rw none /real_root
|
||||
|
||||
export LOOP_NUM="0"
|
||||
if [ -e "/isomounts" ]; then
|
||||
msg ":: Mounting images"
|
||||
while read img imgarch mountpoint type; do
|
||||
# check if this line is a comment (starts with #)
|
||||
@ -110,18 +111,17 @@ run_hook ()
|
||||
|
||||
[ "$imgarch" != "$arch" ] && continue
|
||||
|
||||
if [ "${type}" = "bind" ]; then
|
||||
_mnt_bind ${img} ${mountpoint}
|
||||
elif [ "${type}" = "squashfs" ]; then
|
||||
_mnt_squashfs "${img}"
|
||||
fi
|
||||
done < /isomounts
|
||||
else
|
||||
msg ":: No mountable images found"
|
||||
fi
|
||||
[ ! -f "/bootmnt/${img}" ] && continue
|
||||
|
||||
# layer the "pristine" base system image last
|
||||
_mnt_squashfs ${base_img}
|
||||
if [ "${type}" = "bind" ]; then
|
||||
_mnt_bind "/bootmnt/${img}" ${mountpoint}
|
||||
elif [ "${type}" = "squashfs" ]; then
|
||||
_mnt_squashfs "/bootmnt/${img}"
|
||||
fi
|
||||
done < "/bootmnt/isomounts"
|
||||
|
||||
# Bind our bootmnt dir into the live system
|
||||
_mnt_bind /bootmnt bootmnt
|
||||
|
||||
if [ -d /proc/sys/dev/cdrom ]; then
|
||||
echo 0 > /proc/sys/dev/cdrom/lock
|
||||
|
Loading…
Reference in New Issue
Block a user