mirror of
https://github.com/rancher/os.git
synced 2025-08-13 20:36:36 +00:00
Merge pull request #1263 from deitch/efi-live-boot-support
Add EFI live boot support
This commit is contained in:
commit
94fd38c358
@ -20,6 +20,7 @@ RUN apt-get update && \
|
|||||||
gccgo \
|
gccgo \
|
||||||
genisoimage \
|
genisoimage \
|
||||||
git \
|
git \
|
||||||
|
grub-efi \
|
||||||
isolinux \
|
isolinux \
|
||||||
less \
|
less \
|
||||||
libblkid-dev \
|
libblkid-dev \
|
||||||
|
28
efi.txt
Normal file
28
efi.txt
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
To install with EFI:
|
||||||
|
|
||||||
|
A: install grub-efi
|
||||||
|
|
||||||
|
apt install grub-efi
|
||||||
|
|
||||||
|
B: Add to the installation process in scripts/package-iso
|
||||||
|
|
||||||
|
1. Make directories ${CD}/boot/grub and ${CD}/EFI/BOOT
|
||||||
|
2. Install the various grub modules from /usr/lib/grub/x86_64-efi/ to ${CD}/boot/grub/x86_64-efi/
|
||||||
|
3. Copy scripts/grub.cfg to ${CD}/boot/grub/grub.cfg
|
||||||
|
4. Run grub-mkimage to create the grub image:
|
||||||
|
|
||||||
|
(cd ${CD} && grub-mkimage -O x86_64-efi -o EFI/BOOT/BOOTX64.EFI --config=boot/grub/grub.cfg --compression=auto --prefix='()/boot/grub' disk part_msdos fat iso9660 )
|
||||||
|
|
||||||
|
NOTE: do *NOT* try to install the linux module directly in the grub image; it causes command-line options not to be passed and is a known bug.
|
||||||
|
|
||||||
|
5. Add the following xorriso options
|
||||||
|
|
||||||
|
-eltorito-alt-boot -e EFI/BOOT/BOOTX64.EFI -no-emul-boot \
|
||||||
|
-isohybrid-gpt-basdat \
|
||||||
|
|
||||||
|
This installation includes *no* additional icons or drivers. It is just meant to get RancherOS booted on an EFI system.
|
||||||
|
If you want to add support for graphical installations, additional filesystems, and everything else.... you will need a lot more
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
14
scripts/grub.cfg
Normal file
14
scripts/grub.cfg
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
set default="0"
|
||||||
|
set timeout=10
|
||||||
|
|
||||||
|
set gfxmode=auto
|
||||||
|
insmod efi_gop
|
||||||
|
insmod efi_uga
|
||||||
|
|
||||||
|
|
||||||
|
menuentry "Rancher" {
|
||||||
|
set gfxpayload=keep
|
||||||
|
linux /boot/vmlinuz quiet rancher.autologin=tty1 rancher.autologin=ttyS0
|
||||||
|
initrd /boot/initrd
|
||||||
|
}
|
||||||
|
|
@ -9,7 +9,7 @@ CD=${BUILD}/cd
|
|||||||
ISO=${ARTIFACTS}/$(echo ${DISTRIB_ID} | tr '[:upper:]' '[:lower:]').iso
|
ISO=${ARTIFACTS}/$(echo ${DISTRIB_ID} | tr '[:upper:]' '[:lower:]').iso
|
||||||
CHECKSUM=iso-checksums.txt
|
CHECKSUM=iso-checksums.txt
|
||||||
|
|
||||||
mkdir -p ${CD}/boot/isolinux
|
## TRADITIONAL MBR BOOT
|
||||||
mkdir -p ${CD}/boot/isolinux
|
mkdir -p ${CD}/boot/isolinux
|
||||||
|
|
||||||
if [ ! -f ${ARTIFACTS}/vmlinuz ] || [ ! -f ${ARTIFACTS}/initrd ]; then
|
if [ ! -f ${ARTIFACTS}/vmlinuz ] || [ ! -f ${ARTIFACTS}/initrd ]; then
|
||||||
@ -21,12 +21,42 @@ cp ${ARTIFACTS}/vmlinuz ${CD}/boot
|
|||||||
cp scripts/isolinux.cfg ${CD}/boot/isolinux
|
cp scripts/isolinux.cfg ${CD}/boot/isolinux
|
||||||
cp /usr/lib/ISOLINUX/isolinux.bin ${CD}/boot/isolinux
|
cp /usr/lib/ISOLINUX/isolinux.bin ${CD}/boot/isolinux
|
||||||
cp /usr/lib/syslinux/modules/bios/ldlinux.c32 ${CD}/boot/isolinux
|
cp /usr/lib/syslinux/modules/bios/ldlinux.c32 ${CD}/boot/isolinux
|
||||||
|
|
||||||
|
|
||||||
|
## EFI BOOT
|
||||||
|
mkdir -p ${CD}/EFI/BOOT
|
||||||
|
mkdir -p ${CD}/boot/grub
|
||||||
|
cp scripts/grub.cfg ${CD}/boot/grub
|
||||||
|
cp -r /usr/lib/grub/x86_64-efi/ ${CD}/boot/grub
|
||||||
|
|
||||||
|
(cd ${CD} && grub-mkimage -O x86_64-efi -o EFI/BOOT/BOOTX64.EFI --config=boot/grub/grub.cfg --compression=auto --prefix='()/boot/grub' disk part_msdos fat iso9660 )
|
||||||
|
|
||||||
|
# make the EFI FAT filesystem to boot
|
||||||
|
EFIIMG=boot/efiboot.img
|
||||||
|
CDEFI=${CD}/${EFIIMG}
|
||||||
|
rm -f ${CDEFI}
|
||||||
|
dd if=/dev/zero of=${CDEFI} bs=4k count=1000
|
||||||
|
mkfs.vfat ${CDEFI}
|
||||||
|
mkdir -p tmp/
|
||||||
|
mount -o loop ${CDEFI} tmp/
|
||||||
|
cp -r ${CD}/EFI tmp/
|
||||||
|
umount tmp/
|
||||||
|
rmdir tmp/
|
||||||
|
|
||||||
|
rm -rf ${CD}/EFI
|
||||||
|
|
||||||
|
|
||||||
|
## BUILD THE ISO IMAGE
|
||||||
|
|
||||||
cd ${CD} && xorriso \
|
cd ${CD} && xorriso \
|
||||||
-as mkisofs \
|
-as mkisofs \
|
||||||
-l -J -R -V "${DISTRIB_ID}" \
|
-l -J -R -V "${DISTRIB_ID}" \
|
||||||
-no-emul-boot -boot-load-size 4 -boot-info-table \
|
-no-emul-boot -boot-load-size 4 -boot-info-table \
|
||||||
-b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat \
|
-b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat \
|
||||||
-isohybrid-mbr /usr/lib/ISOLINUX/isohdpfx.bin \
|
-isohybrid-mbr /usr/lib/ISOLINUX/isohdpfx.bin \
|
||||||
|
-eltorito-alt-boot \
|
||||||
|
-e ${EFIIMG} -no-emul-boot \
|
||||||
|
-isohybrid-gpt-basdat \
|
||||||
-o $ISO ${CD}
|
-o $ISO ${CD}
|
||||||
|
|
||||||
cd $(dirname $ISO)
|
cd $(dirname $ISO)
|
||||||
|
17
scripts/run
17
scripts/run
@ -41,6 +41,21 @@ while [ "$#" -gt 0 ]; do
|
|||||||
--kvm)
|
--kvm)
|
||||||
KVM=1
|
KVM=1
|
||||||
;;
|
;;
|
||||||
|
--efi)
|
||||||
|
# set where our EFI firmware binary is
|
||||||
|
EFIFIRMWARE="./build/OVMF.fd"
|
||||||
|
# create the command-line to pass to qemu
|
||||||
|
EFI="--bios $EFIFIRMWARE"
|
||||||
|
# if the firmware does not yet exist, download it
|
||||||
|
if [[ ! -e "$EFIFIRMWARE" ]]; then
|
||||||
|
echo "Downloading OVMF EFI firmware"
|
||||||
|
# because unzip does not support streaming from stdin...
|
||||||
|
curl --location http://downloads.sourceforge.net/project/edk2/OVMF/OVMF-X64-r15214.zip > ./build/ovmf.zip
|
||||||
|
unzip ./build/ovmf.zip -d ./build OVMF.fd
|
||||||
|
rm -f ./build/ovmf.zip
|
||||||
|
echo "Download OVMF EFI firmware complete"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
--no-format)
|
--no-format)
|
||||||
FORMAT=0
|
FORMAT=0
|
||||||
;;
|
;;
|
||||||
@ -138,6 +153,7 @@ if [ "$QEMU" == "1" ]; then
|
|||||||
${CPU} \
|
${CPU} \
|
||||||
${machine["$ARCH"]} \
|
${machine["$ARCH"]} \
|
||||||
-m 2048 \
|
-m 2048 \
|
||||||
|
${EFI} \
|
||||||
${network["$ARCH"]} \
|
${network["$ARCH"]} \
|
||||||
$(eval "${hd["$ARCH"]} ${HD}") \
|
$(eval "${hd["$ARCH"]} ${HD}") \
|
||||||
${SECOND_DRIVE_ENABLE} \
|
${SECOND_DRIVE_ENABLE} \
|
||||||
@ -160,6 +176,7 @@ if [ "$QEMU" == "1" ]; then
|
|||||||
-kernel ${KERNEL} \
|
-kernel ${KERNEL} \
|
||||||
-initrd ${INITRD} \
|
-initrd ${INITRD} \
|
||||||
-m 2048 \
|
-m 2048 \
|
||||||
|
${EFI} \
|
||||||
${network["$ARCH"]} \
|
${network["$ARCH"]} \
|
||||||
$(eval "${hd["$ARCH"]} ${HD}") \
|
$(eval "${hd["$ARCH"]} ${HD}") \
|
||||||
${SECOND_DRIVE_ENABLE} \
|
${SECOND_DRIVE_ENABLE} \
|
||||||
|
Loading…
Reference in New Issue
Block a user