summaryrefslogtreecommitdiffstats
path: root/kernel/update_kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/update_kernel')
-rwxr-xr-xkernel/update_kernel70
1 files changed, 42 insertions, 28 deletions
diff --git a/kernel/update_kernel b/kernel/update_kernel
index adef926d9..a32878339 100755
--- a/kernel/update_kernel
+++ b/kernel/update_kernel
@@ -1,9 +1,20 @@
#!/usr/bin/perl
+# this script takes kernels rpms from RPMS/ and create various files in all_kernels/
+# for each rpms in RPMS, it does:
+# RPMS/kernel-VER-*.rpm ->
+# all.kernels/VER/all_modules.tar (used for all.rdz)
+# all.kernels/VER/*.mar (used for other rdz)
+# all.kernels/VER/modules.cz (used for stage2)
+# all.kernels/VER/modules.dep
+# all.kernels/VER/vmlinuz
+#
+# if RPMS is empty, this script tries to find kernels in $main_repository
+
use MDK::Common;
use list_modules;
-my $RPMS = '/export/media/main';
+my $main_repository = '/export/media/main';
my $rpm = 'rpm --nosignature';
@@ -11,22 +22,21 @@ my $MOVE = $ARGV[0] eq '--move' && shift;
@ARGV <= 1 or die "usage: ./update_kernel [--move] [<kernel rpm>]\n";
+eval { rm_rf('all.kernels') }; #- remove old things
+mkdir 'all.kernels';
-mkdir 'all.kernels'; # make sure "all.kernels" directory exists
-eval { rm_rf('all.modules') }; #- not used anymore
-
-my $main = chomp_(cat_('all.kernels/.main'));
-my $main_BOOT = chomp_(cat_('all.kernels/.main-BOOT'));
+my $main = chomp_(cat_('RPMS/.main'));
+my $main_BOOT = chomp_(cat_('RPMS/.main-BOOT'));
if (@ARGV) {
install_kernel($ARGV[0]);
-} else {
- update_kernel_from_repository($RPMS, '2.6', 0);
- update_kernel_from_repository($RPMS, '2.6', 1);
-# update_kernel_from_repository($RPMS, '2.4', 1);
- install_kernel(glob("$RPMS/kernel-xbox*"), 1) if arch() =~ /i.86/;
+} elsif (! -d 'RPMS') {
+ update_kernel_from_repository($main_repository, '2.6', 0);
+ update_kernel_from_repository($main_repository, '2.6', 1);
+ install_kernel(glob("$main_repository/kernel-xbox*"), 1) if arch() =~ /i.86/;
}
+extract_kernel($_) foreach glob("RPMS/*.rpm");
sub system_verbose { print join(' ', @_), "\n"; system(@_) }
sub sys { &system_verbose; $? and die }
@@ -37,33 +47,37 @@ sub rpm2version {
}
sub update_kernel_from_repository {
- my ($RPMS, $main_ver, $is_BOOT) = @_;
+ my ($repository, $main_ver, $is_BOOT) = @_;
my $rpm_wildcard = 'kernel-' . ($is_BOOT ? 'BOOT-' : (arch() =~ /i.86/ ? 'i586-up-1GB-' : '')) . $main_ver . '*.rpm';
- my @kernels = glob("$RPMS/$rpm_wildcard");
+ my @kernels = glob("$repository/$rpm_wildcard");
install_kernel($_, 1) foreach @kernels;
}
sub install_kernel {
- my ($kernel_rpm, $o_update) = @_;
+ my ($kernel_rpm) = @_;
+ my $basename = basename($kernel_rpm);
+ warn "Installing rpm $basename in RPMS\n";
+ mkdir 'RPMS';
+ cp_af($kernel_rpm, "RPMS/$basename");
+
+ if (!$main) {
+ $main = rpm2version($kernel_rpm);
+ output('RPMS/.main', "$main\n");
+ }
+ if (!$main_BOOT && $kernel_rpm =~ /BOOT/) {
+ $main_BOOT = rpm2version($kernel_rpm);
+ output('RPMS/.main-BOOT', "$main_BOOT\n");
+ }
+}
+
+sub extract_kernel {
+ my ($kernel_rpm) = @_;
my $kern_ver = rpm2version($kernel_rpm);
my $dir = "all.kernels/$kern_ver";
- -d $dir and return if $o_update;
-
- my $is_BOOT = $kern_ver =~ /BOOT/;
-
- if (!$main || !-d "all.kernels/$main") {
- $main = $kern_ver;
- output('all.kernels/.main', "$main\n");
- }
- if ($is_BOOT && (!$main_BOOT || !-d "all.kernels/$main_BOOT")) {
- $main_BOOT = $kern_ver;
- output('all.kernels/.main-BOOT', "$main_BOOT\n");
- }
-
- warn "Installing kernel $kern_ver\n";
+ warn "Extracting kernel $kern_ver\n";
eval { rm_rf($dir) };
mkdir_p("$dir/modules");