From 09b1833297ea479a15b010ad3c689666a6765ce3 Mon Sep 17 00:00:00 2001 From: Zach Dykstra Date: Tue, 31 Dec 2019 20:51:39 -0600 Subject: [PATCH] Initial support for syslinux --- bin/generate-zbm | 56 ++++++++++++++++++++++++++++++++++++++ etc/zfsbootmenu/config.ini | 6 +++- examples/kboot.conf | 1 + examples/syslinux.cfg | 7 +++++ 4 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 examples/kboot.conf create mode 100644 examples/syslinux.cfg diff --git a/bin/generate-zbm b/bin/generate-zbm index 3a8408e..4f85750 100755 --- a/bin/generate-zbm +++ b/bin/generate-zbm @@ -173,6 +173,62 @@ if ( defined( $config{Components}{Copies} ) and ( $config{Components}{Copies} gt } } +if ( defined( $config{syslinux}{Copies} ) and ( $config{syslinux}{Copies} gt 0 ) ) { + $runConf{kernel_target} = + sprintf( "%s/%s-%s", $config{syslinux}{ImageDir}, $runConf{kernel_prefix}, $runConf{version} ); + $runConf{initramfs_target} = sprintf( "%s/initramfs-%s.img", $config{syslinux}{ImageDir}, $runConf{version} ); + + my $glob = sprintf( "%s/%s-*", $config{syslinux}{ImageDir}, $runConf{kernel_prefix} ); + my @listing = sort glob($glob); + + printf "Found %s existing images, allowed to have a total of %s\n", scalar @listing, $config{syslinux}{Copies}; + while ( scalar @listing > $config{syslinux}{Copies} ) { + my $kernel = shift(@listing); + my $initramfs = sprintf( "%s.img", $kernel ); + $initramfs =~ s/\Q$runConf{kernel_prefix}/initramfs/; + printf "Removing %s, %s\n", $kernel, $initramfs; + unlink $kernel; + unlink $initramfs; + } + + make_path $config{syslinux}{ImageDir}; + if ( safeCopy( $runConf{kernel}, $runConf{kernel_target} ) + and safeCopy( $runConf{initramfs}, $runConf{initramfs_target} ) ) + { + printf "Created %s, %s\n", $runConf{kernel_target}, $runConf{initramfs_target}; + } + + $glob = sprintf( "%s/%s-*", $config{syslinux}{ImageDir}, $runConf{kernel_prefix} ); + @listing = sort glob($glob); + + $runConf{syslinux_temp} = join('/', $tempdir, 'syslinux.conf'); + open CFG, '>', $runConf{syslinux_temp}; + + my $add_default = 1; + while (@listing) { + my $entry = pop(@listing); + + my $kernel = basename( $entry ); + my (undef,$version) = split('-', basename( $kernel )); + my $label = "ZFSBootMenu-$version"; + + if ($add_default) { + print CFG "DEFAULT $label\n\n"; + $add_default--; + } + + print CFG "LABEL $label\n"; + print CFG "KERNEL /$kernel\n"; + print CFG "INITRD /initramfs-$version.img\n"; + print CFG "APPEND $config{Kernel}{CommandLine}\n"; + print CFG "\n"; + + } + close CFG; + + make_path basename( $config{syslinux}{Config} ); + safeCopy( $runConf{syslinux_temp}, $config{syslinux}{Config} ); +} # Finds the latest kernel in /boot sub latestKernel { my @prefixes = ( "vmlinux*", "vmlinuz*", "linux*", "kernel*" ); diff --git a/etc/zfsbootmenu/config.ini b/etc/zfsbootmenu/config.ini index b1c1e36..9033444 100644 --- a/etc/zfsbootmenu/config.ini +++ b/etc/zfsbootmenu/config.ini @@ -4,7 +4,6 @@ DracutConfDir=/etc/zfsbootmenu/dracut.conf.d [Kernel] CommandLine="ro quiet loglevel=0" - [Components] ImageDir=/boot/efi/EFI/void Versioned=1 @@ -14,3 +13,8 @@ Copies=3 ImageDir=/boot/efi/EFI/void Versioned=1 Copies=0 + +[syslinux] +ImageDir=/boot/syslinux +Config=/boot/syslinux/syslinux.cfg +Copies=0 diff --git a/examples/kboot.conf b/examples/kboot.conf new file mode 100644 index 0000000..3ac4de7 --- /dev/null +++ b/examples/kboot.conf @@ -0,0 +1 @@ +ZFSBootMenu-0.7.6='/boot/vmlinux-0.7.6 initrd=/boot/initramfs-0.7.6.img root=zfsbootmenu:POOL=zroot spl_hostid=68f7287a quiet loglevel=0 ro rd.driver.blacklist=usbcore rd.driver.blacklist=xhci_hcd rd.driver.blacklist=xhci_pci amdgpu.dc=1 radeon.cik_support=0 amdgpu.cik_support=1 amdgpu.dpm=1' diff --git a/examples/syslinux.cfg b/examples/syslinux.cfg new file mode 100644 index 0000000..eb02a19 --- /dev/null +++ b/examples/syslinux.cfg @@ -0,0 +1,7 @@ +DEFAULT ZFSBootMenu-0.7.6 + +LABEL ZFSBootMenu-0.7.6 +KERNEL /vmlinux-0.7.6 +INITRD /initramfs-0.7.6.img +APPEND root=zfsbootmenu:POOL=zroot spl_hostid=68f7287a quiet loglevel=0 ro rd.driver.blacklist=usbcore rd.driver.blacklist=xhci_hcd rd.driver.blacklist=xhci_pci amdgpu.dc=1 radeon.cik_support=0 amdgpu.cik_support=1 amdgpu.dpm=1 +