From 5c4862719584ce31d4790241c0f8f3f73a635eba Mon Sep 17 00:00:00 2001 From: Simon Rieger Date: Thu, 9 Feb 2017 02:24:57 +0100 Subject: [PATCH] EFI support --- make_mksquashfs.sh | 152 ++++++++++++++++++++++++++++++++------------- 1 file changed, 110 insertions(+), 42 deletions(-) diff --git a/make_mksquashfs.sh b/make_mksquashfs.sh index 7e37d26..6716c96 100644 --- a/make_mksquashfs.sh +++ b/make_mksquashfs.sh @@ -1,50 +1,118 @@ #!/bin/bash -echo "HOOKS="base udev archiso sata filesystems"" > work/airootfs/etc/mkinitcpio.conf -echo "COMPRESSION="xz"" >> work/airootfs/etc/mkinitcpio.conf +set -e -u -arch-chroot work/airootfs mkinitcpio -p linux +iso_name=SIMON_OS +iso_label="SIMON_OS" +iso_version=$(date +%Y.%m.%d) +work_dir=work +out_dir=out +install_dir=arch -mkdir work/iso -mkdir work/iso/isolinux -mkdir work/iso/arch -mkdir work/iso/arch/boot -mkdir work/iso/arch/x86_64 -mkdir work/iso/arch/boot/x86_64 -mkdir work/iso/arch/boot/syslinux +pacstrap -i ${work_dir}/airootfs base base-devel syslinux efibootmgr -cp -R work/airootfs/usr/lib/syslinux/bios/* work/iso/arch/boot/syslinux/ -cp work/airootfs/boot/initramfs-linux.img work/iso/arch/boot/x86_64/ -cp work/airootfs/boot/initramfs-linux-fallback.img work/iso/arch/boot/x86_64/ -cp work/airootfs/boot/vmlinuz-linux work/iso/arch/boot/x86_64/ -cp work/airootfs/usr/lib/syslinux/bios/isolinux.bin work/iso/isolinux/ -cp work/airootfs/usr/lib/syslinux/bios/isohdpfx.bin work/iso/isolinux/ -cp work/airootfs/usr/lib/syslinux/bios/ldlinux.c32 work/iso/isolinux/ +echo "HOOKS="base udev archiso sata filesystems"" > ${work_dir}/airootfs/etc/mkinitcpio.conf +echo "COMPRESSION="xz"" >> ${work_dir}/airootfs/etc/mkinitcpio.conf -arch-chroot work/airootfs LANG=C pacman -Sl | awk '/\[installed\]$/ {print $1 "/" $2 "-" $3}' > /pkglist.txt -cp work/airootfs/pkglist.txt work/iso/arch/x86_64/ -arch-chroot work/airootfs pacman -Scc -mksquashfs work/airootfs work/iso/arch/x86_64/airootfs.sfs -noappend -comp xz -md5sum work/iso/arch/x86_64/airootfs.sfs > work/iso/arch/x86_64/airootfs.md5 +arch-chroot ${work_dir}/airootfs mkinitcpio -p linux -echo "DEFAULT menu.c32" > work/iso/arch/boot/syslinux/syslinux.cfg -echo "PROMPT 0" >> work/iso/arch/boot/syslinux/syslinux.cfg -echo "MENU TITLE Simon Linux" >> work/iso/arch/boot/syslinux/syslinux.cfg -echo "TIMEOUT 300" >> work/iso/arch/boot/syslinux/syslinux.cfg -echo "" >> work/iso/arch/boot/syslinux/syslinux.cfg -echo "LABEL arch" >> work/iso/arch/boot/syslinux/syslinux.cfg -echo "MENU LABEL Simon Linux" >> work/iso/arch/boot/syslinux/syslinux.cfg -echo "LINUX ../x86_64/vmlinuz-linux" >> work/iso/arch/boot/syslinux/syslinux.cfg -echo "INITRD ../x86_64/initramfs-linux-fallback.img" >> work/iso/arch/boot/syslinux/syslinux.cfg -echo "APPEND archisolabel=SIMON_LINUX" >> work/iso/arch/boot/syslinux/syslinux.cfg -echo "" >> work/iso/arch/boot/syslinux/syslinux.cfg -echo "ONTIMEOUT arch" >> work/iso/arch/boot/syslinux/syslinux.cfg +# BIOS -echo "DEFAULT loadconfig" > work/iso/isolinux/isolinux.cfg -echo "" >> work/iso/isolinux/isolinux.cfg -echo "LABEL loadconfig" >> work/iso/isolinux/isolinux.cfg -echo " CONFIG /arch/boot/syslinux/syslinux.cfg" >> work/iso/isolinux/isolinux.cfg -echo " APPEND /arch/boot/syslinux/" >> work/iso/isolinux/isolinux.cfg +mkdir ${work_dir}/iso +mkdir ${work_dir}/iso/isolinux +mkdir ${work_dir}/iso/arch +mkdir ${work_dir}/iso/arch/boot +mkdir ${work_dir}/iso/arch/x86_64 +mkdir ${work_dir}/iso/arch/boot/x86_64 +mkdir ${work_dir}/iso/arch/boot/syslinux + +cp -R ${work_dir}/airootfs/usr/lib/syslinux/bios/* ${work_dir}iso/arch/boot/syslinux/ +cp ${work_dir}/airootfs/boot/initramfs-linux.img ${work_dir}/iso/arch/boot/x86_64/ +cp ${work_dir}/airootfs/boot/initramfs-linux-fallback.img w${work_dir}/iso/arch/boot/x86_64/ +cp ${work_dir}/airootfs/boot/vmlinuz-linux ${work_dir}/iso/arch/boot/x86_64/ +cp ${work_dir}/airootfs/usr/lib/syslinux/bios/isolinux.bin ${work_dir}/iso/isolinux/ +cp ${work_dir}/airootfs/usr/lib/syslinux/bios/isohdpfx.bin ${work_dir}/iso/isolinux/ +cp ${work_dir}/airootfs/usr/lib/syslinux/bios/ldlinux.c32 ${work_dir}/iso/isolinux/ + +arch-chroot ${work_dir}/airootfs LANG=C pacman -Sl | awk '/\[installed\]$/ {print $1 "/" $2 "-" $3}' > /pkglist.txt +cp ${work_dir}/airootfs/pkglist.txt ${work_dir}/iso/arch/x86_64/ +arch-chroot ${work_dir}/airootfs pacman -Scc +mksquashfs ${work_dir}/airootfs ${work_dir}/iso/arch/x86_64/airootfs.sfs -noappend -comp xz +md5sum ${work_dir}/iso/arch/x86_64/airootfs.sfs > ${work_dir}/iso/arch/x86_64/airootfs.md5 + +echo "DEFAULT menu.c32" > ${work_dir}/iso/arch/boot/syslinux/syslinux.cfg +echo "PROMPT 0" >> ${work_dir}/iso/arch/boot/syslinux/syslinux.cfg +echo "MENU TITLE ${iso_name}" >> ${work_dir}/iso/arch/boot/syslinux/syslinux.cfg +echo "TIMEOUT 300" >> ${work_dir}/iso/arch/boot/syslinux/syslinux.cfg +echo "" >> ${work_dir}/iso/arch/boot/syslinux/syslinux.cfg +echo "LABEL arch" >> ${work_dir}/iso/arch/boot/syslinux/syslinux.cfg +echo "MENU LABEL ${iso_name}" >> ${work_dir}/iso/arch/boot/syslinux/syslinux.cfg +echo "LINUX ../x86_64/vmlinuz-linux" >> ${work_dir}/iso/arch/boot/syslinux/syslinux.cfg +echo "INITRD ../x86_64/initramfs-linux-fallback.img" >> ${work_dir}/iso/arch/boot/syslinux/syslinux.cfg +echo "APPEND archisolabel=${iso_name}" >> ${work_dir}/iso/arch/boot/syslinux/syslinux.cfg +echo "" >> ${work_dir}/iso/arch/boot/syslinux/syslinux.cfg +echo "ONTIMEOUT arch" >> ${work_dir}/iso/arch/boot/syslinux/syslinux.cfg + +echo "DEFAULT loadconfig" > ${work_dir}/iso/isolinux/isolinux.cfg +echo "" >> ${work_dir}/iso/isolinux/isolinux.cfg +echo "LABEL loadconfig" >> ${work_dir}/iso/isolinux/isolinux.cfg +echo " CONFIG /arch/boot/syslinux/syslinux.cfg" >> ${work_dir}/iso/isolinux/isolinux.cfg +echo " APPEND /arch/boot/syslinux/" >> ${work_dir}/iso/isolinux/isolinux.cfg + +# EFI + +mkdir -p ${work_dir}/iso/EFI/boot +cp ${work_dir}/x86_64/airootfs/usr/share/efitools/efi/PreLoader.efi ${work_dir}/iso/EFI/boot/bootx64.efi +cp ${work_dir}/x86_64/airootfs/usr/share/efitools/efi/HashTool.efi ${work_dir}/iso/EFI/boot/ + +cp ${work_dir}/x86_64/airootfs/usr/lib/systemd/boot/efi/systemd-bootx64.efi ${work_dir}/iso/EFI/boot/loader.efi + +mkdir -p ${work_dir}/iso/loader/entries +cp ${script_path}/efiboot/loader/loader.conf ${work_dir}/iso/loader/ +cp ${script_path}/efiboot/loader/entries/uefi-shell-v2-x86_64.conf ${work_dir}/iso/loader/entries/ +cp ${script_path}/efiboot/loader/entries/uefi-shell-v1-x86_64.conf ${work_dir}/iso/loader/entries/ + +sed "s|%ARCHISO_LABEL%|${iso_label}|g; + s|%INSTALL_DIR%|${install_dir}|g" \ +${script_path}/efiboot/loader/entries/archiso-x86_64-usb.conf > ${work_dir}/iso/loader/entries/archiso-x86_64.conf + +# EFI Shell 2.0 for UEFI 2.3+ +curl -o ${work_dir}/iso/EFI/shellx64_v2.efi https://raw.githubusercontent.com/tianocore/edk2/master/ShellBinPkg/UefiShell/X64/Shell.efi +# EFI Shell 1.0 for non UEFI 2.3+ +curl -o ${work_dir}/iso/EFI/shellx64_v1.efi https://raw.githubusercontent.com/tianocore/edk2/master/EdkShellBinPkg/FullShell/X64/Shell_Full.efi + +mkdir -p ${work_dir}/iso/EFI +mkdir -p ${work_dir}/iso/EFI/archiso +truncate -s 64M ${work_dir}/iso/EFI/archiso/efiboot.img +mkfs.fat -n ARCHISO_EFI ${work_dir}/iso/EFI/archiso/efiboot.img + +mkdir -p ${work_dir}/efiboot +mount ${work_dir}/iso/EFI/archiso/efiboot.img ${work_dir}/efiboot + +mkdir -p ${work_dir}/efiboot/EFI/archiso +cp ${work_dir}/iso/${install_dir}/boot/x86_64/vmlinuz ${work_dir}/efiboot/EFI/archiso/vmlinuz.efi +cp ${work_dir}/iso/${install_dir}/boot/x86_64/archiso.img ${work_dir}/efiboot/EFI/archiso/archiso.img + +cp ${work_dir}/iso/${install_dir}/boot/intel_ucode.img ${work_dir}/efiboot/EFI/archiso/intel_ucode.img + +mkdir -p ${work_dir}/efiboot/EFI/boot +cp ${work_dir}/x86_64/airootfs/usr/share/efitools/efi/PreLoader.efi ${work_dir}/efiboot/EFI/boot/bootx64.efi + +cp ${work_dir}/x86_64/airootfs/usr/share/efitools/efi/HashTool.efi ${work_dir}/efiboot/EFI/boot/ + +cp ${work_dir}/x86_64/airootfs/usr/lib/systemd/boot/efi/systemd-bootx64.efi ${work_dir}/efiboot/EFI/boot/loader.efi +mkdir -p ${work_dir}/efiboot/loader/entries +cp ${script_path}/efiboot/loader/loader.conf ${work_dir}/efiboot/loader/ +cp ${script_path}/efiboot/loader/entries/uefi-shell-v2-x86_64.conf ${work_dir}/efiboot/loader/entries/ +cp ${script_path}/efiboot/loader/entries/uefi-shell-v1-x86_64.conf ${work_dir}/efiboot/loader/entries/ + +sed "s|%ARCHISO_LABEL%|${iso_label}|g; +s|%INSTALL_DIR%|${install_dir}|g" \ +./efiboot/loader/entries/archiso-x86_64-cd.conf > ${work_dir}/efiboot/loader/entries/archiso-x86_64.conf + +cp ${work_dir}/iso/EFI/shellx64_v2.efi ${work_dir}/efiboot/EFI/ +cp ${work_dir}/iso/EFI/shellx64_v1.efi ${work_dir}/efiboot/EFI/ +umount -d ${work_dir}/efiboot read -p "Soll das Image jetzt gemacht werden? [Y/n] " image @@ -54,10 +122,10 @@ if [ "$image" != "n" ] xorriso -as mkisofs \ -iso-level 3 \ -full-iso9660-filenames \ --volid "SIMON_LINUX" \ +-volid "${iso_label}" \ -eltorito-boot isolinux/isolinux.bin \ -eltorito\-catalog isolinux/boot.cat \ -no-emul-boot -boot-load-size 4 -boot-info-table \ --isohybrid-mbr $(pwd)/work/iso/isolinux/isohdpfx.bin \ --output out/arch-simon-linux-$(date "+%y.%m.%d")-x86_64.iso work/iso/ +-isohybrid-mbr $(pwd)/${work_dir}/iso/isolinux/isohdpfx.bin \ +-output out/arch-${iso_label}-$(date "+%y.%m.%d")-x86_64.iso ${work_dir}/iso/ fi