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:
parent
d1d9e84dac
commit
98c3b5ddf1
2 changed files with 88 additions and 162 deletions
|
@ -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}"
|
||||
}
|
||||
|
|
109
lib/util-iso.sh
109
lib/util-iso.sh
|
@ -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}"
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue