Hello community,

here is the log from the commit of package mkinitrd for openSUSE:Factory
checked in at Wed Jun 22 10:48:16 CEST 2011.



--------
--- mkinitrd/mkinitrd.changes   2011-06-16 15:39:59.000000000 +0200
+++ /mounts/work_src_done/STABLE/mkinitrd/mkinitrd.changes      2011-06-21 
11:14:31.000000000 +0200
@@ -1,0 +2,19 @@
+Tue Jun 21 09:11:06 UTC 2011 - [email protected]
+
+- purge-kernels: Change the variable to multiversion.kernels to
+  match the syntax of other zypp variables.
+
+-------------------------------------------------------------------
+Mon Jun 20 08:58:35 UTC 2011 - [email protected]
+
+- purge-kernels: Change the multiversion_kernels variable to a 
+  comma separated list, update help.
+
+-------------------------------------------------------------------
+Sun Jun 19 13:25:10 UTC 2011 - [email protected]
+
+- Add purge-kernels script to automatically delete old kernel packages
+  on boot, based on configuration in /etc/zypp/zypp.conf, variable
+  multiversion_kernels (fate#312018).
+
+-------------------------------------------------------------------

calling whatdependson for head-i586


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ mkinitrd.spec ++++++
--- /var/tmp/diff_new_pack.zydSZO/_old  2011-06-22 10:48:03.000000000 +0200
+++ /var/tmp/diff_new_pack.zydSZO/_new  2011-06-22 10:48:03.000000000 +0200
@@ -31,7 +31,7 @@
 %endif
 AutoReqProv:    on
 Version:        2.7.0
-Release:        11
+Release:        13
 Conflicts:      udev < 118
 Requires:       dhcpcd
 PreReq:         %fillup_prereq
@@ -112,12 +112,14 @@
 %install_mkinitrd   /usr/bin/perl /sbin/mkinitrd_setup
 EOF
 install -m 755 etc/boot.loadmodules $RPM_BUILD_ROOT/etc/init.d/
+install -m 755 etc/purge-kernels.init $RPM_BUILD_ROOT/etc/init.d/purge-kernels
 install -m 644 etc/sysconfig.kernel-mkinitrd 
$RPM_BUILD_ROOT/var/adm/fillup-templates/
 
 %post
 %{remove_and_set -n kernel SKIP_RUNNING_KERNEL NO_KMS_IN_INITRD}
 %{fillup_only -an kernel}
 %{insserv_force_if_yast /etc/init.d/boot.loadmodules}
+%{fillup_and_insserv -f -Y purge-kernels}
 case "$NO_KMS_IN_INITRD" in
        no)
                sed -i -e "s@^KMS_IN_INITRD=.*@KMS_IN_INITRD=\"yes\"@" 
/etc/sysconfig/kernel ;;
@@ -125,6 +127,9 @@
                sed -i -e "s@^KMS_IN_INITRD=.*@KMS_IN_INITRD=\"no\"@" 
/etc/sysconfig/kernel ;;
 esac
 
+%postun
+%insserv_cleanup
+
 %posttrans
 /sbin/mkinitrd_setup
 
@@ -140,6 +145,7 @@
 %dir /lib/mkinitrd/setup
 %config /etc/rpm/macros.mkinitrd
 /etc/init.d/boot.loadmodules
