#!/bin/sh # 9010-fix-toram.hook.chroot — patch live-boot toram to work with tmpfs (no O_DIRECT) # # live-boot tries "losetup --replace --direct-io=on" when re-associating the # loop device to the RAM copy in /dev/shm. tmpfs does not support O_DIRECT, # so the ioctl returns EINVAL and the verification step fails. # # The patch replaces the replace call so that if --direct-io=on fails it falls # back to a plain replace without direct-io, and also relaxes the verification # to a warning so the boot continues even when re-association is imperfect. set -e TORAM_SCRIPT="/usr/lib/live/boot/9990-toram-todisk.sh" if [ ! -f "${TORAM_SCRIPT}" ]; then echo "9010-fix-toram: ${TORAM_SCRIPT} not found, skipping" exit 0 fi echo "9010-fix-toram: patching ${TORAM_SCRIPT}" # Replace any losetup --replace call that includes --direct-io=on with a # version that first tries with direct-io, then retries without it. # # The sed expression turns: # losetup --replace ... --direct-io=on LOOP FILE # into a shell snippet that tries both, silently. # # We also downgrade the fatal "Task finished with error." block to a warning # so the boot continues if re-association fails (squashfs still accessible). # 1. Strip --direct-io=on from the losetup --replace call so it works on tmpfs. sed -i 's/losetup --replace --direct-io=on/losetup --replace/g' "${TORAM_SCRIPT}" sed -i 's/losetup --replace --direct-io/losetup --replace/g' "${TORAM_SCRIPT}" # 2. Turn the hard error into a warning so boot continues. # live-boot prints this exact string when verification fails. sed -i 's/echo "Task finished with error\."/echo "Warning: toram re-association failed, continuing boot (squashfs still in RAM)"/' "${TORAM_SCRIPT}" echo "9010-fix-toram: patch applied" grep -n "losetup" "${TORAM_SCRIPT}" | head -20 || true