Improve support for 32-bit EFI firmware in ISOs and installer

mklive:
- include support for booting both 32- and 64-bit UEFI firmware with
  32- and 64-bit images.
- require grub packages for both firmware bitness types
  (build-x86-images)

Installer:
- include support for installing both 32- and 64-bit UEFI grub loaders
- detect UEFI platform (firmware) bitness at install time

Closes: #102 [via git-merge-pr]
This commit is contained in:
masato9000 2017-02-21 14:38:01 -08:00 committed by Michael Aldridge
parent fe57bb4b06
commit a4b3dd36c9
3 changed files with 36 additions and 33 deletions

View File

@ -25,10 +25,7 @@ readonly KDE_IMG=void-live-${ARCH}-${DATE}-kde.iso
readonly LXDE_IMG=void-live-${ARCH}-${DATE}-lxde.iso
readonly LXQT_IMG=void-live-${ARCH}-${DATE}-lxqt.iso
case "$ARCH" in
i686*) GRUB="grub";;
x86_64*) GRUB="grub-x86_64-efi";;
esac
readonly GRUB="grub-i386-efi grub-x86_64-efi"
readonly BASE_PKGS="dialog cryptsetup lvm2 mdadm $GRUB"
readonly X_PKGS="$BASE_PKGS xorg-minimal xorg-input-drivers xorg-video-drivers setxkbmap xauth font-misc-misc terminus-font dejavu-fonts-ttf alsa-plugins-pulseaudio"

View File

@ -60,6 +60,12 @@ fi
# Detect if this is an EFI system.
if [ -e /sys/firmware/efi/systab ]; then
EFI_SYSTEM=1
EFI_FW_BITS=$(cat /sys/firmware/efi/fw_platform_size)
if [ $EFI_FW_BITS -eq 32 ]; then
EFI_TARGET=i386-efi
else
EFI_TARGET=x86_64-efi
fi
fi
# dialog colors
@ -768,7 +774,7 @@ set_bootloader() {
# Check if it's an EFI system via efivars module.
if [ -n "$EFI_SYSTEM" ]; then
grub_args="--target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=void_grub --recheck"
grub_args="--target=$EFI_TARGET --efi-directory=/boot/efi --bootloader-id=void_grub --recheck"
fi
echo "Running grub-install $grub_args $dev..." >$LOG
chroot $TARGETDIR grub-install $grub_args $dev >$LOG 2>&1
@ -1137,7 +1143,11 @@ install_packages() {
local _grub= _syspkg=
if [ -n "$EFI_SYSTEM" ]; then
_grub="grub-x86_64-efi"
if [ $EFI_FW_BITS -eq 32 ]; then
_grub="grub-i386-efi"
else
_grub="grub-x86_64-efi"
fi
else
_grub="grub"
fi

View File

@ -210,7 +210,7 @@ generate_grub_efi_boot() {
modprobe -q loop || :
# Create EFI vfat image.
truncate -s 16M $GRUB_DIR/efiboot.img >/dev/null 2>&1
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
GRUB_EFI_TMPDIR="$(mktemp --tmpdir=$HOME -d)"
@ -218,33 +218,29 @@ generate_grub_efi_boot() {
mount -o rw,flush -t vfat "${LOOP_DEVICE}" "${GRUB_EFI_TMPDIR}" >/dev/null 2>&1
cp -a $IMAGEDIR/boot $VOIDHOSTDIR
if [ $BASE_ARCH = "i686" ]; then
xbps-uchroot $VOIDHOSTDIR grub-mkstandalone -- \
--directory="/usr/lib/grub/i386-efi" \
--format="i386-efi" \
--output="/tmp/bootia32.efi" \
"boot/grub/grub.cfg"
if [ $? -ne 0 ]; then
umount "$GRUB_EFI_TMPDIR"
losetup --detach "${LOOP_DEVICE}"
die "Failed to generate EFI loader"
fi
mkdir -p ${GRUB_EFI_TMPDIR}/EFI/BOOT
cp -f $VOIDHOSTDIR/tmp/bootia32.efi ${GRUB_EFI_TMPDIR}/EFI/BOOT/BOOTIA32.EFI
else
xbps-uchroot $VOIDHOSTDIR grub-mkstandalone -- \
--directory="/usr/lib/grub/x86_64-efi" \
--format="x86_64-efi" \
--output="/tmp/bootx64.efi" \
"boot/grub/grub.cfg"
if [ $? -ne 0 ]; then
umount "$GRUB_EFI_TMPDIR"
losetup --detach "${LOOP_DEVICE}"
die "Failed to generate EFI loader"
fi
mkdir -p ${GRUB_EFI_TMPDIR}/EFI/BOOT
cp -f $VOIDHOSTDIR/tmp/bootx64.efi ${GRUB_EFI_TMPDIR}/EFI/BOOT/BOOTX64.EFI
xbps-uchroot $VOIDHOSTDIR grub-mkstandalone -- \
--directory="/usr/lib/grub/i386-efi" \
--format="i386-efi" \
--output="/tmp/bootia32.efi" \
"boot/grub/grub.cfg"
if [ $? -ne 0 ]; then
umount "$GRUB_EFI_TMPDIR"
losetup --detach "${LOOP_DEVICE}"
die "Failed to generate EFI loader"
fi
mkdir -p ${GRUB_EFI_TMPDIR}/EFI/BOOT
cp -f $VOIDHOSTDIR/tmp/bootia32.efi ${GRUB_EFI_TMPDIR}/EFI/BOOT/BOOTIA32.EFI
xbps-uchroot $VOIDHOSTDIR grub-mkstandalone -- \
--directory="/usr/lib/grub/x86_64-efi" \
--format="x86_64-efi" \
--output="/tmp/bootx64.efi" \
"boot/grub/grub.cfg"
if [ $? -ne 0 ]; then
umount "$GRUB_EFI_TMPDIR"
losetup --detach "${LOOP_DEVICE}"
die "Failed to generate EFI loader"
fi
cp -f $VOIDHOSTDIR/tmp/bootx64.efi ${GRUB_EFI_TMPDIR}/EFI/BOOT/BOOTX64.EFI
umount "$GRUB_EFI_TMPDIR"
losetup --detach "${LOOP_DEVICE}"
rm -rf $GRUB_EFI_TMPDIR