Bundle archiso initcpio hook directly in repo

Current archiso package does not install initcpio hook files (confirmed:
find /usr -path */initcpio/hooks/archiso returns nothing). Write the hook
and its mkinitcpio install script directly into the profile airootfs so
COPY carries them into the image without any package dependency.

Hook finds ISO by archisosearchuuid= kernel param, waits up to 30s for
the device to appear via blkid, mounts iso9660→squashfs→overlay onto
/new_root. mkinitcpio detects /new_root is already mounted and succeeds.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
nmemmertandClaude Sonnet 4.6 committed 2026-08-31 11:34:08 -04:00
1 parent a3beffae15
commit ca0e9f7c72
3 files changed
+74 -12

No files matched your search

@@ -0,0 +1,55 @@
#!/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"
}
@@ -0,0 +1,19 @@
#!/bin/bash
# mkinitcpio install script for the archiso live-boot hook.
build() {
add_runscript
add_binary blkid
add_binary mount
add_binary sleep
add_module squashfs
add_module overlay
add_module isofs
}
help() {
cat <<HELPEOF
Locates the live ISO by UUID, mounts the squashfs airootfs, and sets up
a RAM-backed overlay as the writable root filesystem.
HELPEOF
}