Initial support for syslinux

This commit is contained in:
Zach Dykstra 2019-12-31 20:51:39 -06:00
parent 5fecb80f5b
commit 09b1833297
4 changed files with 69 additions and 1 deletions

View File

@ -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*" );

View File

@ -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

1
examples/kboot.conf Normal file
View File

@ -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'

7
examples/syslinux.cfg Normal file
View File

@ -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