Files
OrionOS/iso/profile/airootfs/usr/lib/initcpio/hooks/archiso
T
nmemmertandClaude Sonnet 4.6 685b725dbb archiso hook: support archisolabel= fallback for syslinux boots
Syslinux passes archisolabel= not archisosearchuuid= (UUID is only in
systemd-boot entries). Add blkid label lookup as fallback so both boot
paths work.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-08-31 12:32:27 -04:00

62 lines
1.9 KiB
Bash

#!/usr/bin/ash
archiso_mount_handler() {
local _new_root="$1"
local _uuid _label _basedir _dev _img
_uuid="$(getarg archisosearchuuid=)"
_label="$(getarg archisolabel=)"
_basedir="$(getarg archisobasedir=)"
: "${_basedir:=arch}"
if [ -z "${_uuid}" ] && [ -z "${_label}" ]; then
echo "archiso: neither archisosearchuuid nor archisolabel set in kernel cmdline"
return 1
fi
local _waited=0
while [ "${_waited}" -lt 30 ]; do
if [ -n "${_uuid}" ]; then
_dev="$(blkid -l -o device -t UUID="${_uuid}" 2>/dev/null)"
else
_dev="$(blkid -l -o device -t LABEL="${_label}" 2>/dev/null)"
fi
[ -n "${_dev}" ] && break
sleep 1
_waited=$(( _waited + 1 ))
done
if [ -z "${_dev}" ]; then
echo "archiso: could not find boot medium (uuid=${_uuid} label=${_label})"
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; }
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
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}"
}
run_hook() {
mount_handler="archiso_mount_handler"
}