diff --git a/debian/bin/gencontrol.py b/debian/bin/gencontrol.py index 16c6c4208..a0cdfec1e 100755 --- a/debian/bin/gencontrol.py +++ b/debian/bin/gencontrol.py @@ -129,6 +129,9 @@ class Gencontrol(Base): if config_entry_image.get('initramfs', True): generators = config_entry_image['initramfs-generators'] + config_entry_commands_initramfs = self.config.merge('commands-image-initramfs-generators', arch, featureset, flavour) + commands = [config_entry_commands_initramfs[i] for i in generators if config_entry_commands_initramfs.has_key(i)] + makeflags['INITRD_CMD'] = ' '.join(commands) l = PackageRelationGroup() for i in generators: i = config_entry_relations.get(i, i) diff --git a/debian/changelog b/debian/changelog index c1da645ad..f191f7873 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,10 +1,5 @@ linux-2.6 (2.6.38~rc7-1~experimental.1) experimental; urgency=low - [ Ben Hutchings ] - * postinst: Remove specific support for running a ramdisk creator; - warn users that specify one in /etc/kernel-img.conf - * Require initramfs-tools >= 0.94, which installs a postinst hook - [ maximilian attems ] * New upstream release candidate * x86: Set DRM_I915_KMS on request by xorg team. diff --git a/debian/config/defines b/debian/config/defines index 7d9c8089d..b739b9df7 100644 --- a/debian/config/defines +++ b/debian/config/defines @@ -41,13 +41,16 @@ part-long-xen: This kernel also runs on a Xen hypervisor. initramfs-generators: initramfs-tools initramfs-fallback type: plain +[commands-image-initramfs-generators] +initramfs-tools: update-initramfs + [relations] # compilers gcc-4.4: gcc-4.4 # initramfs-generators initramfs-fallback: linux-initramfs-tool -initramfs-tools: initramfs-tools (>= 0.94) +initramfs-tools: initramfs-tools (>= 0.55) # bootloaders elilo: elilo (>= 3.12-3.1~) diff --git a/debian/rules.real b/debian/rules.real index 3a418e9cd..cb33113ce 100644 --- a/debian/rules.real +++ b/debian/rules.real @@ -414,6 +414,7 @@ install-image_$(ARCH)_$(FEATURESET)_$(FLAVOUR)_plain_templates: -e 's@=B@$(KERNEL_ARCH)@g' \ -e 's/=I/$(ARG_INITRD)/g' \ -e 's/=K/$(ARG_KIMAGE)/g' \ + -e 's@=MK@$(INITRD_CMD)@g' \ -e 's/=V/$(REAL_VERSION)/g' \ $$i > debian/$(PACKAGE_NAME).$$(basename $$i) || exit; \ done diff --git a/debian/templates/temp.image.plain/postinst b/debian/templates/temp.image.plain/postinst index 07ab01904..d93e0d636 100755 --- a/debian/templates/temp.image.plain/postinst +++ b/debian/templates/temp.image.plain/postinst @@ -26,7 +26,7 @@ my $relink_src_link = 'YES'; # There is no harm in checking the link my $relink_build_link = 'YES'; # There is no harm in checking the link my $force_build_link = ''; # There is no harm in checking the link my $kernel_arch = "=B"; -my $ramdisk = ''; +my $ramdisk = "=MK"; # List of tools to create initial ram fs. my $package_name = "linux-image-$version"; my $explicit_do_loader = ''; @@ -704,32 +704,60 @@ if (-d "$modules_base/$version") { } -# Warn if we are ignoring the old ramdisk setting -if ($ramdisk =~ /\S/) { - my ($question, $ret, $seen); - $question = "${package_name}/postinst/ignoring-ramdisk"; - ($ret,$seen) = input('high', "$question"); - die "Error setting debconf question $question: $seen" if $ret && $ret != 30; - ($ret,$seen) = go(); - die "Error asking debconf question $question: $seen" if $ret && $ret != 30; +sub find_initramfs_tool { + my $ramdisk = shift; + my (@tools, $initramfs_cmd); + + foreach $initramfs_cmd (split(/[:,\s]+/, $ramdisk)) { + if (system("test -x \"\$(command -v $initramfs_cmd)\"") == 0) { + push(@tools, $initramfs_cmd); + } + } + return @tools; +} + + +if ($initrd) { +my @ramdisklist; +@ramdisklist = find_initramfs_tool($ramdisk) if $ramdisk; +die "Failed to find suitable initramfs generation tool in $ramdisk\n" + if $#ramdisklist < 0; +my $success = 0; +for my $ramdisk_cmd (@ramdisklist) { + print STDERR "Running $ramdisk_cmd.\n"; + print STDERR "Other valid candidates: @ramdisklist\n" if $#ramdisklist > 0; + + my $initrd_path = $realimageloc . "initrd.img-$version"; + my $ret = system("$ramdisk_cmd " . + ($mkimage ? "-m '$mkimage' " : "") . + "-c -t -k $version >&2"); + if ($ret) { + warn "$ramdisk_cmd failed to create initrd image.\n"; + } else { + $success = 1; + last; + } +} +die "Failed to create initrd image.\n" unless $success; +if (! defined $ARGV[1] || ! $ARGV[1] || $ARGV[1] =~ m//o) { + image_magic("initrd.img", $image_dest); +} else { + if (! -e "initrd.img") { + handle_missing_link("initrd.img", $image_dest, "initrd.img-$version", + $realimageloc); + } +} } # Only change the symlinks if we are not being upgraded if (! defined $ARGV[1] || ! $ARGV[1] || $ARGV[1] =~ m//o) { image_magic($kimage, $image_dest); - if ($initrd) { - image_magic("initrd.img", $image_dest); - } } else { if (! -e "$kimage") { handle_missing_link($kimage, $image_dest, "$kimage-$version", $realimageloc); } - if ($initrd && ! -e "initrd.img") { - handle_missing_link("initrd.img", $image_dest, "initrd.img-$version", - $realimageloc); - } } # set the env var stem @@ -793,10 +821,6 @@ if ($explicit_do_loader) { die "Error asking debconf question $question: $seen" if $ret && $ret != 30; } -if ($initrd && ! -e "initrd.img-$version") { - die "Failed to create initrd image.\n"; -} - exit 0; __END__ diff --git a/debian/templates/temp.image.plain/templates b/debian/templates/temp.image.plain/templates index cd90b3a88..7ae19dfe6 100644 --- a/debian/templates/temp.image.plain/templates +++ b/debian/templates/temp.image.plain/templates @@ -1,4 +1,4 @@ -# These templates have mostly been reviewed by the debian-l10n-english +# These templates have been reviewed by the debian-l10n-english # team # # If modifications/additions/rewording are needed, please ask @@ -61,19 +61,6 @@ _Description: Boot loader configuration must be updated . If the boot loader needs to be updated whenever a new kernel is installed, the boot loader package should install a script in - /etc/kernel/postinst.d. - . - If the boot loader package does not yet do this, see - . - -# This has not yet been reviewed -Template: linux-image-=V/postinst/ignoring-ramdisk -Type: error -_Description: Ramdisk configuration must be updated - Kernel packages will no longer run a specific ramdisk creator. The - ramdisk creator package should install a script in - /etc/kernel/postinst.d, and you should remove the line beginning - 'ramdisk =' from /etc/kernel-img.conf. - . - If the ramdisk creator package does not yet do this, see - . + /etc/kernel/postinst.d. Alternately, you can specify the command + to update the boot loader by setting the 'postinst_hook' variable + in /etc/kernel-img.conf.