Skip to content

Commit ddcee9d

Browse files
committed
generate-zbm: allow globs for kernel-version specs
Closes: #420.
1 parent 22998b4 commit ddcee9d

File tree

3 files changed

+37
-21
lines changed

3 files changed

+37
-21
lines changed

bin/generate-zbm

Lines changed: 33 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -269,11 +269,20 @@ if ( nonempty $runConf{kernel} ) {
269269

270270
# Try to determine a kernel file when one was not provided
271271
if ( nonempty $runConf{kernel_version} ) {
272-
$runConf{kernel} = versionedKernel $runConf{kernel_version};
272+
my $exactVersion;
273+
( $runConf{kernel}, $exactVersion ) = versionedKernel $runConf{kernel_version};
274+
275+
# Make sure a kernel was found
273276
unless ( nonempty $runConf{kernel} ) {
274277
print "Unable to find file for kernel version $runConf{kernel_version}\n";
275278
exit 1;
276279
}
280+
281+
# If the kernel version was not exact, allow it to be determined later
282+
unless ($exactVersion) {
283+
undef $runConf{kernel_version};
284+
}
285+
277286
} else {
278287
$runConf{kernel} = latestKernel;
279288
unless ( nonempty $runConf{kernel} ) {
@@ -284,26 +293,24 @@ if ( nonempty $runConf{kernel} ) {
284293
}
285294

286295
# Try to determine kernel_prefix or kernel_version if necessary
287-
unless ( nonempty $runConf{kernel_prefix} and nonempty $runConf{kernel_version} ) {
296+
unless ( nonempty $runConf{kernel_version} ) {
288297

289298
# Kernel version comes from either file name or internal strings
299+
$runConf{kernel_version} = kernelVersion( $runConf{kernel} );
290300
unless ( nonempty $runConf{kernel_version} ) {
291-
$runConf{kernel_version} = kernelVersion( $runConf{kernel} );
292-
unless ( nonempty $runConf{kernel_version} ) {
293-
printf "Unable to determine kernel version from %s\n", $runConf{kernel};
294-
exit 1;
295-
}
301+
printf "Unable to determine kernel version from %s\n", $runConf{kernel};
302+
exit 1;
296303
}
304+
}
297305

298-
unless ( nonempty $runConf{kernel_prefix} ) {
306+
unless ( nonempty $runConf{kernel_prefix} ) {
299307

300-
# Prefix is basename of file, less any "-<version>" suffix
301-
$runConf{kernel_prefix} = basename( $runConf{kernel} );
302-
$runConf{kernel_prefix} =~ s/-\Q$runConf{kernel_version}\E$//;
303-
unless ( nonempty $runConf{kernel_prefix} ) {
304-
printf "Unable to determine kernel prefix from %s\n", $runConf{kernel};
305-
exit 1;
306-
}
308+
# Prefix is basename of file, less any "-<version>" suffix
309+
$runConf{kernel_prefix} = basename( $runConf{kernel} );
310+
$runConf{kernel_prefix} =~ s/-\Q$runConf{kernel_version}\E$//;
311+
unless ( nonempty $runConf{kernel_prefix} ) {
312+
printf "Unable to determine kernel prefix from %s\n", $runConf{kernel};
313+
exit 1;
307314
}
308315
}
309316

@@ -587,10 +594,18 @@ sub versionedKernel {
587594
my ( $kver, ) = @_;
588595

589596
foreach my $prefix (qw(vmlinuz linux vmlinux kernel)) {
590-
my $kernel = join( '/', ( $runConf{bootdir}, join( '-', ( $prefix, $kver ) ) ) );
591-
if ( -f $kernel ) {
592-
return $kernel;
597+
my $pattern = join( '/', ( $runConf{bootdir}, join( '-', ( $prefix, $kver ) ) ) );
598+
599+
# Try an exact match first
600+
if ( -f $pattern ) {
601+
return $pattern, true;
593602
}
603+
604+
# Otherwise, try to glob
605+
my @kernels = sort versioncmp glob($pattern);
606+
607+
next unless @kernels;
608+
return pop @kernels, false;
594609
}
595610

596611
return;

docs/man/generate-zbm.5.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ Kernel
7878

7979
**Version**
8080

81-
A specific kernel version to use. The value *%{current}* will be replaced with the output of ``uname -r``. If not set, **generate-zbm** will try to parse the path of the selected kernel filename for a version.
81+
A specific kernel version to use, or a glob used to match possible kernel versions. The value *%{current}* will be replaced with the output of ``uname -r``. For globs, the highest version matching the glob will be selected. If not set, **generate-zbm** will try to parse the path of the selected kernel filename for a version.
8282

8383
**Prefix**
8484

releng/docker/image-build.sh

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,8 +103,9 @@ EOF
103103
# Install ZFSBootMenu dependencies and components necessary to build images
104104
buildah run "${container}" \
105105
sh -c 'xbps-query -Rp run_depends zfsbootmenu | xargs xbps-install -y'
106-
buildah run "${container}" xbps-install -y \
107-
linux5.10 linux5.10-headers gummiboot-efistub curl yq-go bash kbd terminus-font \
106+
buildah run "${container}" xbps-install -y linux5.10 linux5.10-headers \
107+
linux5.15 linux5.15-headers linux6.1 linux6.1-headers zstd \
108+
gummiboot-efistub curl yq-go bash kbd terminus-font \
108109
dracut mkinitcpio dracut-network gptfdisk iproute2 iputils parted curl \
109110
dosfstools e2fsprogs efibootmgr cryptsetup openssh util-linux kpartx
110111

0 commit comments

Comments
 (0)