DebianThis forum is for the discussion of Debian Linux.
Notices
Welcome to LinuxQuestions.org, a friendly and active Linux Community.
You are currently viewing LQ as a guest. By joining our community you will have the ability to post topics, receive our newsletter, use the advanced search, subscribe to threads and access many other special features. Registration is quick, simple and absolutely free. Join our community today!
Note that registered members see fewer ads, and ContentLink is completely disabled once you log in.
If you have any problems with the registration process or your account login, please contact us. If you need to reset your password, click here.
Having a problem logging in? Please visit this page to clear all LQ-related cookies.
Get a virtual cloud desktop with the Linux distro that you want in less than five minutes with Shells! With over 10 pre-installed distros to choose from, the worry-free installation life is here! Whether you are a digital nomad or just looking for flexibility, Shells can put your Linux machine on the device that you want to use.
Exclusive for LQ members, get up to 45% off per month. Click here for more info.
#! /usr/bin/perl
#
use strict;
use warnings;
use Cwd 'abs_path';
use Debconf::Client::ConfModule qw(:all);
use POSIX ();
version('2.0');
my $capb = capb('backup', 'escape');
$|=1;
# Predefined values:
my $version = "3.2.0-4-686-pae";
my $link_in_boot = "";
my $no_symlink = "";
my $do_symlink = "Yes"; # target machine defined
my $kimage = "vmlinuz";
my $initrd = "YES"; # initrd kernel
my $mkimage = ""; # command to generate the initrd image
my $use_hard_links = ''; # hardlinks do not work across fs boundaries
my $postinst_hook = ''; #Normally we do not
my $minimal_swap = ''; # Do not swap symlinks
my $ignore_depmod_err = ''; # normally we do not
my $kernel_arch = "x86";
my $ramdisk = '';
my $package_name = "linux-image-$version";
#known variables
my $image_dest = "/";
my $realimageloc = "/boot/";
my $have_conffile = "";
my $modules_base = '/lib/modules';
my $CONF_LOC = '/etc/kernel-img.conf';
# Ignore all invocations except when called on to configure.
exit 0 unless $ARGV[0] =~ /configure/;
my $DEBUG = 0;
# Do some preliminary sanity checks here to ensure we actually have an
# valid image dir
chdir('/') or die "could not chdir to /:$!\n";
die "Internal Error: ($realimageloc) is not a directory!\n"
unless -d $realimageloc;
if (-r "$CONF_LOC" && -f "$CONF_LOC" ) {
if (open(CONF, "$CONF_LOC")) {
while (<CONF>) {
chomp;
s/\#.*$//g;
next if /^\s*$/;
$do_symlink = "" if /do_symlinks\s*=\s*(no|false|0)\s*$/i;
$no_symlink = "" if /no_symlinks\s*=\s*(no|false|0)\s*$/i;
$link_in_boot = "" if /link_in_boot\s*=\s*(no|false|0)\s*$/i;
$use_hard_links = '' if /use_hard_links\s*=\s*(no|false|0)\s*$/i;
$minimal_swap = '' if /minimal_swap\s*=\s*(no|false|0)\s*$/i;
$ignore_depmod_err = '' if /ignore_depmod_err\s*=\s*(no|false|0)\s*$/i;
$do_symlink = "Yes" if /do_symlinks\s*=\s*(yes|true|1)\s*$/i;
$no_symlink = "Yes" if /no_symlinks\s*=\s*(yes|true|1)\s*$/i;
$link_in_boot = "Yes" if /link_in_boot\s*=\s*(yes|true|1)\s*$/i;
$use_hard_links = "Yes" if /use_hard_links\s*=\s*(yes|true|1)\s*$/i;
$minimal_swap = 'Yes' if /minimal_swap\s*=\s*(yes|true|1)\s*$/i;
$ignore_depmod_err = 'Yes' if /ignore_depmod_err\s*=\s*(yes|true|1)\s*$/i;
$image_dest = "$1" if /image_dest\s*=\s*(\S+)/i;
$postinst_hook = "$1" if /postinst_hook\s*=\s*(\S+)/i;
$mkimage = "$1" if /mkimage\s*=\s*(.+)$/i;
$ramdisk = "$1" if /ramdisk\s*=\s*(.+)$/i;
}
close CONF;
$have_conffile = "Yes";
}
}
if ($link_in_boot) {
$image_dest = $realimageloc;
}
# Tack on at least one trainling /
$image_dest = "$image_dest/";
$image_dest =~ s|^/*|/|o;
$image_dest =~ s|/+$|/|o;
if (! -d "$image_dest") {
die "Expected Image Destination dir ($image_dest) to be a valid directory!\n";
}
# sanity
if ($do_symlink && $no_symlink) {
warn "Both do_symlinks and no_symlinks options enabled; disabling no_symlinks\n";
$no_symlink = 0;
}
# most of our work is done in $image_dest (nominally /)
chdir("$image_dest") or die "could not chdir to $image_dest:$!\n";
$ENV{KERNEL_ARCH}=$kernel_arch if $kernel_arch;
die "Internal Error: Could not find image (" . $realimageloc
. "$kimage-$version)\n" unless -e $realimageloc
. "$kimage-$version";
######################################################################
######################################################################
########### Test whether a relative symlinkwould be OK #######
######################################################################
######################################################################
sub test_relative {
my %params = @_;
my $cwd;
die "Internal Error: Missing Required paramater 'Old Dir' "
unless $params{'Old Dir'};
die "Internal Error: Missing Required paramater New Dir' "
unless $params{'New Dir'};
die "Internal Error: No such dir $params{'Old Dir'} "
unless -d $params{'Old Dir'};
die "Internal Error: No such dir $params{'New Dir'} "
unless -d $params{'New Dir'};
warn "Test relative: testing $params{'Old Dir'} -> $params{'New Dir'}"
if $DEBUG;
chomp($cwd = `pwd`);
chdir ($params{'New Dir'}) or die "Could not chdir to $params{'New Dir'}:$!";
my $ok = 0;
$params{'Old Dir'} =~ s|^/*||o;
if (-d $params{'Old Dir'} ) {
if (defined $params{'Test File'}) {
if (-e $params{'Old Dir'} . $params{'Test File'}) {
$ok = 1;
}
} else {
$ok = 1; # well, backward compatibility
}
}
chdir ($cwd) or die "Could not chdir to $params{'New Dir'}:$!";
return $ok;
}
sub spath {
my %params = @_;
die "Missing Required paramater 'Old'" unless $params{'Old'};
die "Missing Required paramater 'New'" unless $params{'New'};
my @olddir = split '/', `readlink -q -m $params{'Old'}`;
my @newdir = split '/', `readlink -q -m $params{'New'}`;
my @outdir = @olddir;
my $out = '';
my $i;
for ($i = 0; $i <= $#olddir && $i <= $#newdir; $i++) {
$out++ if ($olddir[$i] ne $newdir[$i]);
shift @outdir unless $out;
unshift @outdir, ".." if $out;
}
if ($#newdir > $#olddir) {
for ($i=0; $i < $#newdir; $i++) {
unshift @outdir, "..";
}
}
return join ('/', @outdir);
}
# This routine is invoked if there is a symbolic link in place
# in $image_dest/$kimage -- so a symlink exists in the destination.
# What we are trying to determine is if we need to move the symbolic link over
# to the the .old location
sub move_p {
my $kimage = $_[0]; # Name of the symbolic link
my $image_dest = $_[1]; # The directory the links goes into
my $image_name = $_[2];
my $src_dir = $_[3];
my $force_move = 0;
warn "Move?: kimage=$kimage, image_dest=$image_dest, \n" .
"\timage_name=$image_name, src_dir=$src_dir" if $DEBUG;
if ($no_symlink) {
# we do not want links, yet we have a symbolic link here!
warn "found a symbolic link in " . $image_dest . "$kimage \n" .
"even though no_symlink is defined\n" if $no_symlink;
# make sure we change this state of affairs
$force_move = 1;
return $force_move;
}
warn "DEBUG: OK. We found symlink, and we should have a symlink here.\n"
if $DEBUG;
my $vmlinuz_target = readlink "$kimage";
my $real_target = '';
my $target = `readlink -q -m "${realimageloc}${kimage}-$version"`;
$real_target = abs_path($vmlinuz_target) if defined($vmlinuz_target);
if (!defined($vmlinuz_target) || ! -f "$real_target") {
# what, a dangling symlink?
warn "The link " . $image_dest . "$kimage is a dangling link" .
"to $real_target\n";
$force_move = 1;
return $force_move;
}
warn "DEBUG: The link $kimage points to ($vmlinuz_target)\n" if $DEBUG;
warn "DEBUG: ($vmlinuz_target) is really ($real_target)\n" if $DEBUG;
my $cwd;
chomp ($cwd=`pwd`);
if ($vmlinuz_target !~ m|^/|o) {
$vmlinuz_target = $cwd . "/" . $vmlinuz_target;
$vmlinuz_target =~ s|/+|/|o;
}
$vmlinuz_target = `readlink -q -m $vmlinuz_target`;
if ("$vmlinuz_target" ne "$target") {
warn "DEBUG: We need to handle this.\n" if $DEBUG;
if ($minimal_swap) {
warn "DEBUG: Minimal swap.\n" if $DEBUG;
if (-l "$kimage.old") {
warn "DEBUG: There is an old link at $kimage.old\n" if $DEBUG;
my $old_target = readlink "$kimage.old";
my $real_old_target = '';
$real_old_target=abs_path($old_target) if defined ($old_target);
if ($real_old_target && -f "$real_old_target") {
if ($old_target !~ m|^/|o) {
$old_target = $cwd . "/" . $old_target;
$old_target =~ s|/+|/|o;
}
$old_target = `readlink -q -m $old_target`;
if ("$old_target" ne "$target") {
$force_move = 1;
warn "DEBUG: Old link ($old_target) does not point to us ($target)\n"
if $DEBUG;
}
else { # The .old points to the current
warn "$kimage.old --> $target -- doing nothing";
$force_move = 0;
}
}
else {
warn "DEBUG: Well, the old link does not exist -- so we move\n"
if $DEBUG;
$force_move = 1;
}
}
else {
warn "DEBUG: No .old link -- OK to move\n"
if $DEBUG;
$force_move = 1;
}
}
else {
warn "DEBUG: ok, minimal swap is no-- so we move.\n"
if $DEBUG;
$force_move = 1;
}
}
else { # already have proper link
warn "$kimage($vmlinuz_target) points to $target ($real_target) -- doing nothing";
$force_move = 0;
}
return $force_move;
}
# This routine moves the symbolic link around (/vmlinuz -> /vmlinuz.old)
# It pays attention to whether we should the fact whether we should be using
# hard links or not.
sub really_move_link {
my $kimage = $_[0]; # Name of the symbolic link
my $image_dest = $_[1]; # The directory the links goes into
my $image_name = $_[2];
my $src_dir = $_[3];
warn "really_move_link: kimage=$kimage, image_dest=$image_dest\n" .
"\t image_name=$image_name, src_dir=$src_dir" if $DEBUG;
# don't clobber $kimage.old quite yet
rename("$kimage", "$kimage.$$") ||
die "failed to move " . $image_dest . "$kimage:$!";
my $Old = $src_dir;
my $cwd;
chomp($cwd=`pwd`);
if (test_relative ('Old Dir' => $Old, 'New Dir' => $cwd,
'Test File' => "$image_name")) {
$Old =~ s|^/*||o;
}
# Special case is they are in the same dir
my $rel_path = spath('Old' => "$Old", 'New' => "$cwd" );
$Old ="" if $rel_path =~ m/^\s*$/o;
if ($use_hard_links =~ m/YES/i) {
if (! link("${Old}${image_name}", "$kimage")) {
rename("$kimage.$$", "$kimage");
die("Failed to link ${Old}${image_name} to " .
"${image_dest}${kimage}.\n");
}
}
else {
if (! symlink("${Old}${image_name}", "$kimage")) {
rename("$kimage.$$", "$kimage");
die("Failed to symbolic-link ${Old}${image_name} to " .
"${image_dest}${kimage}.\n");
}
}
# Ok, now we may clobber the previous .old file
if (-l "$kimage.old" || ! -e "$kimage.old" ) {
rename("$kimage.$$", "$kimage.old");
}
else {
warn "$kimage.old is not a symlink, not clobbering\n";
warn "rm $kimage.$$";
}
}
# This routine handles a request to do symlinks, but there is no
# symlink file already there. Either we are supposed to use copy, or we are
# installing on a pristine system, or the user does not want symbolic links at
# all. We use a configuration file to tell the last two cases apart, creating
# a config file if needed.
sub handle_missing_link {
my $kimage = $_[0]; # Name of the symbolic link
my $image_dest = $_[1]; # The directory the links goes into
my $image_name = $_[2];
my $src_dir = $_[3];
warn "handle_missing_link: kimage=$kimage, image_dest=$image_dest\n" .
"\t image_name=$image_name, src_dir=$src_dir" if $DEBUG;
if ($no_symlink) {
my $ret = system("cp -a --backup=t " . $realimageloc .
"$image_name " . " $kimage");
if ($ret) {
die("Failed to copy " . $realimageloc . "$image_name to "
. $image_dest . "$kimage .\n");
}
}
if (! $no_symlink && $do_symlink =~ /Yes/i) {
my $Old = $realimageloc;
my $New = $image_dest;
my $Name = "$image_name";
my $Link_Dest = "$kimage";
if (test_relative ('Old Dir' => $Old,
'New Dir' => $New,
'Test File' => $Name)) {
$Old =~ s|^/*||o;
}
# Special case is they are in the same dir
my $rel_path = spath('Old' => "$Old", 'New' => "$New" );
$Old ="" if $rel_path =~ m/^\s*$/o;
symlink($Old . "$Name", "$Link_Dest") ||
die("Failed to symbolic-link ${Old}$Name to $Link_Dest.\n");
}
}
# This routine handles the rest of the cases, where the user has requested
# non-traditional handling, like using cp or hard links.
sub handle_non_symlinks {
my $kimage = $_[0]; # Name of the symbolic link
my $image_dest = $_[1]; # The directory the links goes into
my $image_name = $_[2];
my $src_dir = $_[3];
warn "handle_non_link: kimage=$kimage, image_dest=$image_dest\n" .
"\t image_name=$image_name, src_dir=$src_dir" if $DEBUG;
# Save the current image. We do this in all four cases
rename("$kimage", "$kimage.$$") ||
die "failed to move " . $image_dest . "$kimage:$!";
##,####
# case One
#`####
if ($no_symlink) {
# Maybe /$image_dest is on a dos system?
my $ret = system("cp -a --backup=t " . $realimageloc
. "$image_name " . "$kimage");
if ($ret) {
if (-e "$kimage.$$") {
rename("$kimage.$$", "$kimage");
}
die("Failed to copy " . $realimageloc . "$image_name to "
. $image_dest . "$kimage .\n");
}
}
##,####
# case Two
#`####
elsif ($use_hard_links =~ m/YES/i ) {
# Ok then. this ought to be a hard link, and hence fair game
# don't clobber $kimage.old quite yet
my $Old = $realimageloc;
my $cwd;
chomp($cwd=`pwd`);
if (test_relative ('Old Dir' => $Old, 'New Dir' => $cwd,
'Test File' => "$image_name")) {
$Old =~ s|^/*||o;
}
# Special case is they are in the same dir
my $rel_path = spath('Old' => "$Old", 'New' => "$cwd" );
$Old ="" if $rel_path =~ m/^\s*$/o;
if (! link($Old . "$image_name", "$kimage")) {
rename("$kimage.$$", "$kimage");
die("Failed to hard link " . $realimageloc . "$image_name to "
. $image_dest . "$kimage .\n");
}
}
##,####
# case Three
#`####
else {
# We just use cp
my $ret = system("cp -a --backup=t " . $realimageloc
. "$image_name " . "$kimage");
if ($ret) {
if (-e "$kimage.$$") {
rename("$kimage.$$", "$kimage");
}
die("Failed to copy " . $realimageloc . "$image_name to "
. $image_dest . "$kimage .\n");
}
}
# Ok, now we may clobber the previous .old file
rename("$kimage.$$", "$kimage.old") if -e "$kimage.$$";
}
# This routine is responsible for setting up the symbolic links
# So, the actual kernel image lives in
# $realimageloc/$image_name (/boot/vmlinuz-2.6.12).
# This routine creates symbolic links in $image_dest/$kimage (/vmlinuz)
sub image_magic {
my $kimage = $_[0]; # Name of the symbolic link
my $image_dest = $_[1]; # The directory the links goes into
my $image_name = "$kimage-$version";
my $src_dir = $realimageloc;
warn "image_magic: kimage=$kimage, image_dest=$image_dest\n" .
"\t image_name=$image_name, src_dir=$src_dir" if $DEBUG;
if (-l "$kimage") { # There is a symbolic link
warn "DEBUG: There is a symlink for $kimage\n" if $DEBUG;
my $force_move = move_p($kimage, $image_dest, $image_name, $src_dir);
if ($force_move) {
really_move_link($kimage, $image_dest, $image_name, $src_dir);
}
}
elsif (! -e "$kimage") {
# Hmm. Pristine system? How can that be? Installing from scratch?
# Or maybe the user does not want a symbolic link here.
# Possibly they do not want a link here. (we should be in /
# here[$image_dest, really]
handle_missing_link($kimage, $image_dest, $image_name, $src_dir);
}
elsif (-e "$kimage" ) {
# OK, $kimage exists -- but is not a link
handle_non_symlinks($kimage, $image_dest, $image_name, $src_dir);
}
}
######################################################################
######################################################################
######################################################################
######################################################################
sub do_modules {
print STDERR "Running depmod.\n";
my $ret = system("depmod -a -F $realimageloc/System.map-$version $version");
my $exit_value = $? >> 8;
my $signal_num = $? & 127;
my $dumped_core = $? & 128;
if ($ret) {
my $seen;
my $answer;
my $question;
$question = "${package_name}/postinst/depmod-error-initrd-$version";
($ret,$seen) = fset ("$question", 'seen', 'false');
die "Error setting debconf flags in $question: $seen" if $ret;
$ret = subst("$question", 'modules_base', "$modules_base");
die "Error setting debconf substitutions in $question: $seen" if $ret;
$ret = subst("$question", 'SIGNAL', ", and got a signal $signal_num");
die "Error setting debconf substitutions in $question: $seen" if $ret;
if ($dumped_core) {
$ret = subst("$question", 'CORE', ", and dumped core");
die "Error setting debconf substitutions in $question: $seen" if $ret;
}
else {
$ret = subst("$question", 'CORE', " ");
die "Error setting debconf substitutions in $question: $seen" if $ret;
}
($ret,$seen) = input('medium', "$question");
if ($ret && $ret != 30 ) {
die "Error setting debconf question $question: $seen";
}
($ret,$seen) = go ();
if ($ret && $ret != 30 ) {
die "Error asking debconf question $question: $seen";
}
($ret,$answer) = get("$question");
die "Error retreiving answer for $question: $answer" if $ret;
if (! $ignore_depmod_err) {
if ($answer =~ /^(y|t)/i) {
exit(1);
}
else {
print STDERR "Ok, continuing as directed\n";
}
}
}
# If we are installing (not upgrading) a package for a newer
# upstream version than that of the running kernel, check whether
# the user might be missing necessary firmware, perhaps because
# it has now been removed from the kernel.
#
# We base this check on the modules used in the running kernel and
# the corresponding (by name) modules in the new kernel. This is
# not entirely accurate because:
# 1. A device may now be handled by a module with a different name,
# leading us to miss the dependency
# 2. A device may be handled by a module that needs firmware only
# for some other device, leading us to claim a dependency wrongly
if (!defined($ARGV[1]) || $ARGV[1] eq '') {
sub version_code {
my $version = shift;
$version =~ s/^2\.(\d+)\.(\d+).*/2*65536 + $1*256 + $2/e
or $version =~ s/^(\d+)\.(\d+).*/$1*65536 + $2*256/e
or $version = 0;
return $version;
}
(undef, undef, my $running_version) = POSIX::uname();
if (version_code($version) > version_code($running_version)) {
my $missing = '';
my %module_paths;
open(DEP, "<$modules_base/$version/modules.dep") or return;
while (<DEP>) {
if (m|(.*/([^/]*)\.ko):|) {
my ($path, $module) = ($1, $2);
$module =~ s/-/_/g;
$module_paths{$module} = $path;
}
}
close(DEP);
open(MODULES, '</proc/modules') or return;
while (<MODULES>) {
s/ .*//s;
my $module = $_;
my $module_path = $module_paths{$module};
if (defined($module_path)) {
my $first = 1;
if ($module_path !~ m|^/|) {
$module_path = "$modules_base/$version/$module_path";
}
open(MODINFO, "modinfo -F firmware '$module_path' |");
while (<MODINFO>) {
chomp;
my $firmware = $_;
unless (-e "/lib/firmware/$firmware" ||
-e "/lib/firmware/$version/$firmware") {
if ($first) {
$missing .= "\\n" if $missing ne '';
$missing .= "$module: ";
$first = 0;
} else {
$missing .= ', ';
}
$missing .= $firmware;
}
}
close(MODINFO);
}
}
close(MODULES);
if ($missing ne '') {
my ($ret, $seen);
my $text = "${package_name}/postinst/missing-firmware-${version}";
($ret, $seen) = subst($text, 'runningversion', $running_version);
die "Error setting debconf substitutions in $text: $seen" if $ret;
($ret, $seen) = subst($text, 'version', $version);
die "Error setting debconf substitutions in $text: $seen" if $ret;
($ret, $seen) = subst($text, 'missing', $missing);
die "Error setting debconf substitutions in $text: $seen" if $ret;
($ret, $seen) = input('high', $text);
if ($ret && $ret != 30) {
die "Error setting debconf question $text: $seen";
}
($ret, $seen) = go();
if ($ret && $ret != 30) {
die "Error asking debconf question $text: $seen";
}
}
}
}
}
# We may not have any modules installed
if (-d "$modules_base/$version") {
&do_modules();
}
# 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;
}
# Only change the symlinks if we are not being upgraded
if (! defined $ARGV[1] || ! $ARGV[1] || $ARGV[1] =~ m/<unknown>/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
$ENV{'STEM'} = "linux";
sub run_hook {
my $type = shift;
my $script = shift;
print STDERR "Running $script.\n";
system ("$script $version $realimageloc$kimage-$version") &&
print STDERR "User $type hook script [$script] ";
if ($?) {
if ($? == -1) {
print STDERR "failed to execute: $!\n";
}
elsif ($? & 127) {
printf STDERR "died with signal %d, %s coredump\n",
($? & 127), ($? & 128) ? 'with' : 'without';
}
else {
printf STDERR "exited with value %d\n", $? >> 8;
}
exit $? >> 8;
}
}
my $options;
for (@ARGV) {
s,','\\'',g;
$options .= " '$_'";
}
$ENV{'DEB_MAINT_PARAMS'}="$options";
## Run user hook script here, if any
if ($postinst_hook) {
&run_hook("postinst", $postinst_hook);
}
if (-d "/etc/kernel/postinst.d") {
print STDERR "Examining /etc/kernel/postinst.d.\n";
system ("run-parts --verbose --exit-on-error --arg=$version " .
"--arg=$realimageloc$kimage-$version " .
"/etc/kernel/postinst.d") &&
die "Failed to process /etc/kernel/postinst.d";
}
if (-d "/etc/kernel/postinst.d/$version") {
print STDERR "Examining /etc/kernel/postinst.d/$version.\n";
system ("run-parts --verbose --exit-on-error --arg=$version " .
"--arg=$realimageloc$kimage-$version " .
"/etc/kernel/postinst.d/$version") &&
die "Failed to process /etc/kernel/postinst.d/$version";
}
exit 0;
__END__
I will try the other after Church this evening....
This is the third package, linux-headers-3.2.0-4-686-pae_3.2.41-2+deb7u2_i386.deb. I did it last and as expected it froze with the below. Is there another log I can peak in that might give more information?
I was able to kill this install with cntrl +c and got this;
Code:
run-parts: executing /etc/kernel/header_postinst.d/dkms 3.2.0-4-686-pae
Failed to process /etc/kernel/header_postinst.d at /var/lib/dpkg/info/linux-headers-3.2.0-4-686-pae.postinst line 12.
dpkg: error processing linux-headers-3.2.0-4-686-pae (--install):
subprocess installed post-installation script returned error exit status 255
Errors were encountered while processing:
linux-headers-3.2.0-4-686-pae
I got the headers installed and here's how. I noticed the errors seem to point to /etc/kernel/header_postinst.d/ which had one file in it, dkms, so I decided to reinstall dkms. I found a git for dkms and when I looked in the folder I noticed it had a dkms file so I moved that file in place of mine in /etc/kernel/header_postinst.d/. I was then able to install the headers.
Here are the old and new files. I don't know what the difference is but changing this one file seems to have solved my problem.
dkms.original
Code:
#!/bin/bash
# We're passed the version of the kernel being installed
inst_kern=$1
uname_s=$(uname -s)
_get_kernel_dir() {
KVER=$1
case ${uname_s} in
Linux) DIR="/lib/modules/$KVER/build" ;;
GNU/kFreeBSD) DIR="/usr/src/kfreebsd-headers-$KVER/sys" ;;
esac
echo $DIR
}
_check_kernel_dir() {
DIR=$(_get_kernel_dir $1)
case ${uname_s} in
Linux) test -e $DIR/include ;;
GNU/kFreeBSD) test -e $DIR/kern && test -e $DIR/conf/kmod.mk ;;
*) return 1 ;;
esac
return $?
}
case "${uname_s}" in
Linux)
header_pkg="linux-headers-$inst_kern"
kernel="Linux"
;;
GNU/kFreeBSD)
header_pkg="kfreebsd-headers-$inst_kern"
kernel="kFreeBSD"
;;
esac
if [ -x /usr/lib/dkms/dkms_autoinstaller ]; then
exec /usr/lib/dkms/dkms_autoinstaller start $inst_kern > /dev/null
fi
if ! _check_kernel_dir $inst_kern ; then
echo "dkms: WARNING: $kernel headers are missing, which may explain the above failures." >&2
echo " please install the $header_pkg package to fix this." >&2
fi
I had to attach them, the new dkms file was far too long to post the code.
No, it's not soolved. This is what I get trying to reinstall the image package. So the problem still exist even though it let me install the headers. This is a headless box so I can't use synaptic.
I expected dpkg would give more information about why it's getting stuck. You can try other debug options, like 1 or 1000. There are other debug options, but these are the ones that I think might be give some information. (You can execute dpkg -Dh for more information about the debug options).
Last edited by Hungry ghost; 05-19-2013 at 06:54 PM.
I got the image file to install after copying the new dkms file to;
/etc/kernel/postinst.d/
/etc/kernel/prerm.d/
I don't know what's up with the stock dkms file but it seems to be the source of my trouble. One difference I see is this:
Old...
Quote:
_get_kernel_dir() {
KVER=$1 case ${uname_s} in
Linux) DIR="/lib/modules/$KVER/build" ;;
GNU/kFreeBSD) DIR="/usr/src/kfreebsd-headers-$KVER/sys" ;;
esac
echo $DIR
}
New...
Quote:
_get_kernel_dir() {
KVER=$1 case ${current_os} in
Linux) DIR="/lib/modules/$KVER/build" ;;
GNU/kFreeBSD) DIR="/usr/src/kfreebsd-headers-$KVER/sys" ;;
esac
echo $DIR
}
I also noticed the original dkms on my machine is version 2.2.0.3-1.2 whereas the one on the dell site is version 2.2.0.3. It would seem the one that came with wheezy is newer.
LinuxQuestions.org is looking for people interested in writing
Editorials, Articles, Reviews, and more. If you'd like to contribute
content, let us know.