#!/usr/bin/ash # Live-boot hook: find ISO by UUID, mount squashfs, set up overlay on /new_root. run_latehook() { local _uuid _basedir _dev _img _uuid="$(getarg archisosearchuuid=)" _basedir="$(getarg archisobasedir=)" : "${_basedir:=arch}" if [ -z "${_uuid}" ]; then echo "archiso: archisosearchuuid not set in kernel cmdline" return 1 fi # Wait up to 30 s for a block device with the ISO UUID to appear local _waited=0 while [ "${_waited}" -lt 30 ]; do _dev="$(blkid -l -o device -t UUID="${_uuid}" 2>/dev/null)" [ -n "${_dev}" ] && break sleep 1 _waited=$(( _waited + 1 )) done if [ -z "${_dev}" ]; then echo "archiso: could not find boot medium with UUID=${_uuid}" return 1 fi echo "archiso: found boot medium ${_dev}" mkdir -p /run/archiso/bootmnt mount -r "${_dev}" /run/archiso/bootmnt || { echo "archiso: mount bootmnt failed"; return 1; } _img="/run/archiso/bootmnt/${_basedir}/x86_64/airootfs.sfs" if [ ! -e "${_img}" ]; then echo "archiso: squashfs not found at ${_img}" return 1 fi mkdir -p /run/archiso/airootfs mount -r -t squashfs "${_img}" /run/archiso/airootfs || { echo "archiso: squashfs mount failed"; return 1; } # RAM-backed writable overlay layer mkdir -p /run/archiso/overlay mount -t tmpfs tmpfs -o mode=0755 /run/archiso/overlay mkdir -p /run/archiso/overlay/upper /run/archiso/overlay/work mkdir -p /new_root mount -t overlay overlay \ -o lowerdir=/run/archiso/airootfs,upperdir=/run/archiso/overlay/upper,workdir=/run/archiso/overlay/work \ /new_root || { echo "archiso: overlay mount failed"; return 1; } echo "archiso: live root mounted on /new_root" }