summaryrefslogtreecommitdiffstats
path: root/images/update_kernel
blob: e003f457b26caa6cb94b80a7c874e641ae02fc61 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#!/usr/bin/perl

# this script takes command kernel rpms (either installed rpms or rpm files)
# and create various files in all_kernels/:
#     all.kernels/VER/all_modules.tar  (used for all.rdz)
#     all.kernels/VER/modules.dep
#     all.kernels/VER/modules.alias
#     all.kernels/VER/vmlinuz

use lib '../kernel';
use MDK::Common;
use list_modules;

my $rpm = 'rpm --nosignature';


@ARGV or die "usage: ./update_kernel <installed kernel name> ...\n";

eval { rm_rf('all.kernels') }; #- remove old things
mkdir 'all.kernels';

my @kernels = map {
    my $kern_ver = rpm2version($_);
	extract_installed_rpm('', $kern_ver);
    $kern_ver;
} @ARGV;

output('all.kernels/.list', map { "$_\n" } @kernels);

sub system_verbose { print join(' ', @_), "\n"; system(@_) }
sub sys { &system_verbose; $? and die }

sub rpm2version {
    my ($kernel_rpm) = @_;
    my $opt = -e $kernel_rpm ? '-qpl' : '-ql';
    `$rpm $opt $kernel_rpm` =~ m!/boot/vmlinuz-(.*)! && $1 or die "can't find vmlinuz in $kernel_rpm (is it installed?)\n";
}

sub extract_installed_rpm {
    my ($installed_dir, $kern_ver) = @_;
    my $local_dir = "all.kernels/$kern_ver";
    mkdir_p($local_dir);

    sys('cp', "$installed_dir/boot/vmlinuz-$kern_ver", "$local_dir/vmlinuz");
}