Unify grub (#262)

* initial commit testing unified grub

* buildiso: update to working grub version

* data: remove grub; move to own repo

* buildiso: adopt new grub-theme path
This commit is contained in:
artoo 2017-03-23 21:15:35 +01:00 committed by GitHub
parent d1d9e84dac
commit 98c3b5ddf1
2 changed files with 88 additions and 162 deletions

View file

@ -52,91 +52,70 @@ prepare_boot_extras(){
cp $1/usr/share/licenses/common/GPL2/license.txt $2/memtest.COPYING
}
prepare_efiboot_image(){
local efi=$1/EFI/miso boot=$2/${iso_name}/boot
prepare_dir "${efi}"
cp ${boot}/x86_64/vmlinuz ${efi}/vmlinuz.efi
cp ${boot}/x86_64/initramfs.img ${efi}/initramfs.img
if [[ -f ${boot}/intel_ucode.img ]] ; then
cp ${boot}/intel_ucode.img ${efi}/intel_ucode.img
fi
}
vars_to_boot_conf(){
sed -e "s|@ISO_NAME@|${iso_name}|g" \
-e "s|@ISO_LABEL@|${iso_label}|g" \
-e "s|@DIST_NAME@|${dist_name}|g" \
-e "s|@ARCH@|${target_arch}|g" \
-e "s|@DRV@|$2|g" \
-e "s|@SWITCH@|$3|g" \
-e "s|@BOOT_ARGS@||g" \
-i $1
}
prepare_efi_loader(){
local efi_data=$1/usr/share/efi-utils efi=$2/EFI/boot
msg2 "Preparing efi loaders ..."
prepare_dir "${efi}"
cp $1/usr/share/efitools/efi/PreLoader.efi ${efi}/bootx64.efi
cp $1/usr/share/efitools/efi/HashTool.efi ${efi}
cp ${efi_data}/gummibootx64.efi ${efi}/loader.efi
cp ${efi_data}/shellx64_v{1,2}.efi $2/EFI
prepare_grub(){
local src=i386-pc app='core.img' grub=$2/boot/grub efi=$2/efi/boot \
data=$1/usr/share/grub lib=$1/usr/lib/grub
local entries=$2/loader/entries
msg2 "Preparing efi loader config ..."
prepare_dir "${entries}"
prepare_dir ${grub}/${src}
cp ${efi_data}/loader.conf $2/loader/loader.conf
vars_to_boot_conf $2/loader/loader.conf
cp ${efi_data}/uefi-shell-v{1,2}-x86_64.conf ${entries}
cp ${data}/cfg/*.cfg ${grub}
local label='free' switch="no"
cp ${efi_data}/entry-x86_64-$3.conf ${entries}/${iso_name}-x86_64.conf
vars_to_boot_conf "${entries}/${iso_name}-x86_64.conf" "$label" "$switch"
if ${nonfree_mhwd};then
label='nonfree' switch="yes"
cp ${efi_data}/entry-x86_64-$3.conf ${entries}/${iso_name}-x86_64-nonfree.conf
vars_to_boot_conf "${entries}/${iso_name}-x86_64-nonfree.conf" "$label" "$switch"
fi
}
check_syslinux_select(){
local boot=${iso_root}/${iso_name}/boot
if [[ ! -f ${boot}/x86_64/vmlinuz ]] ; then
msg2 "Configuring syslinux for i686 architecture only ..."
sed -e "s/select.cfg/i686_inc.cfg/g" -i "$1/miso.cfg"
fi
}
check_syslinux_nonfree(){
msg2 "Configuring syslinux menu ..."
sed -e "/LABEL nonfree/,/^$/d" -i "$1/miso_sys_i686.cfg"
sed -e "/LABEL nonfree/,/^$/d" -i "$1/miso_sys_x86_64.cfg"
sed -e "/nonfree/ d" -i $1/syslinux.msg
}
prepare_isolinux(){
local syslinux=$1/usr/lib/syslinux/bios
msg2 "Copying isolinux binaries ..."
cp ${syslinux}/{{isolinux,isohdpfx}.bin,ldlinux.c32} $2
msg2 "Copying isolinux.cfg ..."
cp $1/usr/share/syslinux/isolinux/isolinux.cfg $2
vars_to_boot_conf "$2/isolinux.cfg"
}
prepare_syslinux(){
local syslinux=$1/usr/lib/syslinux/bios
msg2 "Copying syslinux binaries ..."
cp ${syslinux}/{*.c32,lpxelinux.0,memdisk} $2
msg2 "Copying syslinux theme ..."
syslinux=$1/usr/share/syslinux/theme
cp ${syslinux}/* $2
for conf in $2/*.cfg; do
vars_to_boot_conf "${conf}"
done
# Check for dual-arch
check_syslinux_select "$2"
if ! ${nonfree_mhwd};then
check_syslinux_nonfree "$2"
fi
vars_to_boot_conf "${grub}/grub.cfg"
cp ${lib}/${src}/* ${grub}/${src}
msg2 "Building %s ..." "${app}"
local mods=(iso9660 normal extcmd boot bufio crypto gettext terminal multiboot configfile linux linux16)
grub-mkimage -d ${grub}/${src} -o ${grub}/${src}/core.img -O ${src} -p /boot/grub biosdisk ${mods[@]}
cat ${grub}/${src}/cdboot.img ${grub}/${src}/core.img > ${grub}/${src}/eltorito.img
case ${target_arch} in
'i686')
src=i386-efi
app=bootia32.efi
;;
'x86_64')
src=x86_64-efi
app=bootx64.efi
;;
esac
prepare_dir ${efi}
prepare_dir ${grub}/${src}
cp ${lib}/${src}/* ${grub}/${src}
msg2 "Building %s ..." "${app}"
grub-mkimage -d ${grub}/${src} -o ${efi}/${app} -O ${src} -p /boot/grub ${mods[@]}
prepare_dir ${grub}/themes
cp -r ${data}/themes/${iso_name}-live ${grub}/themes/
cp ${data}/unicode.pf2 ${grub}
cp -r ${data}/{locales,tz} ${grub}
local size=8M mnt="${mnt_dir}/efiboot" img="$2/efi.img"
msg2 "Creating fat image of %s ..." "${size}"
truncate -s ${size} "${img}"
mkfs.fat -n MISO_EFI "${img}" &>/dev/null
mkdir -p "${mnt}"
mount_img "${img}" "${mnt}"
prepare_dir ${mnt}/efi/boot
msg2 "Building %s ..." "${app}"
grub-mkimage -d ${grub}/${src} -o ${mnt}/efi/boot/${app} -O ${src} -p /boot/grub ${mods[@]}
umount_img "${mnt}"
}

View file

@ -161,33 +161,30 @@ make_sfs() {
assemble_iso(){
msg "Creating ISO image..."
local efi_boot_args=() iso_publisher iso_app_id
if [[ -f "${iso_root}/EFI/miso/efiboot.img" ]]; then
msg2 "Setting efi args. El Torito detected."
efi_boot_args=("-eltorito-alt-boot"
"-e EFI/miso/efiboot.img"
"-isohybrid-gpt-basdat"
"-no-emul-boot")
fi
local iso_publisher iso_app_id
iso_publisher="$(get_osname) <$(get_disturl)>"
iso_app_id="$(get_osname) Live/Rescue CD"
xorriso -as mkisofs \
-iso-level 3 -rock -joliet \
-max-iso9660-filenames -omit-period \
-omit-version-number \
-relaxed-filenames -allow-lowercase \
--protective-msdos-label \
-volid "${iso_label}" \
-appid "${iso_app_id}" \
-publisher "${iso_publisher}" \
-preparer "Prepared by manjaro-tools/${0##*/}" \
-eltorito-boot isolinux/isolinux.bin \
-eltorito-catalog isolinux/boot.cat \
-no-emul-boot -boot-load-size 4 -boot-info-table \
-isohybrid-mbr "${iso_root}/isolinux/isohdpfx.bin" \
${efi_boot_args[@]} \
-e /efi.img \
-b boot/grub/i386-pc/eltorito.img \
-c boot.catalog \
-no-emul-boot \
-boot-load-size 4 \
-boot-info-table \
-graft-points \
--grub2-boot-info \
--grub2-mbr ${iso_root}/boot/grub/i386-pc/boot_hybrid.img \
--sort-weight 0 / --sort-weight 1 /boot \
-isohybrid-gpt-basdat \
-eltorito-alt-boot \
-output "${iso_dir}/${iso_file}" \
"${iso_root}/"
}
@ -345,11 +342,12 @@ make_image_mhwd() {
make_image_boot() {
if [[ ! -e ${work_dir}/build.${FUNCNAME} ]]; then
msg "Prepare [/iso/%s/boot]" "${iso_name}"
local boot="${iso_root}/${iso_name}/boot"
mkdir -p ${boot}/${target_arch}
msg "Prepare [/iso/boot]"
local boot="${iso_root}/boot"
cp ${work_dir}/rootfs/boot/vmlinuz* ${boot}/${target_arch}/vmlinuz
mkdir -p ${boot}
cp ${work_dir}/rootfs/boot/vmlinuz* ${boot}/vmlinuz-${target_arch}
local path="${work_dir}/bootfs"
mkdir -p ${path}
@ -363,74 +361,27 @@ make_image_boot() {
prepare_initcpio "${path}"
prepare_initramfs "${path}"
mv ${path}/boot/initramfs.img ${boot}/${target_arch}/initramfs.img
cp ${path}/boot/initramfs.img ${boot}/initramfs-${target_arch}.img
prepare_boot_extras "${path}" "${boot}"
umount_fs
rm -R ${path}
: > ${work_dir}/build.${FUNCNAME}
msg "Done [/iso/%s/boot]" "${iso_name}"
msg "Done [/iso/boot]"
fi
}
# Prepare /EFI
make_efi_usb() {
make_grub(){
if [[ ! -e ${work_dir}/build.${FUNCNAME} ]]; then
msg "Prepare [/iso/EFI]"
prepare_efi_loader "${work_dir}/livefs" "${iso_root}" "usb"
: > ${work_dir}/build.${FUNCNAME}
msg "Done [/iso/EFI]"
fi
}
msg "Prepare [/iso/boot/grub]"
# Prepare kernel.img::/EFI for "El Torito" EFI boot mode
make_efi_dvd() {
if [[ ! -e ${work_dir}/build.${FUNCNAME} ]]; then
msg "Prepare [/efiboot/EFI]"
local src="${iso_root}/EFI/miso"
mkdir -p "${src}"
local path="${work_dir}/rootfs"
local size=31M
local mnt="${mnt_dir}/efiboot" img="${src}/efiboot.img"
${pxe_boot} && size=46M
msg2 "Creating fat image of %s ..." "${size}"
truncate -s ${size} "${img}"
mkfs.fat -n MISO_EFI "${img}" &>/dev/null
mkdir -p "${mnt}"
mount_img "${img}" "${mnt}"
prepare_efiboot_image "${mnt}" "${iso_root}"
prepare_efi_loader "${work_dir}/livefs" "${mnt}" "dvd"
umount_img "${mnt}"
prepare_grub "${path}" "${iso_root}"
: > ${work_dir}/build.${FUNCNAME}
msg "Done [/efiboot/EFI]"
fi
}
make_isolinux() {
if [[ ! -e ${work_dir}/build.${FUNCNAME} ]]; then
msg "Prepare [/iso/isolinux]"
local isolinux=${iso_root}/isolinux
mkdir -p ${isolinux}
prepare_isolinux "${work_dir}/livefs" "${isolinux}"
: > ${work_dir}/build.${FUNCNAME}
msg "Done [/iso/isolinux]"
fi
}
make_syslinux() {
if [[ ! -e ${work_dir}/build.${FUNCNAME} ]]; then
msg "Prepare [/iso/${iso_name}/boot/syslinux]"
local syslinux=${iso_root}/${iso_name}/boot/syslinux
mkdir -p ${syslinux}
prepare_syslinux "${work_dir}/livefs" "${syslinux}"
mkdir -p ${syslinux}/hdt
# gzip -c -9 ${work_dir}/rootfs/usr/share/hwdata/pci.ids > ${syslinux}/hdt/pciids.gz
# gzip -c -9 ${work_dir}/livefs/usr/lib/modules/*-MANJARO/modules.alias > ${syslinux}/hdt/modalias.gz
: > ${work_dir}/build.${FUNCNAME}
msg "Done [/iso/${iso_name}/boot/syslinux]"
msg "Done [/iso/boot/grub]"
fi
}
@ -478,12 +429,8 @@ prepare_images(){
run_safe "make_image_mhwd"
fi
run_safe "make_image_boot"
run_safe "make_isolinux"
run_safe "make_syslinux"
if [[ "${target_arch}" == "x86_64" ]]; then
run_safe "make_efi_usb"
run_safe "make_efi_dvd"
fi
run_safe "make_grub"
show_elapsed_time "${FUNCNAME}" "${timer}"
}