1. In UEFI USB booting, gummiboot with EFISTUB or EFILINUX will be

used instead of GRUB. In UEFI CD booting, nothing is changed

2. Re-organized EFISTUB part of setup script and separated common and
refind-specific parts.

3. Added code for gummiboot-efi-* and efilinux-efi-* (for LTS kernels,
without CONFIG_EFI_STUB).
This commit is contained in:
Tobias Powalowski 2012-09-17 13:51:51 +02:00
parent 37f0434482
commit a03de7db82
4 changed files with 390 additions and 229 deletions

View file

@ -9,6 +9,11 @@
_BASENAME="$(basename "${0}")"
[[ -z "${_UEFI_ARCH}" ]] && _UEFI_ARCH="x86_64"
[[ "${_UEFI_ARCH}" == "x86_64" ]] && _SPEC_UEFI_ARCH="x64"
[[ "${_UEFI_ARCH}" == "i386" ]] && _SPEC_UEFI_ARCH="ia32"
usage () {
echo "${_BASENAME}: usage"
echo "CREATE ALLINONE USB/CD IMAGES"
@ -206,14 +211,14 @@ _download_uefi_shell_tianocore() {
mkdir -p "${ALLINONE}/EFI/tools/"
## Download Tianocore UDK/EDK2 ShellBinPkg UEFI "Full Shell" - For UEFI Spec. >=2.3 systems
curl --verbose -f -C - --ftp-pasv --retry 3 --retry-delay 3 -o "${ALLINONE}/EFI/tools/shellx64.efi" "https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2/ShellBinPkg/UefiShell/X64/Shell.efi"
curl --verbose -f -C - --ftp-pasv --retry 3 --retry-delay 3 -o "${ALLINONE}/EFI/tools/shellx64_v2.efi" "https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2/ShellBinPkg/UefiShell/X64/Shell.efi"
## Download Tianocore UDK/EDK2 EdkShellBinPkg UEFI "Full Shell" - For UEFI Spec. <2.3 systems
curl --verbose -f -C - --ftp-pasv --retry 3 --retry-delay 3 -o "${ALLINONE}/EFI/tools/shellx64_old.efi" "https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2/EdkShellBinPkg/FullShell/X64/Shell_Full.efi"
curl --verbose -f -C - --ftp-pasv --retry 3 --retry-delay 3 -o "${ALLINONE}/EFI/tools/shellx64_v1.efi" "https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2/EdkShellBinPkg/FullShell/X64/Shell_Full.efi"
}
_download_uefi_refind_sourceforge() {
_download_uefi_refind_bin_sourceforge() {
mkdir -p "${ALLINONE}/packages/"
@ -222,10 +227,45 @@ _download_uefi_refind_sourceforge() {
}
_prepare_grub_uefi_arch_specific_iso_files() {
_prepare_uefi_gummiboot_USB_files() {
[[ "${_UEFI_ARCH}" == "x86_64" ]] && _SPEC_UEFI_ARCH="x64"
[[ "${_UEFI_ARCH}" == "i386" ]] && _SPEC_UEFI_ARCH="ia32"
mkdir -p "${ALLINONE}/EFI/boot"
cp -f "/boot/efi/EFI/arch/gummiboot/gummiboot${_SPEC_UEFI_ARCH}.efi" "${ALLINONE}/EFI/boot/boot${_SPEC_UEFI_ARCH}.efi"
cp -f "/boot/efi/EFI/arch/efilinux/efilinux${_SPEC_UEFI_ARCH}.efi" "${ALLINONE}/EFI/boot/efilinux${_SPEC_UEFI_ARCH}.efi"
mkdir -p "${ALLINONE}/loader/entries/"
cat << EOF > "${ALLINONE}/loader/entries/loader.conf"
timeout 3
default archboot-${_UEFI_ARCH}
EOF
cat << EOF > "${ALLINONE}/loader/entries/archboot-${_UEFI_ARCH}.conf"
title Arch Linux (${_UEFI_ARCH}) archboot
linux /boot/vmlinuz_${_UEFI_ARCH}
initrd /boot/initramfs_${_UEFI_ARCH}.img
options gpt loglevel=7 add_efi_memmap none=UEFI_ARCH_${_UEFI_ARCH}
EOF
cat << EOF > "${ALLINONE}/loader/entries/archboot-${_UEFI_ARCH}-lts.conf"
title Arch Linux LTS (${_UEFI_ARCH}) archboot
efi /EFI/boot/efilinux${_SPEC_UEFI_ARCH}.efi
options -f \\boot\\vmlinuz_x86_64_lts gpt loglevel=7 add_efi_memmap none=UEFI_ARCH_${_UEFI_ARCH} initrd=\\boot\\initramfs_${_UEFI_ARCH}.img
EOF
cat << EOF > "${ALLINONE}/loader/entries/uefi-shell-${_UEFI_ARCH}-v2.conf"
title UEFI ${_UEFI_ARCH} Shell v2 - For Spec. Ver. >=2.3 systems
efi /EFI/tools/shell${_SPEC_UEFI_ARCH}_v2.efi
EOF
cat << EOF > "${ALLINONE}/loader/entries/uefi-shell-${_UEFI_ARCH}-v1.conf"
title UEFI ${_UEFI_ARCH} Shell v1 - For Spec. Ver. <2.3 systems
efi /EFI/tools/shell${_SPEC_UEFI_ARCH}_v1.efi
EOF
}
_prepare_grub_uefi_arch_specific_CD_files() {
mkdir -p "${ALLINONE}/boot/grub"
@ -267,20 +307,13 @@ EOF
rm -f "${ALLINONE}/boot/grub/grub.cfg"
mkdir -p "${ALLINONE}/EFI/boot/"
cp -f "${grub_uefi_mp}/EFI/boot/boot${_SPEC_UEFI_ARCH}.efi" "${ALLINONE}/EFI/boot/boot${_SPEC_UEFI_ARCH}.efi"
unset _UEFI_ARCH
unset _SPEC_UEFI_ARCH
}
_prepare_grub_uefi_iso_files() {
_prepare_grub_uefi_CD_files() {
grub_uefi_mp="$(mktemp -d /tmp/grub_uefi_mp.XXX)"
mkdir -p "${ALLINONE}/boot/grub"
mkdir -p "${ALLINONE}/EFI/boot"
# Create a blank image to be converted to ESP IMG
dd if="/dev/zero" of="${ALLINONE}/boot/grub/grub_uefi_x86_64.bin" bs="1024" count="4096"
@ -298,8 +331,7 @@ _prepare_grub_uefi_iso_files() {
mkdir -p "${grub_uefi_mp}/EFI/boot/"
_UEFI_ARCH="x86_64"
_prepare_grub_uefi_arch_specific_iso_files
_prepare_grub_uefi_arch_specific_CD_files
# umount images and loop
umount "${grub_uefi_mp}"
@ -444,14 +476,14 @@ EOF
if [ "\${grub_platform}" == "efi" ]; then
menuentry "UEFI \${_UEFI_ARCH} Shell 2.0 - For Spec. Ver. >=2.3 systems" {
menuentry "UEFI \${_UEFI_ARCH} Shell v2 - For Spec. Ver. >=2.3 systems" {
set root="\${archboot}"
chainloader /EFI/tools/shell\${_SPEC_UEFI_ARCH}.efi
chainloader /EFI/tools/shell\${_SPEC_UEFI_ARCH}_v2.efi
}
menuentry "UEFI \${_UEFI_ARCH} Shell 1.0 - For Spec. Ver. <2.3 systems" {
menuentry "UEFI \${_UEFI_ARCH} Shell v1 - For Spec. Ver. <2.3 systems" {
set root="\${archboot}"
chainloader /EFI/tools/shell\${_SPEC_UEFI_ARCH}_old.efi
chainloader /EFI/tools/shell\${_SPEC_UEFI_ARCH}_v1.efi
}
fi
@ -470,9 +502,14 @@ _prepare_kernel_initramfs_files
_download_uefi_shell_tianocore
_download_uefi_refind_sourceforge
# _download_uefi_refind_bin_sourceforge
_prepare_grub_uefi_iso_files
_prepare_uefi_gummiboot_USB_files
_prepare_grub_uefi_CD_files
unset _UEFI_ARCH
unset _SPEC_UEFI_ARCH
# place syslinux files
mv "${CORE}/tmp"/*/boot/syslinux/* "${ALLINONE}/boot/syslinux/"
@ -508,12 +545,12 @@ xorriso -as mkisofs \
# "${USBIMAGE_HELPER}" "${ALLINONE}" "${IMAGENAME}.img" > /dev/null 2>&1
if [[ -e "${WD}/${IMAGENAME_OLD}-dual.iso" ]] && [[ ! -e "${WD}/${IMAGENAME_OLD}-x86_64.iso" ]]; then
_REMOVE_i686="1" _REMOVE_x86_64="0" _UPDATE_SETUP="0" _UPDATE_UEFI_SHELL="0" _UPDATE_UEFI_REFIND="0" _UPDATE_SYSLINUX="0" _UPDATE_SYSLINUX_CONFIG="1" _UPDATE_GRUB_UEFI="0" _UPDATE_GRUB_UEFI_CONFIG="1" "${UPDATEISO_HELPER}" "${WD}/${IMAGENAME_OLD}-dual.iso"
_REMOVE_i686="1" _REMOVE_x86_64="0" _UPDATE_SETUP="0" _UPDATE_UEFI_SHELL="0" _UPDATE_UEFI_REFIND_BIN="0" _UPDATE_UEFI_GUMMIBOOT="0" _UPDATE_SYSLINUX="0" _UPDATE_SYSLINUX_CONFIG="1" _UPDATE_GRUB_UEFI="0" _UPDATE_GRUB_UEFI_CONFIG="1" "${UPDATEISO_HELPER}" "${WD}/${IMAGENAME_OLD}-dual.iso"
mv "${WD}/${IMAGENAME_OLD}-dual-updated-x86_64.iso" "${WD}/${IMAGENAME_OLD}-x86_64.iso"
fi
if [[ -e "${WD}/${IMAGENAME_OLD}-dual.iso" ]] && [[ ! -e "${WD}/${IMAGENAME_OLD}-i686.iso" ]]; then
_REMOVE_i686="0" _REMOVE_x86_64="1" _UPDATE_SETUP="0" _UPDATE_UEFI_SHELL="0" _UPDATE_UEFI_REFIND="0" _UPDATE_SYSLINUX="0" _UPDATE_SYSLINUX_CONFIG="1" _UPDATE_GRUB_UEFI="0" _UPDATE_GRUB_UEFI_CONFIG="1" "${UPDATEISO_HELPER}" "${WD}/${IMAGENAME_OLD}-dual.iso"
_REMOVE_i686="0" _REMOVE_x86_64="1" _UPDATE_SETUP="0" _UPDATE_UEFI_SHELL="0" _UPDATE_UEFI_REFIND_BIN="0" _UPDATE_UEFI_GUMMIBOOT="0" _UPDATE_SYSLINUX="0" _UPDATE_SYSLINUX_CONFIG="1" _UPDATE_GRUB_UEFI="0" _UPDATE_GRUB_UEFI_CONFIG="1" "${UPDATEISO_HELPER}" "${WD}/${IMAGENAME_OLD}-dual.iso"
mv "${WD}/${IMAGENAME_OLD}-dual-updated-i686.iso" "${WD}/${IMAGENAME_OLD}-i686.iso"
fi

View file

@ -7,7 +7,8 @@
[[ -z "${_UPDATE_SETUP}" ]] && _UPDATE_SETUP="1"
[[ -z "${_UPDATE_UEFI_SHELL}" ]] && _UPDATE_UEFI_SHELL="1"
[[ -z "${_UPDATE_UEFI_REFIND}" ]] && _UPDATE_UEFI_REFIND="1"
[[ -z "${_UPDATE_UEFI_REFIND_BIN}" ]] && _UPDATE_UEFI_REFIND_BIN="1"
[[ -z "${_UPDATE_UEFI_GUMMIBOOT}" ]] && _UPDATE_UEFI_GUMMIBOOT="1"
[[ -z "${_UPDATE_SYSLINUX}" ]] && _UPDATE_SYSLINUX="1"
[[ -z "${_UPDATE_SYSLINUX_CONFIG}" ]] && _UPDATE_SYSLINUX_CONFIG="1"
@ -17,6 +18,11 @@
[[ "${_UPDATE_SYSLINUX}" == "1" ]] && _UPDATE_SYSLINUX_CONFIG="1"
[[ "${_UPDATE_GRUB_UEFI}" == "1" ]] && _UPDATE_GRUB_UEFI_CONFIG="1"
[[ -z "${_UEFI_ARCH}" ]] && _UEFI_ARCH="x86_64"
[[ "${_UEFI_ARCH}" == "x86_64" ]] && _SPEC_UEFI_ARCH="x64"
[[ "${_UEFI_ARCH}" == "i386" ]] && _SPEC_UEFI_ARCH="ia32"
#############################
_BASENAME="$(basename "${0}")"
@ -262,56 +268,56 @@ _download_uefi_shell_tianocore() {
mkdir -p "${_ARCHBOOT_ISO_EXT_DIR}/EFI/tools/"
mv "${_ARCHBOOT_ISO_EXT_DIR}/EFI/shell/shellx64.efi" "${_ARCHBOOT_ISO_EXT_DIR}/EFI/tools/shellx64.efi" || true
mv "${_ARCHBOOT_ISO_EXT_DIR}/EFI/shell/shellx64_old.efi" "${_ARCHBOOT_ISO_EXT_DIR}/EFI/tools/shellx64_old.efi" || true
mv "${_ARCHBOOT_ISO_EXT_DIR}/EFI/tools/shellx64.efi" "${_ARCHBOOT_ISO_EXT_DIR}/EFI/tools/shellx64_v2.efi" || true
mv "${_ARCHBOOT_ISO_EXT_DIR}/EFI/tools/shellx64_old.efi" "${_ARCHBOOT_ISO_EXT_DIR}/EFI/tools/shellx64_v1.efi" || true
rm -rf "${_ARCHBOOT_ISO_EXT_DIR}/EFI/shell/" || true
echo
## Download Tianocore UDK/EDK2 ShellBinPkg UEFI x86_64 "Full Shell" - For Spec. Ver. >=2.3 systems
mv "${_ARCHBOOT_ISO_EXT_DIR}/EFI/tools/shellx64.efi" "${_ARCHBOOT_ISO_EXT_DIR}/EFI/tools/shellx64.efi.backup" || true
mv "${_ARCHBOOT_ISO_EXT_DIR}/EFI/tools/shellx64_v2.efi" "${_ARCHBOOT_ISO_EXT_DIR}/EFI/tools/shellx64_v2.efi.backup" || true
echo
if [[ -e "${_ARCHBOOT_ISO_WD}/shellx64.efi" ]]; then
cp -f "${_ARCHBOOT_ISO_WD}/shellx64.efi" "${_ARCHBOOT_ISO_EXT_DIR}/EFI/tools/shellx64.efi"
if [[ -e "${_ARCHBOOT_ISO_WD}/shellx64_v2.efi" ]]; then
cp -f "${_ARCHBOOT_ISO_WD}/shellx64_v2.efi" "${_ARCHBOOT_ISO_EXT_DIR}/EFI/tools/shellx64_v2.efi"
echo
else
curl --verbose -f -C - --ftp-pasv --retry 3 --retry-delay 3 -o "${_ARCHBOOT_ISO_EXT_DIR}/EFI/tools/shellx64.efi" "https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2/ShellBinPkg/UefiShell/X64/Shell.efi" || true
curl --verbose -f -C - --ftp-pasv --retry 3 --retry-delay 3 -o "${_ARCHBOOT_ISO_EXT_DIR}/EFI/tools/shellx64_v2.efi" "https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2/ShellBinPkg/UefiShell/X64/Shell.efi" || true
echo
if [[ ! "$(file "${_ARCHBOOT_ISO_EXT_DIR}/EFI/tools/shellx64.efi" | grep 'executable')" ]]; then
rm -f "${_ARCHBOOT_ISO_EXT_DIR}/EFI/tools/shellx64.efi" || true
mv "${_ARCHBOOT_ISO_EXT_DIR}/EFI/tools/shellx64.efi.backup" "${_ARCHBOOT_ISO_EXT_DIR}/EFI/tools/shellx64.efi" || true
if [[ ! "$(file "${_ARCHBOOT_ISO_EXT_DIR}/EFI/tools/shellx64_v2.efi" | grep 'executable')" ]]; then
rm -f "${_ARCHBOOT_ISO_EXT_DIR}/EFI/tools/shellx64_v2.efi" || true
mv "${_ARCHBOOT_ISO_EXT_DIR}/EFI/tools/shellx64_v2.efi.backup" "${_ARCHBOOT_ISO_EXT_DIR}/EFI/tools/shellx64_v2.efi" || true
fi
fi
rm -f "${_ARCHBOOT_ISO_EXT_DIR}/EFI/tools/shellx64.efi.backup" || true
rm -f "${_ARCHBOOT_ISO_EXT_DIR}/EFI/tools/shellx64_v2.efi.backup" || true
echo
## Download Tianocore UDK/EDK2 EdkShellBinPkg UEFI x86_64 "Full Shell" - For Spec. Ver. <2.3 systems
mv "${_ARCHBOOT_ISO_EXT_DIR}/EFI/tools/shellx64_old.efi" "${_ARCHBOOT_ISO_EXT_DIR}/EFI/tools/shellx64_old.efi.backup" || true
mv "${_ARCHBOOT_ISO_EXT_DIR}/EFI/tools/shellx64_v1.efi" "${_ARCHBOOT_ISO_EXT_DIR}/EFI/tools/shellx64_v1.efi.backup" || true
echo
if [[ -e "${_ARCHBOOT_ISO_WD}/shellx64_old.efi" ]]; then
cp -f "${_ARCHBOOT_ISO_WD}/shellx64_old.efi" "${_ARCHBOOT_ISO_EXT_DIR}/EFI/tools/shellx64_old.efi"
if [[ -e "${_ARCHBOOT_ISO_WD}/shellx64_v1.efi" ]]; then
cp -f "${_ARCHBOOT_ISO_WD}/shellx64_v1.efi" "${_ARCHBOOT_ISO_EXT_DIR}/EFI/tools/shellx64_v1.efi"
echo
else
curl --verbose -f -C - --ftp-pasv --retry 3 --retry-delay 3 -o "${_ARCHBOOT_ISO_EXT_DIR}/EFI/tools/shellx64_old.efi" "https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2/EdkShellBinPkg/FullShell/X64/Shell_Full.efi" || true
curl --verbose -f -C - --ftp-pasv --retry 3 --retry-delay 3 -o "${_ARCHBOOT_ISO_EXT_DIR}/EFI/tools/shellx64_v1.efi" "https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2/EdkShellBinPkg/FullShell/X64/Shell_Full.efi" || true
echo
if [[ ! "$(file "${_ARCHBOOT_ISO_EXT_DIR}/EFI/tools/shellx64_old.efi" | grep 'executable')" ]]; then
rm -f "${_ARCHBOOT_ISO_EXT_DIR}/EFI/tools/shellx64_old.efi" || true
mv "${_ARCHBOOT_ISO_EXT_DIR}/EFI/tools/shellx64_old.efi.backup" "${_ARCHBOOT_ISO_EXT_DIR}/EFI/tools/shellx64_old.efi" || true
if [[ ! "$(file "${_ARCHBOOT_ISO_EXT_DIR}/EFI/tools/shellx64_v1.efi" | grep 'executable')" ]]; then
rm -f "${_ARCHBOOT_ISO_EXT_DIR}/EFI/tools/shellx64_v1.efi" || true
mv "${_ARCHBOOT_ISO_EXT_DIR}/EFI/tools/shellx64_v1.efi.backup" "${_ARCHBOOT_ISO_EXT_DIR}/EFI/tools/shellx64_v1.efi" || true
fi
fi
rm -f "${_ARCHBOOT_ISO_EXT_DIR}/EFI/tools/shellx64_old.efi.backup" || true
rm -f "${_ARCHBOOT_ISO_EXT_DIR}/EFI/tools/shellx64_v1.efi.backup" || true
echo
}
_update_uefi_refind_sourceforge() {
_update_uefi_refind_bin_sourceforge() {
mkdir -p "${_ARCHBOOT_ISO_EXT_DIR}/packages/" || true
@ -323,13 +329,58 @@ _update_uefi_refind_sourceforge() {
}
_update_grub_uefi_arch_specific_iso_files() {
_update_uefi_gummiboot_USB_files() {
[[ "${_UEFI_ARCH}" == "x86_64" ]] && _SPEC_UEFI_ARCH="x64"
[[ "${_UEFI_ARCH}" == "i386" ]] && _SPEC_UEFI_ARCH="ia32"
rm -rf "${_ARCHBOOT_ISO_EXT_DIR}/EFI/boot/" || true
rm -rf "${_ARCHBOOT_ISO_EXT_DIR}/loader/" || true
echo
mkdir -p "${_ARCHBOOT_ISO_EXT_DIR}/EFI/boot"
cp -f "/boot/efi/EFI/arch/gummiboot/gummiboot${_SPEC_UEFI_ARCH}.efi" "${_ARCHBOOT_ISO_EXT_DIR}/EFI/boot/boot${_SPEC_UEFI_ARCH}.efi"
cp -f "/boot/efi/EFI/arch/efilinux/efilinux${_SPEC_UEFI_ARCH}.efi" "${_ARCHBOOT_ISO_EXT_DIR}/EFI/boot/efilinux${_SPEC_UEFI_ARCH}.efi"
echo
mkdir -p "${_ARCHBOOT_ISO_EXT_DIR}/loader/entries/"
echo
cat << EOF > "${_ARCHBOOT_ISO_EXT_DIR}/loader/entries/loader.conf"
timeout 3
default archboot-${_UEFI_ARCH}
EOF
echo
cat << EOF > "${_ARCHBOOT_ISO_EXT_DIR}/loader/entries/archboot-${_UEFI_ARCH}.conf"
title Arch Linux (${_UEFI_ARCH}) archboot
linux /boot/vmlinuz_${_UEFI_ARCH}
initrd /boot/initramfs_${_UEFI_ARCH}.img
options gpt loglevel=7 add_efi_memmap none=UEFI_ARCH_${_UEFI_ARCH}
EOF
echo
cat << EOF > "${_ARCHBOOT_ISO_EXT_DIR}/loader/entries/archboot-${_UEFI_ARCH}-lts.conf"
title Arch Linux LTS (${_UEFI_ARCH}) archboot
efi /EFI/boot/efilinux${_SPEC_UEFI_ARCH}.efi
options -f \\boot\\vmlinuz_x86_64_lts gpt loglevel=7 add_efi_memmap none=UEFI_ARCH_${_UEFI_ARCH} initrd=\\boot\\initramfs_${_UEFI_ARCH}.img
EOF
echo
cat << EOF > "${_ARCHBOOT_ISO_EXT_DIR}/loader/entries/uefi-shell-${_UEFI_ARCH}-v2.conf"
title UEFI ${_UEFI_ARCH} Shell v2 - For Spec. Ver. >=2.3 systems
efi /EFI/tools/shell${_SPEC_UEFI_ARCH}_v2.efi
EOF
echo
cat << EOF > "${_ARCHBOOT_ISO_EXT_DIR}/loader/entries/uefi-shell-${_UEFI_ARCH}-v1.conf"
title UEFI ${_UEFI_ARCH} Shell v1 - For Spec. Ver. <2.3 systems
efi /EFI/tools/shell${_SPEC_UEFI_ARCH}_v1.efi
EOF
echo
}
_update_grub_uefi_arch_specific_CD_files() {
rm -f "${grub_uefi_mp}/EFI/boot/boot${_SPEC_UEFI_ARCH}.efi" || true
rm -f "${_ARCHBOOT_ISO_EXT_DIR}/EFI/boot/boot${_SPEC_UEFI_ARCH}.efi" || true
echo
rm -rf "${_ARCHBOOT_ISO_EXT_DIR}/boot/grub/${_UEFI_ARCH}-efi" || true
@ -378,17 +429,11 @@ EOF
rm -f "${_ARCHBOOT_ISO_EXT_DIR}/boot/grub/grub.cfg"
mkdir -p "${_ARCHBOOT_ISO_EXT_DIR}/EFI/boot/"
cp -f "${grub_uefi_mp}/EFI/boot/boot${_SPEC_UEFI_ARCH}.efi" "${_ARCHBOOT_ISO_EXT_DIR}/EFI/boot/boot${_SPEC_UEFI_ARCH}.efi"
echo
unset _UEFI_ARCH
unset _SPEC_UEFI_ARCH
}
_update_grub_uefi_iso_files() {
_update_grub_uefi_CD_files() {
grub_uefi_mp="$(mktemp -d /tmp/grub_uefi_mp.XXX)"
@ -396,7 +441,6 @@ _update_grub_uefi_iso_files() {
echo
mkdir -p "${_ARCHBOOT_ISO_EXT_DIR}/boot/grub"
mkdir -p "${_ARCHBOOT_ISO_EXT_DIR}/EFI/boot"
echo
# Create a blank image to be converted to ESP IMG
@ -422,7 +466,7 @@ _update_grub_uefi_iso_files() {
echo
_UEFI_ARCH="x86_64"
_update_grub_uefi_arch_specific_iso_files
_update_grub_uefi_arch_specific_CD_files
echo
# umount images and loop
@ -455,7 +499,7 @@ _update_grub_uefi_iso_files() {
}
_update_grub_uefi_iso_config() {
_update_grub_uefi_CD_config() {
rm -f "${_ARCHBOOT_ISO_EXT_DIR}/boot/grub/grub_archboot.cfg" || true
@ -584,14 +628,14 @@ EOF
if [ "\${grub_platform}" == "efi" ]; then
menuentry "UEFI \${_UEFI_ARCH} Shell 2.0 - For Spec. Ver. >=2.3 systems" {
menuentry "UEFI \${_UEFI_ARCH} Shell v2 - For Spec. Ver. >=2.3 systems" {
set root="\${archboot}"
chainloader /EFI/tools/shell\${_SPEC_UEFI_ARCH}.efi
chainloader /EFI/tools/shell\${_SPEC_UEFI_ARCH}_v2.efi
}
menuentry "UEFI \${_UEFI_ARCH} Shell 1.0 - For Spec. Ver. <2.3 systems" {
menuentry "UEFI \${_UEFI_ARCH} Shell v1 - For Spec. Ver. <2.3 systems" {
set root="\${archboot}"
chainloader /EFI/tools/shell\${_SPEC_UEFI_ARCH}_old.efi
chainloader /EFI/tools/shell\${_SPEC_UEFI_ARCH}_v1.efi
}
fi
@ -712,15 +756,17 @@ fi
[[ "${_UPDATE_UEFI_SHELL}" == "1" ]] && _download_uefi_shell_tianocore
[[ "${_UPDATE_UEFI_REFIND}" == "1" ]] && _update_uefi_refind_sourceforge
# [[ "${_UPDATE_UEFI_REFIND_BIN}" == "1" ]] && _update_uefi_refind_bin_sourceforge
[[ "${_UPDATE_UEFI_GUMMIBOOT}" == "1" ]] && _update_uefi_gummiboot_USB_files
[[ "${_UPDATE_SYSLINUX}" == "1" ]] && _update_syslinux_iso_files
[[ "${_UPDATE_SYSLINUX_CONFIG}" == "1" ]] && _update_syslinux_iso_config
[[ "${_UPDATE_GRUB_UEFI}" == "1" ]] && _update_grub_uefi_iso_files
[[ "${_UPDATE_GRUB_UEFI}" == "1" ]] && _update_grub_uefi_CD_files
[[ "${_UPDATE_GRUB_UEFI_CONFIG}" == "1" ]] && _update_grub_uefi_iso_config
[[ "${_UPDATE_GRUB_UEFI_CONFIG}" == "1" ]] && _update_grub_uefi_CD_config
cd "${_ARCHBOOT_ISO_WD}/"
@ -757,12 +803,14 @@ else
echo
fi
unset _UEFI_ARCH
unset _SPEC_UEFI_ARCH
unset _REMOVE_i686
unset _REMOVE_x86_64
unset _UPDATE_SETUP
unset _UPDATE_UEFI_SHELL
unset _UPDATE_UEFI_REFIND
unset _UPDATE_UEFI_REFIND_BIN
unset _UPDATE_UEFI_GUMMIBOOT
unset _UPDATE_SYSLINUX
unset _UPDATE_SYSLINUX_CONFIG
unset _UPDATE_GRUB_UEFI

View file

@ -19,7 +19,7 @@ build ()
syslinux mtools perl gmp krb5 sqlite db dbus-core libcap fsarchiver xz librpcsecgss \
libtirpc wipe ddrescue testdisk ifplugd libdaemon wpa_actiond rfkill libgssglue icu gptfdisk \
btrfs-progs nilfs-utils linux-firmware ipw2100-fw ipw2200-fw iana-etc chntpw \
grub-common grub-bios grub-efi-x86_64 efibootmgr file keyutils yp-tools \
grub-common grub-bios grub-efi-x86_64 gummiboot-efi-x86_64 efibootmgr file keyutils yp-tools \
curl smartmontools dnsmasq lftp openconnect libxml2 libproxy speedtouch tcpdump nmap lua weechat \
gnutls nettle libtasn1 bind rpcbind expat progsreiserfs glib2 freetype2 libssh2 libedit \
talloc eventlog idnkit libjpeg-turbo pth gnupg libksba libassuan pinentry dirmngr gpgme ldns \

View file

@ -3507,8 +3507,18 @@ doefistub_uefi_common() {
if [[ "${__CARCH}" != "${UEFI_ARCH}" ]]; then
DIALOG --msgbox "EFISTUB requires Kernel and UEFI arch to match, and requires CONFIG_EFI_STUB enabled kernel. Please install matching ARCH Kernel and try again." 0 0
elif [[ "${KERNELPKG}" == "linux-lts" ]]; then
DIALOG --msgbox "LTS kernel does not support EFISTUB. Please install CONFIG_EFI_STUB enabled kernel and try again." 0 0
_EFILINUX="1"
PACKAGES="efilinux-efi-${UEFI_ARCH}"
run_pacman
PACKAGES=""
_CONTINUE="1"
else
_CONTINUE="1"
fi
if [[ "${_CONTINUE}" == "1" ]]; then
bootdev=""
grubdev=""
complexuuid=""
@ -3517,9 +3527,67 @@ doefistub_uefi_common() {
RAID_ON_LVM=""
common_bootloader_checks
_EFISTUB_KERNEL="${VMLINUZ/linux/arch}"
_EFISTUB_KERNEL="${VMLINUZ/linux/arch}.efi"
[[ "${_EFILINUX}" == "1" ]] && _EFISTUB_KERNEL="${VMLINUZ/linux/arch}"
_EFISTUB_INITRAMFS="${INITRAMFS/linux/arch}"
mkdir -p "${DESTDIR}/boot/efi/EFI/arch"
rm -f "${DESTDIR}/boot/efi/EFI/arch/${_EFISTUB_KERNEL}"
rm -f "${DESTDIR}/boot/efi/EFI/arch/${_EFISTUB_INITRAMFS}.img"
rm -f "${DESTDIR}/boot/efi/EFI/arch/${_EFISTUB_INITRAMFS}-fallback.img"
cp -f "${DESTDIR}/boot/${VMLINUZ}" "${DESTDIR}/boot/efi/EFI/arch/${_EFISTUB_KERNEL}"
cp -f "${DESTDIR}/boot/${INITRAMFS}.img" "${DESTDIR}/boot/efi/EFI/arch/${_EFISTUB_INITRAMFS}.img"
cp -f "${DESTDIR}/boot/${INITRAMFS}-fallback.img" "${DESTDIR}/boot/efi/EFI/arch/${_EFISTUB_INITRAMFS}-fallback.img"
#######################
cat << CONFEOF > "${DESTDIR}/etc/systemd/system/efistub_copy.path"
[Unit]
Description=Copy EFISTUB Kernel and Initramfs to UEFISYS Partition
[Path]
PathChanged=/boot/${INITRAMFS}-fallback.img
Unit=efistub_copy.service
[Install]
WantedBy=multi-user.target
CONFEOF
cat << CONFEOF > "${DESTDIR}/etc/systemd/system/efistub_copy.service"
[Unit]
Description=Copy EFISTUB Kernel and Initramfs to UEFISYS Partition
[Service]
Type=oneshot
ExecStart=/bin/cp -f /boot/${VMLINUZ} /boot/efi/EFI/arch/${_EFISTUB_KERNEL}
ExecStart=/bin/cp -f /boot/${INITRAMFS}.img /boot/efi/EFI/arch/${_EFISTUB_INITRAMFS}.img
ExecStart=/bin/cp -f /boot/${INITRAMFS}-fallback.img /boot/efi/EFI/arch/${_EFISTUB_INITRAMFS}-fallback.img
CONFEOF
chroot "${DESTDIR}" /usr/bin/systemctl enable efistub_copy.path
if [[ "${SYSTEMD}" != "1" ]]; then
PACKAGES="incron"
run_pacman
PACKAGES=""
cat << CONFEOF > "${DESTDIR}/usr/local/bin/efistub_copy.sh"
/bin/cp -f /boot/${VMLINUZ} /boot/efi/EFI/arch/${_EFISTUB_KERNEL}
/bin/cp -f /boot/${INITRAMFS}.img /boot/efi/EFI/arch/${_EFISTUB_INITRAMFS}.img
/bin/cp -f /boot/${INITRAMFS}-fallback.img /boot/efi/EFI/arch/${_EFISTUB_INITRAMFS}-fallback.img
CONFEOF
cat << CONFEOF > "${DESTDIR}/etc/incron.d/efistub_copy.conf"
/boot/${INITRAMFS}-fallback.img IN_CLOSE_WRITE /usr/local/bin/efistub_copy.sh
CONFEOF
DIALOG --msgbox "Add incrond to the DAEMONS list in /etc/rc.conf ." 0 0
fi
###########################
_bootdev="$(df -T "${DESTDIR}/boot" | tail -n +2 | awk '{print $1}')"
_rootdev="$(df -T "${DESTDIR}/" | tail -n +2 | awk '{print $1}')"
_uefisysdev="$(df -T "${DESTDIR}/boot/efi" | tail -n +2 | awk '{print $1}')"
@ -3546,92 +3614,57 @@ doefistub_uefi_common() {
_PARAMETERS_UNMOD="root=${_rootpart} ${ROOTFLAGS} rootfstype=${ROOTFS} ${RAIDARRAYS} ${CRYPTSETUP} ro initrd=\\EFI\\arch\\${_EFISTUB_INITRAMFS}.img"
_PARAMETERS_MOD=$(echo "${_PARAMETERS_UNMOD}" | sed -e 's# # #g' | sed -e 's# # #g')
mkdir -p "${DESTDIR}/boot/efi/EFI/arch"
if [[ "${_EFILINUX}" == "1" ]]; then
cat << CONFEOF > "${DESTDIR}/boot/efi/EFI/arch/efilinux/efilinux.cfg"
-f \\EFI\\arch\\${_EFISTUB_KERNEL} ${_PARAMETERS_MOD}
CONFEOF
fi
cat << CONFEOF > "${DESTDIR}/boot/efi/EFI/arch/linux.conf"
${_PARAMETERS_MOD}
CONFEOF
cat << REFINDEOF > "${DESTDIR}/boot/efi/EFI/arch/refind_linux.conf"
"Boot with Defaults" "${_PARAMETERS_MOD}"
"Boot with fallback initramfs" "${_PARAMETERS_MOD} initrd=\\EFI\\arch\\${_EFISTUB_INITRAMFS}-fallback.img"
REFINDEOF
###################################
rm -f "${DESTDIR}/boot/efi/EFI/arch/${_EFISTUB_KERNEL}.efi"
rm -f "${DESTDIR}/boot/efi/EFI/arch/${_EFISTUB_INITRAMFS}.img"
rm -f "${DESTDIR}/boot/efi/EFI/arch/${_EFISTUB_INITRAMFS}-fallback.img"
if [[ -e "${DESTDIR}/boot/efi/EFI/arch/${_EFISTUB_KERNEL}" ]] && [[ -e "${DESTDIR}/boot/efi/EFI/arch/${_EFISTUB_INITRAMFS}.img" ]]; then
DIALOG --msgbox "The EFISTUB Kernel and initramfs have been copied to /boot/efi/EFI/arch/${_EFISTUB_KERNEL} and /boot/efi/EFI/arch/${_EFISTUB_INITRAMFS}.img respectively." 0 0
cp -f "${DESTDIR}/boot/${VMLINUZ}" "${DESTDIR}/boot/efi/EFI/arch/${_EFISTUB_KERNEL}.efi"
cp -f "${DESTDIR}/boot/${INITRAMFS}.img" "${DESTDIR}/boot/efi/EFI/arch/${_EFISTUB_INITRAMFS}.img"
cp -f "${DESTDIR}/boot/${INITRAMFS}-fallback.img" "${DESTDIR}/boot/efi/EFI/arch/${_EFISTUB_INITRAMFS}-fallback.img"
if [[ "${_EFILINUX}" == "1" ]]; then
DIALOG --msgbox "You will now be put into the editor to edit efilinux.cfg . After you save your changes, exit the editor." 0 0
geteditor || return 1
"${EDITOR}" "${DESTDIR}/boot/efi/EFI/arch/efilinux/efilinux.cfg"
else
# _BOOTMGR_LABEL="Arch Linux (EFISTUB)"
# _BOOTMGR_LOADER_DIR="arch"
# _BOOTMGR_LOADER_FILE="${_EFISTUB_KERNEL}"
# do_uefi_bootmgr_setup
cat << CONFEOF > "${DESTDIR}/etc/systemd/system/efistub_copy.path"
[Unit]
Description=Copy EFISTUB Kernel and Initramfs to UEFISYS Partition
DIALOG --msgbox "You will now be put into the editor to edit linux.conf . After you save your changes, exit the editor." 0 0
geteditor || return 1
"${EDITOR}" "${DESTDIR}/boot/efi/EFI/arch/linux.conf"
[Path]
PathChanged=/boot/${INITRAMFS}-fallback.img
Unit=efistub_copy.service
# DIALOG --defaultno --yesno "Do you want to copy /boot/efi/EFI/arch/${_EFISTUB_KERNEL} to /boot/efi/EFI/boot/boot${SPEC_UEFI_ARCH}.efi .\n\nThis might be needed in some systems where efibootmgr may not work due to firmware issues." 0 0 && _UEFISYS_EFI_BOOT_DIR="1"
[Install]
WantedBy=multi-user.target
CONFEOF
# if [[ "${_UEFISYS_EFI_BOOT_DIR}" == "1" ]]; then
# mkdir -p "${DESTDIR}/boot/efi/EFI/boot"
cat << CONFEOF > "${DESTDIR}/etc/systemd/system/efistub_copy.service"
[Unit]
Description=Copy EFISTUB Kernel and Initramfs to UEFISYS Partition
# rm -f "${DESTDIR}/boot/efi/EFI/boot/boot${SPEC_UEFI_ARCH}.efi"
# rm -f "${DESTDIR}/boot/efi/EFI/boot/linux.conf"
[Service]
Type=oneshot
ExecStart=/bin/cp -f /boot/${VMLINUZ} /boot/efi/EFI/arch/${_EFISTUB_KERNEL}.efi
ExecStart=/bin/cp -f /boot/${INITRAMFS}.img /boot/efi/EFI/arch/${_EFISTUB_INITRAMFS}.img
ExecStart=/bin/cp -f /boot/${INITRAMFS}-fallback.img /boot/efi/EFI/arch/${_EFISTUB_INITRAMFS}-fallback.img
CONFEOF
# cp -f "${DESTDIR}/boot/efi/EFI/arch/${_EFISTUB_KERNEL}" "${DESTDIR}/boot/efi/EFI/boot/boot${SPEC_UEFI_ARCH}.efi"
# cp -f "${DESTDIR}/boot/efi/EFI/boot/linux.conf" "${DESTDIR}/boot/efi/EFI/boot/linux.conf"
# fi
fi
chroot "${DESTDIR}" /usr/bin/systemctl enable efistub_copy.path
if [[ "${SYSTEMD}" != "1" ]]; then
PACKAGES="incron"
run_pacman
PACKAGES=""
cat << CONFEOF > "${DESTDIR}/usr/local/bin/efistub_copy.sh"
/bin/cp -f /boot/${VMLINUZ} /boot/efi/EFI/arch/${_EFISTUB_KERNEL}.efi
/bin/cp -f /boot/${INITRAMFS}.img /boot/efi/EFI/arch/${_EFISTUB_INITRAMFS}.img
/bin/cp -f /boot/${INITRAMFS}-fallback.img /boot/efi/EFI/arch/${_EFISTUB_INITRAMFS}-fallback.img
CONFEOF
cat << CONFEOF > "${DESTDIR}/etc/incron.d/efistub_copy.conf"
/boot/${INITRAMFS}-fallback.img IN_CLOSE_WRITE /usr/local/bin/efistub_copy.sh
CONFEOF
DIALOG --msgbox "Add incrond to the DAEMONS list in /etc/rc.conf ." 0 0
fi
if [[ -e "${DESTDIR}/boot/efi/EFI/arch/${_EFISTUB_KERNEL}.efi" ]] && [[ -e "${DESTDIR}/boot/efi/EFI/arch/${_EFISTUB_INITRAMFS}.img" ]]; then
# _BOOTMGR_LABEL="Arch Linux (EFISTUB)"
# _BOOTMGR_LOADER_DIR="arch"
# _BOOTMGR_LOADER_FILE="${_EFISTUB_KERNEL}.efi"
# do_uefi_bootmgr_setup
DIALOG --msgbox "The EFISTUB Kernel and initramfs have been copied to /boot/efi/EFI/arch/${_EFISTUB_KERNEL}.efi and /boot/efi/EFI/arch/${_EFISTUB_INITRAMFS}.img respectively." 0 0
DIALOG --msgbox "You will now be put into the editor to edit linux.conf and refind_linux.conf . After you save your changes, exit the editor." 0 0
geteditor || return 1
"${EDITOR}" "${DESTDIR}/boot/efi/EFI/arch/linux.conf"
"${EDITOR}" "${DESTDIR}/boot/efi/EFI/arch/refind_linux.conf"
# DIALOG --defaultno --yesno "Do you want to copy /boot/efi/EFI/arch/${_EFISTUB_KERNEL}.efi to /boot/efi/EFI/boot/boot${SPEC_UEFI_ARCH}.efi .\n\nThis might be needed in some systems where efibootmgr may not work due to firmware issues." 0 0 && _UEFISYS_EFI_BOOT_DIR="1"
# if [[ "${_UEFISYS_EFI_BOOT_DIR}" == "1" ]]; then
# mkdir -p "${DESTDIR}/boot/efi/EFI/boot"
# rm -f "${DESTDIR}/boot/efi/EFI/boot/boot${SPEC_UEFI_ARCH}.efi"
# rm -f "${DESTDIR}/boot/efi/EFI/boot/linux.conf"
# cp -f "${DESTDIR}/boot/efi/EFI/arch/${_EFISTUB_KERNEL}.efi" "${DESTDIR}/boot/efi/EFI/boot/boot${SPEC_UEFI_ARCH}.efi"
# cp -f "${DESTDIR}/boot/efi/EFI/boot/linux.conf" "${DESTDIR}/boot/efi/EFI/boot/linux.conf"
# fi
DIALOG --menu "Select which UEFI Boot Manager to install, to provide a menu for EFISTUB kernels?" 13 55 3 \
"GUMMIBOOT_UEFI_${UEFI_ARCH}" "Simple Text Mode ${UEFI_ARCH} UEFI Boot Manager" \
"rEFInd_UEFI_${UEFI_ARCH}" "rEFInd ${UEFI_ARCH} UEFI Boot Manager" \
"NONE" "No Boot Manager" 2>${ANSWER} || CANCEL=1
case $(cat ${ANSWER}) in
"GUMMIBOOT_UEFI_${UEFI_ARCH}") dogummiboot_uefi_common ;;
"rEFInd_UEFI_${UEFI_ARCH}") dorefind_uefi_common ;;
"NONE") return 0 ;;
esac
else
DIALOG --msgbox "Error setting up EFISTUB kernel and initramfs in /boot/efi." 0 0
fi
@ -3655,64 +3688,97 @@ do_efistub_uefi_i686() {
}
dogummiboot_uefi_common() {
DIALOG --msgbox "Setting up gummiboot-efi-${UEFI_ARCH} now ..." 0 0
PACKAGES="gummiboot-efi-${UEFI_ARCH}"
run_pacman
PACKAGES=""
if [[ "${_EFILINUX}" == "1" ]]; then
cat << GUMEOF > "${DESTDIR}/boot/efi/loader/entries/archlinux-core-lts.conf"
title Arch Linux LTS via EFILINUX
efi /EFI/arch/efilinux/efilinux${SPEC_UEFI_ARCH}.efi
options $(cat "${DESTDIR}/boot/efi/EFI/arch/efilinux/efilinux.cfg")
GUMEOF
cat << GUMEOF > "${DESTDIR}/boot/efi/loader/entries/archlinux-core-lts-fallback.conf"
title Arch Linux LTS via EFILINUX - fallback initramfs
efi /EFI/arch/efilinux/efilinux${SPEC_UEFI_ARCH}.efi
options $(cat "${DESTDIR}/boot/efi/EFI/arch/efilinux/efilinux.cfg") initrd=\\EFI\\arch\\${_EFISTUB_INITRAMFS}-fallback.img
GUMEOF
cat << GUMEOF > "${DESTDIR}/boot/efi/loader/loader.conf"
timeout 3
default archlinux-core-lts
GUMEOF
else
cat << GUMEOF > "${DESTDIR}/boot/efi/loader/entries/archlinux-core.conf"
title Arch Linux
linux /EFI/arch/${_EFISTUB_KERNEL}
initrd /EFI/arch/${_EFISTUB_INITRAMFS}.img
options ${_PARAMETERS_MOD}
GUMEOF
cat << GUMEOF > "${DESTDIR}/boot/efi/loader/entries/archlinux-core-fallback.conf"
title Arch Linux fallback initramfs
linux /EFI/arch/${_EFISTUB_KERNEL}
initrd /EFI/arch/${_EFISTUB_INITRAMFS}-fallback.img
options ${_PARAMETERS_MOD}
GUMEOF
cat << GUMEOF > "${DESTDIR}/boot/efi/loader/loader.conf"
timeout 3
default archlinux-core
GUMEOF
fi
if [[ -e "${DESTDIR}/boot/efi/EFI/arch/gummiboot/gummiboot${SPEC_UEFI_ARCH}.efi" ]]; then
_BOOTMGR_LABEL="Arch Linux (gummiboot)"
_BOOTMGR_LOADER_DIR="arch//gummiboot"
_BOOTMGR_LOADER_FILE="gummiboot${SPEC_UEFI_ARCH}.efi"
do_uefi_bootmgr_setup
DIALOG --msgbox "gummiboot-efi-${UEFI_ARCH} has been setup successfully." 0 0
DIALOG --msgbox "You will now be put into the editor to edit loader.conf and gummiboot menu entry files . After you save your changes, exit the editor." 0 0
geteditor || return 1
if [[ "${_EFILINUX}" == "1" ]]; then
"${EDITOR}" "${DESTDIR}/boot/efi/loader/entries/archlinux-core-lts.conf"
"${EDITOR}" "${DESTDIR}/boot/efi/loader/entries/archlinux-core-lts-fallback.conf"
else
"${EDITOR}" "${DESTDIR}/boot/efi/loader/entries/archlinux-core.conf"
"${EDITOR}" "${DESTDIR}/boot/efi/loader/entries/archlinux-core-fallback.conf"
fi
"${EDITOR}" "${DESTDIR}/boot/efi/loader/loader.conf"
DIALOG --defaultno --yesno "Do you want to copy /boot/efi/EFI/arch/gummiboot/gummiboot${SPEC_UEFI_ARCH}.efi to /boot/efi/EFI/boot/boot${SPEC_UEFI_ARCH}.efi ?\n\nThis might be needed in some systems where efibootmgr may not work due to firmware issues." 0 0 && _UEFISYS_EFI_BOOT_DIR="1"
if [[ "${_UEFISYS_EFI_BOOT_DIR}" == "1" ]]; then
mkdir -p "${DESTDIR}/boot/efi/EFI/boot"
rm -f "${DESTDIR}/boot/efi/EFI/boot/boot${SPEC_UEFI_ARCH}.efi"
cp -f "${DESTDIR}/boot/efi/EFI/arch/gummiboot/gummiboot${SPEC_UEFI_ARCH}.efi" "${DESTDIR}/boot/efi/EFI/boot/boot${SPEC_UEFI_ARCH}.efi"
fi
else
DIALOG --msgbox "Error setting up gummiboot-efi-${UEFI_ARCH}." 0 0
fi
}
dorefind_uefi_common() {
DIALOG --msgbox "Setting up rEFInd UEFI ${UEFI_ARCH} now ..." 0 0
DIALOG --msgbox "Setting up refind-efi-${UEFI_ARCH} now ..." 0 0
if [[ "${UEFI_ARCH}" == "x86_64" ]]; then
PACKAGES="refind-efi-${UEFI_ARCH}"
run_pacman
PACKAGES=""
fi
PACKAGES="refind-efi-${UEFI_ARCH}"
run_pacman
PACKAGES=""
if [[ -e "${DESTDIR}/boot/efi/EFI/arch/refind/refind${SPEC_UEFI_ARCH}.efi" ]]; then
_REFIND_SUBDIR="arch/refind"
_REFIND_SUBDIR_UEFI="arch\\refind"
else
rm -rf "/tmp"/refind-bin-* || true
rm -f "/tmp"/refind-bin-*.zip || true
if [[ -e "/tmp/refind-bin.zip" ]]; then
_REFIND_ZIP="/tmp/refind-bin.zip"
elif [[ -e "${_MEDIA}/packages/refind-bin.zip" ]]; then
_REFIND_ZIP="${_MEDIA}/packages/refind-bin.zip"
else
DIALOG --msgbox "refind-bin.zip file not found. This file should be downloaded first, to setup rEFInd. You will now be asked to configure the network." 0 0
donetwork
curl -L "http://sourceforge.net/projects/refind/files/latest/download" -o "/tmp/refind-bin.zip"
if [[ -e "/tmp/refind-bin.zip" ]]; then
_REFIND_ZIP="/tmp/refind-bin.zip"
else
DIALOG --msgbox "Setup could not download refind-bin.zip . Any issues with net connectivity?" 0 0 && return 1
fi
fi
if [[ -e "/usr/bin/bsdtar" ]]; then
bsdtar -C "/tmp" -xf "${_REFIND_ZIP}"
else
PACKAGES="libarchive"
run_pacman
PACKAGES=""
LD_LIBRARY_PATH="${DESTDIR}/usr/lib:${DESTDIR}/lib" "${DESTDIR}/usr/bin/bsdtar" -C "/tmp" -xf "${_REFIND_ZIP}"
fi
mv "/tmp"/refind-bin-* "/tmp/refind-bin-dir"
_REFIND_SUBDIR="arch_refind"
_REFIND_SUBDIR_UEFI="arch_refind"
mkdir -p "${DESTDIR}/boot/efi/EFI/${_REFIND_SUBDIR}"
cp -f "/tmp/refind-bin-dir/refind/refind_${SPEC_UEFI_ARCH}.efi" "${DESTDIR}/boot/efi/EFI/${_REFIND_SUBDIR}/refind${SPEC_UEFI_ARCH}.efi"
cp -f "/tmp/refind-bin-dir/refind/refind.conf-sample" "${DESTDIR}/boot/efi/EFI/${_REFIND_SUBDIR}/refind.conf"
cp -rf "/tmp/refind-bin-dir/refind/icons" "${DESTDIR}/boot/efi/EFI/${_REFIND_SUBDIR}/icons"
cp -rf "/tmp/refind-bin-dir/docs" "${DESTDIR}/boot/efi/EFI/${_REFIND_SUBDIR}/docs"
cp -f "/tmp/refind-bin-dir"/*.txt "${DESTDIR}/boot/efi/EFI/${_REFIND_SUBDIR}/docs"/
fi
_REFIND_CONFIG="${DESTDIR}/boot/efi/EFI/${_REFIND_SUBDIR}/refind.conf"
_REFIND_CONFIG="${DESTDIR}/boot/efi/EFI/arch/refind/refind.conf"
sed 's|^timeout 20|timeout 0|g' -i "${_REFIND_CONFIG}"
sed 's|^#resolution 1024 768|resolution 1024 768|g' -i "${_REFIND_CONFIG}"
@ -3722,19 +3788,45 @@ dorefind_uefi_common() {
sed 's|^#dont_scan_dirs EFI/boot|dont_scan_dirs EFI/boot|g' -i "${_REFIND_CONFIG}"
sed 's|^#max_tags 0|max_tags 0|g' -i "${_REFIND_CONFIG}"
if [[ -e "${DESTDIR}/boot/efi/EFI/${_REFIND_SUBDIR}/refind${SPEC_UEFI_ARCH}.efi" ]]; then
if [[ "${_EFILINUX}" == "1" ]]; then
cat << REFINDEOF >> "${DESTDIR}/boot/efi/EFI/arch/refind/refind.conf"
menuentry "Arch Linux LTS via EFILINUX" {
icon /EFI/arch/refind/icons/os_arch.icns
loader /EFI/arch/efilinux/efilinux${SPEC_UEFI_ARCH}.efi
options "$(cat "${DESTDIR}/boot/efi/EFI/arch/efilinux/efilinux.cfg")"
}
menuentry "Arch Linux LTS via EFILINUX - fallback initramfs" {
icon /EFI/arch/refind/icons/os_arch.icns
loader /EFI/arch/efilinux/efilinux${SPEC_UEFI_ARCH}.efi
options "$(cat "${DESTDIR}/boot/efi/EFI/arch/efilinux/efilinux.cfg") initrd=\\EFI\\arch\\${_EFISTUB_INITRAMFS}-fallback.img"
}
REFINDEOF
else
cat << REFINDEOF > "${DESTDIR}/boot/efi/EFI/arch/refind_linux.conf"
"Boot with Defaults" "${_PARAMETERS_MOD}"
"Boot with fallback initramfs" "${_PARAMETERS_MOD} initrd=\\EFI\\arch\\${_EFISTUB_INITRAMFS}-fallback.img"
REFINDEOF
fi
if [[ -e "${DESTDIR}/boot/efi/EFI/arch/refind/refind${SPEC_UEFI_ARCH}.efi" ]]; then
_BOOTMGR_LABEL="Arch Linux (rEFInd)"
_BOOTMGR_LOADER_DIR="${_REFIND_SUBDIR_UEFI}"
_BOOTMGR_LOADER_DIR="arch//refind"
_BOOTMGR_LOADER_FILE="refind${SPEC_UEFI_ARCH}.efi"
do_uefi_bootmgr_setup
DIALOG --msgbox "rEFInd UEFI ${UEFI_ARCH} has been setup successfully." 0 0
DIALOG --msgbox "refind-efi-${UEFI_ARCH} has been setup successfully." 0 0
DIALOG --msgbox "You will now be put into the editor to edit refind.conf . After you save your changes, exit the editor." 0 0
DIALOG --msgbox "You will now be put into the editor to edit refind.conf (and maybe refind_linux.conf) . After you save your changes, exit the editor." 0 0
geteditor || return 1
"${EDITOR}" "${_REFIND_CONFIG}"
[[ "${_EFILINUX}" != "1" ]] && "${EDITOR}" "${DESTDIR}/boot/efi/EFI/arch/refind_linux.conf"
DIALOG --defaultno --yesno "Do you want to copy /boot/efi/EFI/${_REFIND_SUBDIR}/refind${SPEC_UEFI_ARCH}.efi to /boot/efi/EFI/boot/boot${SPEC_UEFI_ARCH}.efi ?\n\nThis might be needed in some systems where efibootmgr may not work due to firmware issues." 0 0 && _UEFISYS_EFI_BOOT_DIR="1"
DIALOG --defaultno --yesno "Do you want to copy /boot/efi/EFI/arch/refind/refind${SPEC_UEFI_ARCH}.efi to /boot/efi/EFI/boot/boot${SPEC_UEFI_ARCH}.efi ?\n\nThis might be needed in some systems where efibootmgr may not work due to firmware issues." 0 0 && _UEFISYS_EFI_BOOT_DIR="1"
if [[ "${_UEFISYS_EFI_BOOT_DIR}" == "1" ]]; then
mkdir -p "${DESTDIR}/boot/efi/EFI/boot"
@ -3743,32 +3835,16 @@ dorefind_uefi_common() {
rm -f "${DESTDIR}/boot/efi/EFI/boot/refind.conf"
rm -rf "${DESTDIR}/boot/efi/EFI/boot/icons"
cp -f "${DESTDIR}/boot/efi/EFI/${_REFIND_SUBDIR}/refind${SPEC_UEFI_ARCH}.efi" "${DESTDIR}/boot/efi/EFI/boot/boot${SPEC_UEFI_ARCH}.efi"
cp -f "${DESTDIR}/boot/efi/EFI/arch/refind/refind${SPEC_UEFI_ARCH}.efi" "${DESTDIR}/boot/efi/EFI/boot/boot${SPEC_UEFI_ARCH}.efi"
cp -f "${_REFIND_CONFIG}" "${DESTDIR}/boot/efi/EFI/boot/refind.conf"
cp -rf "${DESTDIR}/boot/efi/EFI/${_REFIND_SUBDIR}/icons" "${DESTDIR}/boot/efi/EFI/boot/icons"
cp -rf "${DESTDIR}/boot/efi/EFI/arch/refind/icons" "${DESTDIR}/boot/efi/EFI/boot/icons"
fi
else
DIALOG --msgbox "Error setting up rEFInd UEFI ${UEFI_ARCH}." 0 0
DIALOG --msgbox "Error setting up refind-efi-${UEFI_ARCH}." 0 0
fi
}
dorefind_uefi_x86_64() {
do_efistub_uefi_x86_64
dorefind_uefi_common
}
dorefind_uefi_i386() {
do_efistub_uefi_i686
dorefind_uefi_common
}
# install syslinux and run preparation
prepare_syslinux() {
if ! [[ -e "${DESTDIR}/usr/sbin/extlinux" || -e "${DESTDIR}/usr/bin/mcopy" ]]; then
@ -5196,10 +5272,10 @@ configure_system() {
install_bootloader_uefi_x86_64() {
DIALOG --menu "Which x86_64 UEFI bootloader would you like to use?" 13 55 2 \
"rEFInd_UEFI_x86_64" "rEFInd x86_64 (supports only x86_64 EFISTUB kernels)" \
"EFISTUB_x86_64" "Only x86_64 Kernels" \
"GRUB_UEFI_x86_64" "GRUB(2) x86_64 UEFI" 2>${ANSWER} || CANCEL=1
case $(cat ${ANSWER}) in
"rEFInd_UEFI_x86_64") dorefind_uefi_x86_64 ;;
"EFISTUB_x86_64") do_efistub_uefi_x86_64 ;;
"GRUB_UEFI_x86_64") dogrub_uefi_x86_64 ;;
esac
@ -5208,10 +5284,10 @@ install_bootloader_uefi_x86_64() {
install_bootloader_uefi_i386() {
DIALOG --menu "Which i386 UEFI bootloader would you like to use?" 13 55 2 \
"rEFInd_UEFI_i386" "rEFInd i386 (supports only ix86 EFISTUB kernels)" \
"EFISTUB_i686" "Only i686 Kernels" \
"GRUB_UEFI_i386" "GRUB(2) i386 UEFI" 2>${ANSWER} || CANCEL=1
case $(cat ${ANSWER}) in
"rEFInd_UEFI_i386") dorefind_uefi_i386 ;;
"EFISTUB_i686") do_efistub_uefi_i686 ;;
"GRUB_UEFI_i386") dogrub_uefi_i386 ;;
esac