+/etc/init.d/purge-kernels
 /lib/mkinitrd/scripts/*.sh
 /lib/mkinitrd/bin/*
 /bin/lsinitrd
@@ -147,6 +153,7 @@
 /sbin/mkinitrd_setup
 /sbin/module_upgrade
 /sbin/installkernel
+/sbin/purge-kernels
 /var/adm/fillup-templates/sysconfig.kernel-%name
 %doc %{_mandir}/man5/mkinitrd.5.gz
 %doc %{_mandir}/man8/mkinitrd.8.gz

++++++ mkinitrd.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mkinitrd-2.7.0/etc/purge-kernels.init 
new/mkinitrd-2.7.0/etc/purge-kernels.init
--- old/mkinitrd-2.7.0/etc/purge-kernels.init   1970-01-01 01:00:00.000000000 
+0100
+++ new/mkinitrd-2.7.0/etc/purge-kernels.init   2011-06-21 11:13:33.000000000 
+0200
@@ -0,0 +1,35 @@
+#! /bin/sh
+#
+# Copyright (c) 2011 Novell, Inc.
+#
+### BEGIN INIT INFO
+# Provides:          purge-kernels
+# Required-Start:    $local_fs
+# Required-Stop:     $null
+# Default-Start:     3 5
+# Default-Stop:      $null
+# Short-Description: Purge old kernels
+# Description:       Purge old kernel as configured in /etc/zypp/zypp.conf
+### END INIT INFO
+
+case "$1" in
+start)
+       ;;
+stop|try-restart|restart|force-reload|reload|status)
+       # not applicable
+       exit 0
+       ;;
+*)
+       echo "Usage: $0 start"
+       exit 1
+esac
+if test ! -e /boot/do_purge_kernels; then
+       exit 0
+fi
+
+. /etc/rc.status
+echo "Removing old kernel packages..."
+rm -f /boot/do_purge_kernels
+/sbin/purge-kernels
+rc_status -v
+rc_exit
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mkinitrd-2.7.0/mkinitrd.changes 
new/mkinitrd-2.7.0/mkinitrd.changes
--- old/mkinitrd-2.7.0/mkinitrd.changes 2011-06-16 15:33:46.000000000 +0200
+++ new/mkinitrd-2.7.0/mkinitrd.changes 2011-06-21 11:13:33.000000000 +0200
@@ -1,4 +1,23 @@
 -------------------------------------------------------------------
+Tue Jun 21 09:11:06 UTC 2011 - [email protected]
+
+- purge-kernels: Change the variable to multiversion.kernels to
+  match the syntax of other zypp variables.
+
+-------------------------------------------------------------------
+Mon Jun 20 08:58:35 UTC 2011 - [email protected]
+
+- purge-kernels: Change the multiversion_kernels variable to a 
+  comma separated list, update help.
+
+-------------------------------------------------------------------
+Sun Jun 19 13:25:10 UTC 2011 - [email protected]
+
+- Add purge-kernels script to automatically delete old kernel packages
+  on boot, based on configuration in /etc/zypp/zypp.conf, variable
+  multiversion_kernels (fate#312018).
+
+-------------------------------------------------------------------
 Thu Jun 16 13:31:38 UTC 2011 - [email protected]
 
 - Call udevadm trigger --action=add, because the default is "change"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mkinitrd-2.7.0/mkinitrd.spec 
new/mkinitrd-2.7.0/mkinitrd.spec
--- old/mkinitrd-2.7.0/mkinitrd.spec    2011-06-16 15:33:46.000000000 +0200
+++ new/mkinitrd-2.7.0/mkinitrd.spec    2011-06-21 11:13:33.000000000 +0200
@@ -112,12 +112,14 @@
 %install_mkinitrd   /usr/bin/perl /sbin/mkinitrd_setup
 EOF
 install -m 755 etc/boot.loadmodules $RPM_BUILD_ROOT/etc/init.d/
+install -m 755 etc/purge-kernels.init $RPM_BUILD_ROOT/etc/init.d/purge-kernels
 install -m 644 etc/sysconfig.kernel-mkinitrd 
$RPM_BUILD_ROOT/var/adm/fillup-templates/
 
 %post
 %{remove_and_set -n kernel SKIP_RUNNING_KERNEL NO_KMS_IN_INITRD}
 %{fillup_only -an kernel}
 %{insserv_force_if_yast /etc/init.d/boot.loadmodules}
+%{fillup_and_insserv -f -Y purge-kernels}
 case "$NO_KMS_IN_INITRD" in
        no)
                sed -i -e "s@^KMS_IN_INITRD=.*@KMS_IN_INITRD=\"yes\"@" 
/etc/sysconfig/kernel ;;
@@ -125,6 +127,9 @@
                sed -i -e "s@^KMS_IN_INITRD=.*@KMS_IN_INITRD=\"no\"@" 
/etc/sysconfig/kernel ;;
 esac
 
+%postun
+%insserv_cleanup
+
 %posttrans
 /sbin/mkinitrd_setup
 
@@ -140,6 +145,7 @@
 %dir /lib/mkinitrd/setup
 %config /etc/rpm/macros.mkinitrd
 /etc/init.d/boot.loadmodules
+/etc/init.d/purge-kernels
 /lib/mkinitrd/scripts/*.sh
 /lib/mkinitrd/bin/*
 /bin/lsinitrd
@@ -147,6 +153,7 @@
 /sbin/mkinitrd_setup
 /sbin/module_upgrade
 /sbin/installkernel
+/sbin/purge-kernels
 /var/adm/fillup-templates/sysconfig.kernel-%name
 %doc %{_mandir}/man5/mkinitrd.5.gz
 %doc %{_mandir}/man8/mkinitrd.8.gz
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mkinitrd-2.7.0/sbin/Makefile 
new/mkinitrd-2.7.0/sbin/Makefile
--- old/mkinitrd-2.7.0/sbin/Makefile    2011-06-16 15:33:46.000000000 +0200
+++ new/mkinitrd-2.7.0/sbin/Makefile    2011-06-21 11:13:33.000000000 +0200
@@ -5,7 +5,7 @@
 sbindir = /sbin
 bindir = /bin
 
-PRGS = mkinitrd installkernel module_upgrade mkinitrd_setup
+PRGS = mkinitrd installkernel module_upgrade mkinitrd_setup purge-kernels
 UPRGS = lsinitrd
 all: install
 install: install_prgs install_uprgs
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mkinitrd-2.7.0/sbin/purge-kernels 
new/mkinitrd-2.7.0/sbin/purge-kernels
--- old/mkinitrd-2.7.0/sbin/purge-kernels       1970-01-01 01:00:00.000000000 
+0100
+++ new/mkinitrd-2.7.0/sbin/purge-kernels       2011-06-21 11:13:33.000000000 
+0200
@@ -0,0 +1,269 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+sub usage {
+       print "Usage: $0 [--test]\n";
+       print "Reads list of kernels to keep from 
/etc/zypp/zypp.conf:multiversion.kernels\n";
+       print "kernels can be given as <version>, latest(-N), running, 
oldest(+N).\n";
+}
+
+# arch/flavor => version-release => [ subpackages ]
+my %kernels;
+my %kmps;
+
+my @keep_spec;
+my ($want_running, $running_version, $running_flavor);
+
+# do not actually delete anything
+my $test_only;
+
+sub load_config {
+       my $file = "/etc/zypp/zypp.conf";
+       my @kernels;
+
+       if (!-e $file) {
+               print STDERR "$0: /etc/zypp/zypp.conf does not exist, 
exiting.\n";
+               exit 0;
+       }
+       open(my $fh, '<', $file) or die "$0: $file: $!\n";
+       while (<$fh>) {
+               chomp;
+               next unless /^\s*multiversion\.kernels\b/;
+               s/^[^=]*=\s*//;
+               @kernels = split(/,\s*/);
+               last;
+       }
+       close($fh);
+       for my $kernel (@kernels) {
+               if ($kernel =~ 
/^\s*(latest|oldest|running)(\s*[-+]\s*\d+)?\s*$/) {
+                       my $new = { whence => $1, offset => $2 || 0 };
+                       $new->{offset} =~ s/\s*//g;
+                       if ($new->{whence} eq "running") {
+                               $want_running = 1;
+                       }
+                       push (@keep_spec, $new);
+               } elsif ($kernel =~ /^\d+\.\d+/) {
+                       my $new = { version => $kernel };
+                       push (@keep_spec, $new);
+               } elsif ($kernel =~ /^\s*$/) {
+                       next;
+               } else {
+                       print STDERR "$0: Ignoring unknow kernel specification 
in\n";
+                       print STDERR "/etc/zypp/zypp.conf:multiversion.kernels: 
$kernel\n";
+               }
+       }
+}
+
+sub add_package {
+       my ($name, $vr, $arch) = @_;
+       my ($flavor, $table);
+
+       #print STDERR "add_package: $name $vr $arch\n";
+       if ($name eq "kernel-firmware" || $name eq "kernel-coverage") {
+               return;
+       }
+       if ($name =~ /^kernel-/) {
+               ($flavor = $name) =~ s/^kernel-//;
+               $table = \%kernels;
+       } elsif ($name =~ /-kmp-/) {
+               ($flavor = $name) =~ s/.*-kmp-//;
+               $table = \%kmps;
+       }
+       $flavor =~ s/-.*//; # XXX: No dashes in flavor names
+       if ($flavor eq "devel") {
+               # kernel-devel is a subpackage of kernel-source
+               $flavor = "source";
+       }
+       $table->{"$arch/$flavor"} ||= {};
+       $table->{"$arch/$flavor"}{$vr} ||= [];
+       push(@{$table->{"$arch/$flavor"}{$vr}}, "$name-$vr.$arch");
+}
+
+sub load_packages {
+       open(my $pipe, '-|', 'rpm', '-qa', '--qf', '%{n} %{v}-%{r} %{arch}\n',
+               'kernel-*', '*-kmp-*') or die "rpm: $!\n";
+       while (<$pipe>) {
+               chomp;
+               my ($name, $vr, $arch) = split;
+               add_package($name, $vr, $arch);
+       }
+}
+
+sub sort_versions {
+       my @versions = @_;
+
+       pipe (my $read, my $write);
+       my $pid = fork();
+       if (!defined($pid)) {
+               die "Cannot fork: $!\n";
+       } elsif ($pid == 0) {
+               # child
+               close($read);
+               open STDOUT, '>&', $write;
+               open(my $fh, '|-', "/usr/lib/rpm/rpmsort") or die 
"/usr/lib/rpm/rpmsort: $!\n";
+               print $fh join("\n", @versions), "\n";
+               close($fh);
+               die "rpmsort failed ($?)\n" if $? != 0;
+
+               exit 0;
+       }
+       # parent
+       close($write);
+       @versions = <$read>;
+       chomp @versions;
+       close($read);
+       waitpid($pid, 0);
+       die "rpmsort failed ($?)\n" if $? != 0;
+
+       return @versions;
+}
+
+# return true if VER1 is a prefix of VER2 (to handle the .x rebuild counter)
+sub version_match {
+       my ($ver1, $ver2) = @_;
+
+       return ($ver1 eq substr($ver2, 0, length($ver1)));
+}
+
+sub list_old_packages {
+       my ($flavor) = @_;
+
+       # ignore kernel-source for now
+       return if $flavor =~ /\/source$/;
+
+       my $kernels = $kernels{$flavor};
+       my @versions = sort_versions(keys(%$kernels));
+       my %idx = (
+               oldest => 0,
+               latest => scalar(@versions) - 1,
+       );
+       if ($want_running && $running_flavor eq $flavor) {
+               for (my $i = scalar(@versions) - 1; $i >= 0; $i--) {
+                       if (version_match($running_version, $versions[$i])) {
+                               $idx{running} = $i;
+                               last;
+                       }
+               }
+               if (!exists($idx{running})) {
+                       print STDERR "$0: Running kernel 
$running_version-$running_flavor not installed.\n";
+                       print "NOT removing any packages for flavor $flavor.\n";
+                       return;
+               }
+       }
+       my %delete = map { $_ => 1 } @versions;
+       for my $keep (@keep_spec) {
+               if ($keep->{version}) {
+                       for my $ver (@versions) {
+                               if (version_match($keep->{version}, $ver)) {
+                                       $delete{$ver} = 0;
+                               }
+                       }
+               } elsif ($keep->{whence}) {
+                       next unless exists($idx{$keep->{whence}});
+                       my $idx = $idx{$keep->{whence}};
+                       $idx += $keep->{offset};
+                       next unless $idx >= 0 && $idx < scalar(@versions);
+                       $delete{$versions[$idx]} = 0;
+               } else {
+                       die "??";
+               }
+       }
+       my @packages;
+       for my $ver (grep { $delete{$_} } @versions) {
+               push(@packages, @{$kernels->{$ver}});
+       }
+       return @packages;
+}
+
+sub remove_packages {
+       my @packages = @_;
+
+       while (1) {
+               pipe(my $read, my $write);
+               my $pid = fork();
+               if (!defined($pid)) {
+                       die "Cannot fork: $!\n";
+               } elsif($pid == 0) {
+                       # child
+                       close($read);
+                       open STDOUT, '>&', $write;
+                       open STDERR, '>&', $write;
+                       $ENV{LC_ALL} = "C";
+                       my @cmd = qw(rpm -e);
+                       push(@cmd, "--test") if $test_only;
+                       exec(@cmd, @packages) or die "rpm: $!\n";
+               }
+               # parent
+               close($write);
+               my @out = <$read>;
+               chomp @out;
+               close($read);
+               waitpid($pid, 0);
+               if ($? == 0) {
+                       print "Removed:\n    ", join("\n    ", @packages), "\n";
+                       return 1;
+               }
+               my ($retry, @problems);
+               my %old_packages = map { $_ => 1 } @packages;
+               my %new_packages;
+               for (@out) {
+                       if (/ is needed by \(installed\) (.*-kmp-.*)/ &&
+                                       !$old_packages{$1}) {
+                               push(@packages, $1) unless $new_packages{$1};
+                               $new_packages{$1} = 1;
+                               $retry = 1;
+                       } else {
+                               push(@problems, $_);
+                       }
+               }
+               if (!$retry) {
+                       print STDERR join("\n", @problems), "\n";
+                       print STDERR "$0: giving up.\n";
+                       return 0;
+               }
+       }
+}
+
+for my $arg (@ARGV) {
+       if ($arg eq "-h" || $arg eq "--help") {
+               usage();
+               exit;
+       } elsif ($arg eq "--test") {
+               $test_only = 1;
+       } elsif ($arg =~ /^-/) {
+               print STDERR "Unknown option: $arg\n";
+               usage();
+               exit 1;
+       }
+}
+load_config();
+if (!@keep_spec) {
+       print STDERR "$0: multiversion.kernels not configured in 
/etc/zypp/zypp.conf, exiting.\n";
+       exit 0;
+}
+
+load_packages();
+if ($want_running) {
+       $running_version = `uname -r`;
+       chomp($running_version);
+       ($running_flavor = $running_version) =~ s/.*-//;
+       $running_version =~ s/-[^-]*$//;
+       my $arch = `uname -m`;
+       chomp($arch);
+       $arch =~ s/^i.86$/i586/;
+       $running_flavor = "$arch/$running_flavor";
+}
+my @remove;
+for my $flavor (sort(keys(%kernels))) {
+       push(@remove, list_old_packages($flavor));
+}
+if (!@remove) {
+       print STDERR "$0: Nothing to do.\n";
+       exit 0;
+}
+if (remove_packages(@remove)) {
+       exit 0;
+}
+exit 1;


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++



Remember to have fun...

-- 
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to