mirror of
https://gitlab.archlinux.org/tpowa/archboot.git
synced 2024-09-19 19:40:37 +02:00
use _DETECT_UEFI for PARTUUID and PARTLABEL support
This commit is contained in:
parent
cd6f834682
commit
0c68b5d685
3 changed files with 4 additions and 29 deletions
|
@ -96,7 +96,7 @@ freeze_xfs() {
|
||||||
|
|
||||||
## Setup kernel cmdline parameters to be added to bootloader configs
|
## Setup kernel cmdline parameters to be added to bootloader configs
|
||||||
bootloader_kernel_parameters() {
|
bootloader_kernel_parameters() {
|
||||||
if [[ "${GUID_DETECTED}" == "1" ]]; then
|
if [[ "${_DETECTED_UEFI_BOOT}" == "1" ]]; then
|
||||||
[[ "${NAME_SCHEME_PARAMETER}" == "PARTUUID" ]] && getrootpartuuid
|
[[ "${NAME_SCHEME_PARAMETER}" == "PARTUUID" ]] && getrootpartuuid
|
||||||
[[ "${NAME_SCHEME_PARAMETER}" == "PARTLABEL" ]] && getrootpartlabel
|
[[ "${NAME_SCHEME_PARAMETER}" == "PARTLABEL" ]] && getrootpartlabel
|
||||||
fi
|
fi
|
||||||
|
@ -664,9 +664,9 @@ if [ "\${grub_platform}" == "efi" ]; then
|
||||||
set _SPEC_UEFI_ARCH="aa64"
|
set _SPEC_UEFI_ARCH="aa64"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
# Include modules - required for boot
|
||||||
insmod part_gpt
|
insmod part_gpt
|
||||||
insmod part_msdos
|
insmod part_msdos
|
||||||
# Include fat fs module - required for uefi systems.
|
|
||||||
insmod fat
|
insmod fat
|
||||||
insmod ${BOOT_PART_FS}
|
insmod ${BOOT_PART_FS}
|
||||||
insmod ${ROOT_PART_FS}
|
insmod ${ROOT_PART_FS}
|
||||||
|
@ -720,9 +720,7 @@ if loadfont "\${_fontfile}" ; then
|
||||||
terminal_output gfxterm
|
terminal_output gfxterm
|
||||||
fi
|
fi
|
||||||
EOF
|
EOF
|
||||||
echo "" >> "${DESTDIR}/${GRUB_PREFIX_DIR}/${GRUB_CFG}"
|
|
||||||
[[ -e "/tmp/.device-names" ]] && sort "/tmp/.device-names" >> "${DESTDIR}/${GRUB_PREFIX_DIR}/${GRUB_CFG}"
|
[[ -e "/tmp/.device-names" ]] && sort "/tmp/.device-names" >> "${DESTDIR}/${GRUB_PREFIX_DIR}/${GRUB_CFG}"
|
||||||
echo "" >> "${DESTDIR}/${GRUB_PREFIX_DIR}/${GRUB_CFG}"
|
|
||||||
if [[ "${NAME_SCHEME_PARAMETER}" == "PARTUUID" ]] || [[ "${NAME_SCHEME_PARAMETER}" == "FSUUID" ]] ; then
|
if [[ "${NAME_SCHEME_PARAMETER}" == "PARTUUID" ]] || [[ "${NAME_SCHEME_PARAMETER}" == "FSUUID" ]] ; then
|
||||||
GRUB_ROOT_DRIVE="search --fs-uuid --no-floppy --set=root ${BOOT_PART_HINTS_STRING} ${BOOT_PART_FS_UUID}"
|
GRUB_ROOT_DRIVE="search --fs-uuid --no-floppy --set=root ${BOOT_PART_HINTS_STRING} ${BOOT_PART_FS_UUID}"
|
||||||
else
|
else
|
||||||
|
@ -792,7 +790,6 @@ EOF
|
||||||
## create example file for windows
|
## create example file for windows
|
||||||
cat << EOF >> "${DESTDIR}/${GRUB_PREFIX_DIR}/${GRUB_CFG}"
|
cat << EOF >> "${DESTDIR}/${GRUB_PREFIX_DIR}/${GRUB_CFG}"
|
||||||
if [ "\${grub_platform}" == "pc" ]; then
|
if [ "\${grub_platform}" == "pc" ]; then
|
||||||
|
|
||||||
## Microsoft Windows 10/11 BIOS
|
## Microsoft Windows 10/11 BIOS
|
||||||
#menuentry Microsoft Windows 10/11 BIOS-MBR {
|
#menuentry Microsoft Windows 10/11 BIOS-MBR {
|
||||||
# insmod part_msdos
|
# insmod part_msdos
|
||||||
|
|
|
@ -385,7 +385,7 @@ _mkfs() {
|
||||||
#shellcheck disable=SC2155
|
#shellcheck disable=SC2155
|
||||||
local _fslabel="$(getfslabel "${_device}")"
|
local _fslabel="$(getfslabel "${_device}")"
|
||||||
|
|
||||||
if [[ "${GUID_DETECTED}" == "1" ]]; then
|
if [[ "${_DETECTED_UEFI_BOOT}" == "1" ]]; then
|
||||||
#shellcheck disable=SC2155
|
#shellcheck disable=SC2155
|
||||||
local _partuuid="$(getpartuuid "${_device}")"
|
local _partuuid="$(getpartuuid "${_device}")"
|
||||||
#shellcheck disable=SC2155
|
#shellcheck disable=SC2155
|
||||||
|
@ -406,7 +406,7 @@ _mkfs() {
|
||||||
_device="LABEL=${_fslabel}"
|
_device="LABEL=${_fslabel}"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
if [[ "${GUID_DETECTED}" == "1" ]]; then
|
if [[ "${_DETECTED_UEFI_BOOT}" == "1" ]]; then
|
||||||
if [[ "${NAME_SCHEME_PARAMETER}" == "PARTUUID" ]]; then
|
if [[ "${NAME_SCHEME_PARAMETER}" == "PARTUUID" ]]; then
|
||||||
if [[ -n "${_partuuid}" ]]; then
|
if [[ -n "${_partuuid}" ]]; then
|
||||||
_device="PARTUUID=${_partuuid}"
|
_device="PARTUUID=${_partuuid}"
|
||||||
|
|
|
@ -1,22 +1,17 @@
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# created by Tobias Powalowski <tpowa@archlinux.org>
|
# created by Tobias Powalowski <tpowa@archlinux.org>
|
||||||
detect_DISC() {
|
detect_DISC() {
|
||||||
|
|
||||||
if [[ "${DISC}" == "" ]] || ! echo "${DISC}" | grep -q '/dev/'; then
|
if [[ "${DISC}" == "" ]] || ! echo "${DISC}" | grep -q '/dev/'; then
|
||||||
DISC="$(${_LSBLK} PKNAME "$(findmnt -vno SOURCE "${DESTDIR}/boot")")"
|
DISC="$(${_LSBLK} PKNAME "$(findmnt -vno SOURCE "${DESTDIR}/boot")")"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ "${DISC}" == "" ]]; then
|
if [[ "${DISC}" == "" ]]; then
|
||||||
DISC="$(${_LSBLK} PKNAME "$(findmnt -vno SOURCE "${DESTDIR}/")")"
|
DISC="$(${_LSBLK} PKNAME "$(findmnt -vno SOURCE "${DESTDIR}/")")"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
check_gpt() {
|
check_gpt() {
|
||||||
|
|
||||||
GUID_DETECTED=""
|
GUID_DETECTED=""
|
||||||
[[ "$(${_BLKID} -p -i -o value -s PTTYPE "${DISC}")" == "gpt" ]] && GUID_DETECTED="1"
|
[[ "$(${_BLKID} -p -i -o value -s PTTYPE "${DISC}")" == "gpt" ]] && GUID_DETECTED="1"
|
||||||
|
|
||||||
if [[ "${GUID_DETECTED}" == "" ]]; then
|
if [[ "${GUID_DETECTED}" == "" ]]; then
|
||||||
DIALOG --yesno "Setup detected no GUID (gpt) partition table on ${DISC}.\n\nDo you want to convert the existing MBR table in ${DISC} to a GUID (gpt) partition table?" 0 0 || return 1
|
DIALOG --yesno "Setup detected no GUID (gpt) partition table on ${DISC}.\n\nDo you want to convert the existing MBR table in ${DISC} to a GUID (gpt) partition table?" 0 0 || return 1
|
||||||
sgdisk --mbrtogpt "${DISC}" > "${LOG}" && GUID_DETECTED="1"
|
sgdisk --mbrtogpt "${DISC}" > "${LOG}" && GUID_DETECTED="1"
|
||||||
|
@ -34,13 +29,11 @@ check_gpt() {
|
||||||
GUID_DETECTED="1"
|
GUID_DETECTED="1"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ "${GUID_DETECTED}" == "1" ]]; then
|
if [[ "${GUID_DETECTED}" == "1" ]]; then
|
||||||
### This check is not enabled in any function yet!
|
### This check is not enabled in any function yet!
|
||||||
if [[ "${CHECK_UEFISYS_PART}" == "1" ]]; then
|
if [[ "${CHECK_UEFISYS_PART}" == "1" ]]; then
|
||||||
check_efisys_part
|
check_efisys_part
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ "${CHECK_BIOS_BOOT_GRUB}" == "1" ]]; then
|
if [[ "${CHECK_BIOS_BOOT_GRUB}" == "1" ]]; then
|
||||||
if ! sgdisk -p "${DISC}" | grep -q 'EF02'; then
|
if ! sgdisk -p "${DISC}" | grep -q 'EF02'; then
|
||||||
DIALOG --msgbox "Setup detected no BIOS BOOT PARTITION in ${DISC}. Please create a >=1 MB BIOS Boot partition for grub BIOS GPT support." 0 0
|
DIALOG --msgbox "Setup detected no BIOS BOOT PARTITION in ${DISC}. Please create a >=1 MB BIOS Boot partition for grub BIOS GPT support." 0 0
|
||||||
|
@ -48,7 +41,6 @@ check_gpt() {
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ "${RUN_CFDISK}" == "1" ]]; then
|
if [[ "${RUN_CFDISK}" == "1" ]]; then
|
||||||
DIALOG --msgbox "Now you'll be put into cfdisk where you can partition your storage drive. You should make a swap partition and as many data partitions as you will need." 7 60
|
DIALOG --msgbox "Now you'll be put into cfdisk where you can partition your storage drive. You should make a swap partition and as many data partitions as you will need." 7 60
|
||||||
clear && cfdisk "${DISC}"
|
clear && cfdisk "${DISC}"
|
||||||
|
@ -59,9 +51,7 @@ check_gpt() {
|
||||||
|
|
||||||
## check and mount EFISYS partition at ${UEFISYS_MOUNTPOINT}
|
## check and mount EFISYS partition at ${UEFISYS_MOUNTPOINT}
|
||||||
check_efisys_part() {
|
check_efisys_part() {
|
||||||
|
|
||||||
detect_DISC
|
detect_DISC
|
||||||
|
|
||||||
if [[ "$(${_BLKID} -p -i -o value -s PTTYPE "${DISC}")" != "gpt" ]]; then
|
if [[ "$(${_BLKID} -p -i -o value -s PTTYPE "${DISC}")" != "gpt" ]]; then
|
||||||
GUID_DETECTED=""
|
GUID_DETECTED=""
|
||||||
DIALOG --defaultno --yesno "Setup detected no GUID (gpt) partition table on ${DISC}.\nUEFI boot requires ${DISC} to be partitioned as GPT.\n\nDo you want to convert the existing MBR table in ${DISC} to a GUID (gpt) partition table?" 0 0 || return 1
|
DIALOG --defaultno --yesno "Setup detected no GUID (gpt) partition table on ${DISC}.\nUEFI boot requires ${DISC} to be partitioned as GPT.\n\nDo you want to convert the existing MBR table in ${DISC} to a GUID (gpt) partition table?" 0 0 || return 1
|
||||||
|
@ -73,58 +63,46 @@ check_efisys_part() {
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ! sgdisk -p "${DISC}" | grep -q 'EF00'; then
|
if ! sgdisk -p "${DISC}" | grep -q 'EF00'; then
|
||||||
# Windows 10 recommends a minimum of 260MB Efi Systen Partition
|
# Windows 10 recommends a minimum of 260MB Efi Systen Partition
|
||||||
DIALOG --msgbox "Setup detected no EFI System partition in ${DISC}. You will now be put into cfdisk. Please create a >= 260 MB partition with cfdisk type EFI System .\nWhen prompted (later) to format as FAT32, say YES.\nIf you already have a >=260 MB FAT32 EFI System partition, check whether that partition has EFI System cfdisk type code." 0 0
|
DIALOG --msgbox "Setup detected no EFI System partition in ${DISC}. You will now be put into cfdisk. Please create a >= 260 MB partition with cfdisk type EFI System .\nWhen prompted (later) to format as FAT32, say YES.\nIf you already have a >=260 MB FAT32 EFI System partition, check whether that partition has EFI System cfdisk type code." 0 0
|
||||||
clear && cfdisk "${DISC}"
|
clear && cfdisk "${DISC}"
|
||||||
RUN_CFDISK=""
|
RUN_CFDISK=""
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if sgdisk -p "${DISC}" | grep -q 'EF00'; then
|
if sgdisk -p "${DISC}" | grep -q 'EF00'; then
|
||||||
# check on unique PARTTYPE c12a7328-f81f-11d2-ba4b-00a0c93ec93b for EFI System Partition type UUID
|
# check on unique PARTTYPE c12a7328-f81f-11d2-ba4b-00a0c93ec93b for EFI System Partition type UUID
|
||||||
UEFISYS_PART="$(${_LSBLK} NAME,PARTTYPE "${DISC}" | grep 'c12a7328-f81f-11d2-ba4b-00a0c93ec93b' | cut -d " " -f1)"
|
UEFISYS_PART="$(${_LSBLK} NAME,PARTTYPE "${DISC}" | grep 'c12a7328-f81f-11d2-ba4b-00a0c93ec93b' | cut -d " " -f1)"
|
||||||
|
|
||||||
if [[ "$(${_LSBLK} FSTYPE "${UEFISYS_PART}")" != "vfat" ]]; then
|
if [[ "$(${_LSBLK} FSTYPE "${UEFISYS_PART}")" != "vfat" ]]; then
|
||||||
## Check whether EFISYS is FAT, otherwise inform the user and offer to format the partition as FAT32.
|
## Check whether EFISYS is FAT, otherwise inform the user and offer to format the partition as FAT32.
|
||||||
DIALOG --defaultno --yesno "Detected EFI System partition ${UEFISYS_PART} does not appear to be FAT formatted. UEFI Specification requires EFI System partition to be FAT32 formatted. Do you want to format ${UEFISYS_PART} as FAT32?\nNote: Setup will proceed even if you select NO. Some systems like Apple Macs may work with Non-FAT EFI System partition. However the installed system is not in conformance with UEFI Spec., and MAY NOT boot properly." 0 0 && _FORMAT_UEFISYS_FAT32="1"
|
DIALOG --defaultno --yesno "Detected EFI System partition ${UEFISYS_PART} does not appear to be FAT formatted. UEFI Specification requires EFI System partition to be FAT32 formatted. Do you want to format ${UEFISYS_PART} as FAT32?\nNote: Setup will proceed even if you select NO. Some systems like Apple Macs may work with Non-FAT EFI System partition. However the installed system is not in conformance with UEFI Spec., and MAY NOT boot properly." 0 0 && _FORMAT_UEFISYS_FAT32="1"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ "$(${_LSBLK} FSTYPE "${UEFISYS_PART}")" == "vfat" ]] && [[ "$(${_BLKID} -p -i -o value -s VERSION "${UEFISYS_PART}")" != "FAT32" ]]; then
|
if [[ "$(${_LSBLK} FSTYPE "${UEFISYS_PART}")" == "vfat" ]] && [[ "$(${_BLKID} -p -i -o value -s VERSION "${UEFISYS_PART}")" != "FAT32" ]]; then
|
||||||
## Check whether EFISYS is FAT32 (specifically), otherwise warn the user about compatibility issues with UEFI Spec.
|
## Check whether EFISYS is FAT32 (specifically), otherwise warn the user about compatibility issues with UEFI Spec.
|
||||||
DIALOG --defaultno --yesno "Detected EFI System partition ${UEFISYS_PART} does not appear to be FAT32 formatted. Do you want to format ${UEFISYS_PART} as FAT32?\nNote: Setup will proceed even if you select NO. Most systems will boot fine even with FAT16 or FAT12 EFI System partition, however some firmwares may refuse to boot with a non-FAT32 EFI System partition. It is recommended to use FAT32 for maximum compatibility with UEFI Spec." 0 0 && _FORMAT_UEFISYS_FAT32="1"
|
DIALOG --defaultno --yesno "Detected EFI System partition ${UEFISYS_PART} does not appear to be FAT32 formatted. Do you want to format ${UEFISYS_PART} as FAT32?\nNote: Setup will proceed even if you select NO. Most systems will boot fine even with FAT16 or FAT12 EFI System partition, however some firmwares may refuse to boot with a non-FAT32 EFI System partition. It is recommended to use FAT32 for maximum compatibility with UEFI Spec." 0 0 && _FORMAT_UEFISYS_FAT32="1"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
#autodetect efisys mountpoint, on fail ask for mountpoint
|
#autodetect efisys mountpoint, on fail ask for mountpoint
|
||||||
UEFISYS_MOUNTPOINT="/$(basename "$(mount | grep "${UEFISYS_PART}" | cut -d " " -f 3)")"
|
UEFISYS_MOUNTPOINT="/$(basename "$(mount | grep "${UEFISYS_PART}" | cut -d " " -f 3)")"
|
||||||
if [[ "${UEFISYS_MOUNTPOINT}" == "/" ]]; then
|
if [[ "${UEFISYS_MOUNTPOINT}" == "/" ]]; then
|
||||||
DIALOG --inputbox "Enter the mountpoint of your EFI System partition (Default is /boot): " 0 0 "/boot" 2>"${ANSWER}" || return 1
|
DIALOG --inputbox "Enter the mountpoint of your EFI System partition (Default is /boot): " 0 0 "/boot" 2>"${ANSWER}" || return 1
|
||||||
UEFISYS_MOUNTPOINT="$(cat "${ANSWER}")"
|
UEFISYS_MOUNTPOINT="$(cat "${ANSWER}")"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
umount "${DESTDIR}/${UEFISYS_MOUNTPOINT}" &> /dev/null
|
umount "${DESTDIR}/${UEFISYS_MOUNTPOINT}" &> /dev/null
|
||||||
umount "${UEFISYS_PART}" &> /dev/null
|
umount "${UEFISYS_PART}" &> /dev/null
|
||||||
|
|
||||||
if [[ "${_FORMAT_UEFISYS_FAT32}" == "1" ]]; then
|
if [[ "${_FORMAT_UEFISYS_FAT32}" == "1" ]]; then
|
||||||
mkfs.vfat -F32 -n "EFISYS" "${UEFISYS_PART}"
|
mkfs.vfat -F32 -n "EFISYS" "${UEFISYS_PART}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
mkdir -p "${DESTDIR}/${UEFISYS_MOUNTPOINT}"
|
mkdir -p "${DESTDIR}/${UEFISYS_MOUNTPOINT}"
|
||||||
|
|
||||||
if [[ "$(${_LSBLK} FSTYPE "${UEFISYS_PART}")" == "vfat" ]]; then
|
if [[ "$(${_LSBLK} FSTYPE "${UEFISYS_PART}")" == "vfat" ]]; then
|
||||||
mount -o rw,flush -t vfat "${UEFISYS_PART}" "${DESTDIR}/${UEFISYS_MOUNTPOINT}"
|
mount -o rw,flush -t vfat "${UEFISYS_PART}" "${DESTDIR}/${UEFISYS_MOUNTPOINT}"
|
||||||
else
|
else
|
||||||
DIALOG --msgbox "${UEFISYS_PART} is not formatted using FAT filesystem. Setup will go ahead but there might be issues using non-FAT FS for EFI System partition." 0 0
|
DIALOG --msgbox "${UEFISYS_PART} is not formatted using FAT filesystem. Setup will go ahead but there might be issues using non-FAT FS for EFI System partition." 0 0
|
||||||
|
|
||||||
mount -o rw "${UEFISYS_PART}" "${DESTDIR}/${UEFISYS_MOUNTPOINT}"
|
mount -o rw "${UEFISYS_PART}" "${DESTDIR}/${UEFISYS_MOUNTPOINT}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
mkdir -p "${DESTDIR}/${UEFISYS_MOUNTPOINT}/EFI" || true
|
mkdir -p "${DESTDIR}/${UEFISYS_MOUNTPOINT}/EFI" || true
|
||||||
else
|
else
|
||||||
DIALOG --msgbox "Setup did not find any EFI System partition in ${DISC}. Please create >= 260 MB FAT32 partition with cfdisk type EFI System code and try again." 0 0
|
DIALOG --msgbox "Setup did not find any EFI System partition in ${DISC}. Please create >= 260 MB FAT32 partition with cfdisk type EFI System code and try again." 0 0
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
partition() {
|
partition() {
|
||||||
|
|
Loading…
Reference in a new issue