summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergio <sergiotarxz@posteo.net>2026-09-06 15:21:50 +0200
committerSergio <sergiotarxz@posteo.net>2026-09-06 15:22:05 +0200
commit609528f64894b21a9c4f6abbeb729eaca32d0558 (patch)
tree1d6675fcef99016c3ca0e18fac6c4c6267d2aed2
parent340835bd29a4292a1c961dec69e9fecb1d296c23 (diff)
Sort kernel versions better
-rw-r--r--lib/AlgaOS/UpdateGrub.pm25
1 files changed, 24 insertions, 1 deletions
diff --git a/lib/AlgaOS/UpdateGrub.pm b/lib/AlgaOS/UpdateGrub.pm
index a7810b2..1cffa4f 100644
--- a/lib/AlgaOS/UpdateGrub.pm
+++ b/lib/AlgaOS/UpdateGrub.pm
@@ -95,7 +95,30 @@ EOF
die "Live booting and root requested at once"
if $self->search_live_cd_rootfs;
die "No AlgaOSRoot in that device" if !$devices{AlgaOSRoot};
- for my $kver ( reverse glob( $self->root_dir . "/boot/kernel-*" ) ) {
+ my $sort_kernel = sub($a, $b) {
+ my ($kernel_version_a) = $a =~ m{/kernel-(\d+(?:\.\d+)*)};
+ my ($kernel_version_b) = $b =~ m{/kernel-(\d+(?:\.\d+)*)};
+
+ my @version_a = split /\./, $kernel_version_a;
+ my @version_b = split /\./, $kernel_version_b;
+
+ my $component_count = @version_a > @version_b
+ ? @version_a
+ : @version_b;
+
+ for my $component_index (0 .. $component_count - 1) {
+ my $comparison =
+ ($version_a[$component_index] // 0)
+ <=>
+ ($version_b[$component_index] // 0);
+
+ return -$comparison if $comparison;
+ }
+
+ return 0;
+
+ }
+ for my $kver ( sort { $sort_kernel->($a, $b) } glob( $self->root_dir . "/boot/kernel-*" ) ) {
die "No kernel found in /boot\n" unless $kver;
$kver =~ s{.*/kernel-}{};