diff --git a/setup.sh b/setup.sh index a8ea41d..018aa2e 100644 --- a/setup.sh +++ b/setup.sh @@ -612,11 +612,41 @@ function paru_install () { fi } +function configure_syslinux () { + paru_install 'syslinux' + cp /usr/lib/syslinux/bios/*.c32 /boot/syslinux + extlinux --install /boot/syslinux + cat > /boot/syslinux/syslinux.cfg <<EOF +UI menu.c32 +PROMPT 0 + +MENU TITLE ZFSBootMenu +TIMEOUT 100 + +DEFAULT zfsbootmenu + +LABEL zfsbootmenu + MENU LABEL ZFSBootMenu + KERNEL /zfsbootmenu/vmlinuz-bootmenu + INITRD /zfsbootmenu/initramfs-bootmenu.img + APPEND zfsbootmenu quiet loglevel=0 + +LABEL zfsbootmenu-backup + MENU LABEL ZFSBootMenu (Backup) + KERNEL /zfsbootmenu/vmlinuz-bootmenu-backup + INITRD /zfsbootmenu/initramfs-bootmenu-backup.img + APPEND zfsbootmenu quiet loglevel=0 +EOF + dd bs=440 count=1 conv=notrunc if='/usr/lib/syslinux/bios/mbr.bin' of="${boot_drive}" +} + function configure_zfsbootmenu () { #2.9 paru_install 'zfsbootmenu' - mkdir -p '/etc/zfsbootmenu/posthooks.d' - cat > '/etc/zfsbootmenu/config.yaml' <<EOF + + if [[ "${part_schema}" = 'gpt' ]]; then + mkdir -p '/etc/zfsbootmenu/posthooks.d' + cat > '/etc/zfsbootmenu/config.yaml' <<EOF Global: ManageImages: true BootMountPoint: /efi @@ -633,6 +663,23 @@ Kernel: CommandLine: ro loglevel=0 zbm.import_policy=hostid Prefix: vmlinuz EOF + get_known_good_stub_loader + else + configure_syslinux + cat > '/etc/zfsbootmenu/config.yaml' <<EOF +Global: + ManageImages: true + BootMountPoint: /boot/syslinux + InitCPIO: true +Components: + Enabled: true + Versions: false + ImageDir: /boot/syslinux/zfsbootmenu +Kernel: + Prefix: vmlinuz +EOF + fi + # Up here maybe 'ro quiet' instead of 'ro'. This is ZFSBootMenu's kernel # command line. @@ -688,7 +735,9 @@ function install_os_in_chroot () { # Install ZFSBootMenu image configure_zfsbootmenu #2.9 - get_known_good_stub_loader #2.10 + generate-zbm + + # Yes, we do this twice so we immediately get a functional backup file generate-zbm }