Files
void-installer/iso/patches/0002-mtools-efi-and-onefs-cp.patch

63 lines
2.4 KiB
Diff

--- a/mklive.sh
+++ b/mklive.sh
@@ -386,13 +387,16 @@ EOF
modprobe -q loop || :
- # Create EFI vfat image.
- truncate -s 32M "$GRUB_DIR"/efiboot.img >/dev/null 2>&1
- mkfs.vfat -F12 -S 512 -n "grub_uefi" "$GRUB_DIR/efiboot.img" >/dev/null 2>&1
+ # Create EFI vfat image — use mtools so the build does not depend on
+ # losetup (avoids CAP_SYS_ADMIN on init userns / works inside containers).
+ truncate -s 64M "$GRUB_DIR"/efiboot.img >/dev/null 2>&1
+ mformat -i "$GRUB_DIR/efiboot.img" -F -v "grub_uefi" ::
GRUB_EFI_TMPDIR="$(mktemp --tmpdir="$BUILDDIR" -dt grub-efi.XXXXX)"
- LOOP_DEVICE="$(losetup --show --find "${GRUB_DIR}"/efiboot.img)"
- mount -o rw,flush -t vfat "${LOOP_DEVICE}" "${GRUB_EFI_TMPDIR}" >/dev/null 2>&1
+ LOOP_DEVICE="$(losetup --show --find "${GRUB_DIR}"/efiboot.img 2>/dev/null)" || LOOP_DEVICE=""
+ if [ -n "$LOOP_DEVICE" ]; then
+ mount -o rw,flush -t vfat "${LOOP_DEVICE}" "${GRUB_EFI_TMPDIR}" >/dev/null 2>&1
+ fi
build_grub_image() {
local GRUB_ARCH="$1" EFI_ARCH="$2"
@@ -402,8 +406,7 @@ EOF
--output="/tmp/boot${EFI_ARCH,,}.efi" \
"boot/grub/grub.cfg"
if [ $? -ne 0 ]; then
- umount "$GRUB_EFI_TMPDIR"
- losetup --detach "${LOOP_DEVICE}"
+ [ -n "$LOOP_DEVICE" ] && { umount "$GRUB_EFI_TMPDIR"; losetup --detach "${LOOP_DEVICE}"; }
die "Failed to generate EFI loader"
fi
mkdir -p "${GRUB_EFI_TMPDIR}"/EFI/BOOT
@@ -426,8 +429,17 @@ EOF
build_grub_image arm64 aa64
;;
esac
- umount "$GRUB_EFI_TMPDIR"
- losetup --detach "${LOOP_DEVICE}"
+ if [ -n "$LOOP_DEVICE" ]; then
+ umount "$GRUB_EFI_TMPDIR"
+ losetup --detach "${LOOP_DEVICE}"
+ else
+ (cd "$GRUB_EFI_TMPDIR" && find . -type d | while read -r d; do
+ mmd -i "$GRUB_DIR/efiboot.img" "::${d#.}" 2>/dev/null || true
+ done)
+ (cd "$GRUB_EFI_TMPDIR" && find . -type f | while read -r f; do
+ mcopy -i "$GRUB_DIR/efiboot.img" "$f" "::${f#.}"
+ done)
+ fi
rm -rf "$GRUB_EFI_TMPDIR"
}
@@ -442,7 +454,7 @@ generate_squashfs() {
mkdir -p "$BUILDDIR/tmp-rootfs"
mkfs.ext3 -F -m1 "$BUILDDIR/tmp/LiveOS/ext3fs.img" >/dev/null 2>&1
mount -o loop "$BUILDDIR/tmp/LiveOS/ext3fs.img" "$BUILDDIR/tmp-rootfs"
- cp -a "$ROOTFS"/* "$BUILDDIR"/tmp-rootfs/
+ cp -a --one-file-system "$ROOTFS"/* "$BUILDDIR"/tmp-rootfs/
umount -f "$BUILDDIR/tmp-rootfs"
mkdir -p "$IMAGEDIR/LiveOS"