home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / debian / pkg / image / preinst < prev    next >
Encoding:
Text File  |  2006-08-02  |  19.3 KB  |  543 lines

  1. #! /usr/bin/perl
  2. #                              -*- Mode: Cperl -*-
  3. # image.preinst ---
  4. # Author           : Manoj Srivastava ( srivasta@tiamat.datasync.com )
  5. # Created On       : Sun Jun 14 03:38:02 1998
  6. # Created On Node  : tiamat.datasync.com
  7. # Last Modified By : Manoj Srivastava
  8. # Last Modified On : Wed Mar 22 14:07:17 2006
  9. # Last Machine Used: glaurung.internal.golden-gryphon.com
  10. # Update Count     : 97
  11. # Status           : Unknown, Use with caution!
  12. # HISTORY          :
  13. # Description      :
  14. #
  15. #
  16.  
  17. #
  18. #use strict; #for debugging
  19.  
  20. use Debconf::Client::ConfModule qw(:all);
  21. version('2.0');
  22. my $capb=capb("backup");
  23.  
  24. $|=1;
  25.  
  26. # Predefined values:
  27. my $version         = "=V";
  28. my $link_in_boot    = "=IB";     # Should be empty, mostly
  29. my $no_symlink      = "=S";     # Should be empty, mostly
  30. my $reverse_symlink = "=R";     # Should be empty, mostly
  31. my $do_symlink      = "Yes";    # target machine defined
  32. my $do_boot_enable  = "Yes";    # target machine defined
  33. my $do_bootfloppy   = "Yes";    # target machine defined
  34. my $do_bootloader   = "Yes";    # target machine defined
  35. my $move_image      = '';       # target machine defined
  36. my $mkimage         = "=M";     # command to generate the initrd image
  37. my $do_initrd       = '';       # target machine defined
  38. my $warn_initrd     = 'YES';    # target machine defined
  39. my $kimage          = "=K";     # Should be empty, mostly
  40. my $loader          = "=L";     # lilo, silo, quik, palo, vmelilo, nettrom
  41.                                 # or elilo
  42. my $image_dir       = "=D";     # where the image is located
  43. my $clobber_modules = '';       # target machine defined
  44. my $initrd          = "=I";     # initrd kernel
  45. my $use_hard_links  = '';       # hardlinks do not wirk across fs boundaries
  46. my $postinst_hook   = '';       #Normally we do not
  47. my $postrm_hook     = '';       #Normally we do not
  48. my $preinst_hook    = '';       #Normally we do not
  49. my $prerm_hook      = '';       #Normally we do not
  50. my $minimal_swap    = '';       # Do not swap symlinks
  51. my $ignore_depmod_err = '';    # normally we do not
  52. my $relink_src_link   = 'YES';    # There is no harm in checking the link
  53. my $relink_build_link = 'YES'; # There is no harm in checking the link
  54. my $force_build_link  = '';     # There is no harm in checking the link
  55. my $official_image    = "=OF"; # only true for official images
  56. my $arch              = "=A";  #  should be same as dpkg --print-installation-architecture
  57. my $kernel_arch       = "=B";
  58. my $ramdisk           = "=MK";  # List of tools to create initial ram fs.
  59. my $initrddep         = "=MD";  # List of dependencies for such tools
  60. my $update_initramfs  = "/usr/sbin/update-initramfs";
  61. my $package_name    = "=ST-image-$version";
  62.  
  63. $ramdisk = $update_initramfs if (-x $update_initramfs);
  64.  
  65. my $Loader          = "NoLOADER"; #
  66. $Loader             = "LILO"     if $loader =~ /^lilo/io;
  67. $Loader             = "SILO"     if $loader =~ /^silo/io;
  68. $Loader             = "QUIK"     if $loader =~ /^quik/io;
  69. $Loader             = "yaboot"   if $loader =~ /^yaboot/io;
  70. $Loader             = "PALO"     if $loader =~ /^palo/io;
  71. $Loader             = "NETTROM"  if $loader =~ /^nettrom/io;
  72. $Loader             = "VMELILO"  if $loader =~ /^vmelilo/io;
  73. $Loader             = "ZIPL"     if $loader =~ /^zipl/io;
  74. $Loader             = "ELILO"    if $loader =~ /^elilo/io;
  75.  
  76.  
  77. #known variables
  78. my @boilerplate     = ();
  79. my @silotemplate    = ();
  80. my @quiktemplate    = ();
  81. my @palotemplate    = ();
  82. my @vmelilotemplate = ();
  83. my $bootdevice      = '';
  84. my $rootdevice      = '';
  85. my $rootdisk        = '';
  86. my $rootpartition   = '';
  87. my $image_dest      = "/";
  88. my $realimageloc    = "/$image_dir/";
  89. my $have_conffile   = "";
  90. my $CONF_LOC        = '/etc/kernel-img.conf';
  91. my $relative_links  = '';
  92. my $silent_modules  = '';
  93. my $silent_loader   = '';
  94. my $modules_base    = '/lib/modules';
  95.  
  96. die "Pre inst Internal error. Aborting." unless $version;
  97.  
  98. exit 0 if $ARGV[0] =~ /abort-upgrade/;
  99. exit 1 unless $ARGV[0] =~ /(install|upgrade)/;
  100.  
  101. # Official images may silently upgrade
  102. if ($official_image =~ /^\s*YES\s*$/o
  103.     && ($ARGV[0] =~ /upgrade/ || $arch =~ m/powerpc/)) {
  104.     $silent_modules = 'Yes';
  105.   }
  106.  
  107. # remove multiple leading slashes; make sure there is at least one.
  108. $realimageloc  =~ s|^/*|/|o;
  109. $realimageloc  =~ s|/+|/|o;
  110.  
  111. if (-r "$CONF_LOC" && -f "$CONF_LOC"  ) {
  112.   if (open(CONF, "$CONF_LOC")) {
  113.     while (<CONF>) {
  114.       chomp;
  115.       s/\#.*$//g;
  116.       next if /^\s*$/;
  117.  
  118.       $do_symlink      = "" if /do_symlinks\s*=\s*(no|false|0)\s*$/ig;
  119.       $no_symlink      = "" if /no_symlinks\s*=\s*(no|false|0)\s*$/ig;
  120.       $reverse_symlink = "" if /reverse_symlinks\s*=\s*(no|false|0)\s*$/ig;
  121.       $link_in_boot    = "" if /image_in_boot\s*=\s*(no|false|0)\s*$/ig;
  122.       $link_in_boot    = "" if /link_in_boot\s*=\s*(no|false|0)\s*$/ig;
  123.       $move_image      = "" if /move_image\s*=\s*(no|false|0)\s*$/ig;
  124.       $clobber_modules = '' if /clobber_modules\s*=\s*(no|false|0)\s*$/ig;
  125.       $do_boot_enable  = '' if /do_boot_enable\s*=\s*(no|false|0)\s*$/ig;
  126.       $do_bootfloppy   = '' if /do_bootfloppy\s*=\s*(no|false|0)\s*$/ig;
  127.       $do_bootloader   = '' if /do_bootloader\s*=\s*(no|false|0)\s*$/ig;
  128.       $do_initrd       = '' if /do_initrd\s*=\s*(no|false|0)\s*$/ig;
  129.       $warn_initrd     = '' if /warn_initrd\s*=\s*(no|false|0)\s*$/ig;
  130.       $relative_links  = '' if /relative_links \s*=\s*(no|false|0)\s*$/ig;
  131.       $use_hard_links  = '' if /use_hard_links\s*=\s*(no|false|0)\s*$/ig;
  132.       $silent_modules  = '' if /silent_modules\s*=\s*(no|false|0)\s*$/ig;
  133.       $silent_loader   = '' if /silent_loader\s*=\s*(no|false|0)\s*$/ig;
  134.       $minimal_swap    = '' if /minimal_swap\s*=\s*(no|false|0)\s*$/ig;
  135.       $ignore_depmod_err = '' if /ignore_depmod_err\s*=\s*(no|false|0)\s*$/ig;
  136.       $relink_src_link   = '' if /relink_src_link\s*=\s*(no|false|0)\s*$/ig;
  137.       $relink_build_link = '' if /relink_build_link\s*=\s*(no|false|0)\s*$/ig;
  138.       $force_build_link = '' if /force_build_link\s*=\s*(no|false|0)\s*$/ig;
  139.  
  140.       $do_symlink      = "Yes" if /do_symlinks\s*=\s*(yes|true|1)\s*$/ig;
  141.       $no_symlink      = "Yes" if /no_symlinks\s*=\s*(yes|true|1)\s*$/ig;
  142.       $reverse_symlink = "Yes" if /reverse_symlinks\s*=\s*(yes|true|1)\s*$/ig;
  143.       $link_in_boot    = "Yes" if /image_in_boot\s*=\s*(yes|true|1)\s*$/ig;
  144.       $link_in_boot    = "Yes" if /link_in_boot\s*=\s*(yes|true|1)\s*$/ig;
  145.       $move_image      = "Yes" if /move_image\s*=\s*(yes|true|1)\s*$/ig;
  146.       $clobber_modules = "Yes" if /clobber_modules\s*=\s*(yes|true|1)\s*$/ig;
  147.       $do_boot_enable  = "Yes" if /do_boot_enable\s*=\s*(yes|true|1)\s*$/ig;
  148.       $do_bootfloppy   = "Yes" if /do_bootfloppy\s*=\s*(yes|true|1)\s*$/ig;
  149.       $do_bootloader   = "Yes" if /do_bootloader\s*=\s*(yes|true|1)\s*$/ig;
  150.       $relative_links  = "Yes" if /relative_links\s*=\s*(yes|true|1)\s*$/ig;
  151.       $do_initrd       = "Yes" if /do_initrd\s*=\s*(yes|true|1)\s*$/ig;
  152.       $warn_initrd     = "Yes" if /warn_initrd\s*=\s*(yes|true|1)\s*$/ig;
  153.       $use_hard_links  = "Yes" if /use_hard_links\s*=\s*(yes|true|1)\s*$/ig;
  154.       $silent_modules  = 'Yes' if /silent_modules\s*=\s*(yes|true|1)\s*$/ig;
  155.       $silent_loader   = 'Yes' if /silent_loader\s*=\s*(yes|true|1)\s*$/ig;
  156.       $minimal_swap    = 'Yes' if /minimal_swap\s*=\s*(yes|true|1)\s*$/ig;
  157.       $ignore_depmod_err = 'Yes' if /ignore_depmod_err\s*=\s*(yes|true|1)\s*$/ig;
  158.       $relink_src_link   = 'Yes' if /relink_src_link\s*=\s*(yes|true|1)\s*$/ig;
  159.       $relink_build_link = 'Yes' if /relink_build_link\s*=\s*(yes|true|1)\s*$/ig;
  160.       $force_build_link = 'Yes' if /force_build_link\s*=\s*(yes|true|1)\s*$/ig;
  161.  
  162.       $image_dest      = "$1"  if /image_dest\s*=\s*(\S+)/ig;
  163.       $postinst_hook   = "$1"  if /postinst_hook\s*=\s*(\S+)/ig;
  164.       $postrm_hook     = "$1"  if /postrm_hook\s*=\s*(\S+)/ig;
  165.       $preinst_hook    = "$1"  if /preinst_hook\s*=\s*(\S+)/ig;
  166.       $prerm_hook      = "$1"  if /prerm_hook\s*=\s*(\S+)/ig;
  167.       $mkimage         = "$1"  if /mkimage\s*=\s*(.+)$/ig;
  168.       $ramdisk         = "$1"  if /ramdisk\s*=\s*(.+)$/ig;
  169.     }
  170.     close CONF;
  171.     $have_conffile = "Yes";
  172.     $have_conffile = "Yes";    # stop perl complaining
  173.   }
  174. }
  175.  
  176. if ($do_initrd)    {   $warn_initrd = '';   }
  177. if (!$warn_initrd) {   $do_initrd   = "YES";}
  178.  
  179. $ENV{KERNEL_ARCH}=$kernel_arch if $kernel_arch;
  180.  
  181. # About to upgrade this package from version $2 TO THIS VERSION.
  182. # "prerm upgrade" has already been called for the old version of
  183. # this package.
  184.  
  185. sub find_initrd_tool {
  186.   my $hostversion = shift;
  187.   my $version = shift;
  188.   my @ramdisks =
  189.     grep {
  190.       my $args = 
  191.         "$_ " .
  192.           "--supported-host-version=$hostversion " .
  193.             "--supported-target-version=$version " .
  194.               "1>/dev/null 2>&1"
  195.                 ;
  196.       system($args) == 0;
  197.     }
  198.       split (/[:,\s]+/, $ramdisk);
  199. }
  200.  
  201. # For some versions of kernel-package, we had this warning in the
  202. # postinst, but the rules did not really interpolate the value in.
  203. # Here is a sanity check.
  204. my $pattern = "=" . "I";
  205. $initrd=~ s/^$pattern$//;
  206.  
  207. if ($initrd && $ramdisk ne $update_initramfs) {
  208.   chomp (my $hostversion = `uname -r`);
  209.   my @ramdisklist;
  210.   @ramdisklist = find_initrd_tool($hostversion, $version, $ramdisk) if $ramdisk;
  211.   if ($#ramdisklist < 0) {
  212.     my $ret;
  213.     my $seen;
  214.     my $text = "${package_name}/preinst/initrd-$version";
  215.     ($ret,$seen) = fset ("$text", 'seen', 'false');
  216.     die "Error setting debconf flags in $text: $seen" if $ret;
  217.  
  218.     ($ret,$seen) = subst("$text", 'hostversion', "$hostversion");
  219.     die "Error setting debconf substitutions in $text: $seen" if $ret;
  220.  
  221.     ($ret,$seen) = subst("$text", 'ramdisk', "$ramdisk");
  222.     die "Error setting debconf substitutions in $text: $seen" if $ret;
  223.  
  224.     ($ret,$seen) = subst("$text", 'initrddep', "$initrddep");
  225.     die "Error setting debconf substitutions in $text: $seen" if $ret;
  226.  
  227.     ($ret,$seen) = input('medium', "$text");
  228.     if ($ret && $ret != 30 ) {
  229.       die "Error setting debconf question $text: $seen";
  230.     }
  231.  
  232.     ($ret,$seen) = go ();
  233.     if ($ret && $ret != 30 ) {
  234.       die "Error asking debconf question $text: $seen";
  235.     }
  236.     # I no longer claim this question
  237.     ($ret,$seen) = unregister("$text");
  238.     die "Error unregistering debconf question $text: $seen" if $ret;
  239.     warn "Could not find $ramdisk.";
  240.   }
  241. }
  242.  
  243.  
  244. if ($initrd && !$do_initrd) {
  245.   my $ret;
  246.   my $seen;
  247.   my $answer;
  248.   my $invisible = 0;
  249.   my $question = "${package_name}/preinst/bootloader-initrd-$version";
  250.   if ($loader =~ m/^lilo/i) {
  251.     $question = "${package_name}/preinst/lilo-initrd-$version";
  252.   }
  253.   elsif ($loader =~ m/^elilo/i) {
  254.     $question = "${package_name}/preinst/elilo-initrd-$version";
  255.   }
  256.   ($ret,$seen) = fset ("$question", 'seen', 'false');
  257.   die "Error setting debconf flags in $question: $seen" if $ret;
  258.  
  259.   ($ret,$seen) = input('critical', "$question");
  260.   if ($ret && $ret != 30 ) {
  261.     die "Error setting debconf question $question: $seen";
  262.   }
  263.   $invisible = $ret if $ret == 30;
  264.  
  265.   ($ret,$seen) = go ();
  266.   if ($ret && $ret != 30 ) {
  267.     die "Error asking debconf question $question: $seen";
  268.   }
  269.  
  270.   ($ret,$answer) = get("$question");
  271.   die "Error retreiving answer for $question: $answer" if $ret;
  272.  
  273.   my $note = "${package_name}/preinst/lilo-has-ramdisk";
  274.   if (-f "/etc/lilo.conf"){
  275.     my $ramdisk_found = 0;
  276.     open (CONF, "/etc/lilo.conf")  or warn "Can't open /etc/lilo.conf: $!";
  277.     while (<CONF>) {
  278.       chomp;
  279.       if (m/^(\s*ramdisk\s*=\s*0)/g) {
  280.         my $line = $1;
  281.  
  282.         ($ret,$seen) = fset ("$note", 'seen', 'false');
  283.         die "Error setting debconf flags in $note: $seen" if $ret;
  284.  
  285.         $ret = subst("$note", 'LINE', "$line");
  286.         die "Error setting debconf substitutions in $note: $seen" if $ret;
  287.  
  288.         ($ret,$seen) = input('medium', "$note");
  289.         if ($ret && $ret != 30 ) {
  290.           die "Error setting debconf note $note: $seen";
  291.         }
  292.  
  293.         ($ret,$seen) = go ();
  294.         if ($ret && $ret != 30 ) {
  295.           die "Error asking debconf question $note: $seen";
  296.         }
  297.         last;
  298.       }
  299.     }
  300.     close CONF;
  301.   }
  302.   $answer =~ s/^\s+//;
  303.   $answer =~ s/\s+$//;
  304.   print STDERR "Ok, Aborting\n" unless $answer =~ /^(f|n)/i;
  305.   if ($answer !~ /^(f|n)/i && $invisible) {
  306.     my $note = "${package_name}/preinst/abort-install-$version";
  307.  
  308.     ($ret,$seen) = fset ("$note", 'seen', 'false');
  309.     die "Error setting debconf flags in $note: $seen" if $ret;
  310.  
  311.     ($ret,$seen) = fset ("$note", 'seen', 'false');
  312.     die "Error setting debconf flags in $note: $seen" if $ret;
  313.  
  314.     ($ret,$seen) = input('critical', "$note");
  315.     if ($ret && $ret != 30 ) {
  316.       die "Error setting debconf note $note: $seen";
  317.     }
  318.  
  319.     ($ret,$seen) = go ();
  320.     if ($ret && $ret != 30 ) {
  321.       die "Error asking debconf question $note: $seen";
  322.     }
  323.   }
  324.   exit 1 unless  $answer =~ /^(f|n)/i;
  325. }
  326.  
  327.  
  328. sub check {
  329.   my $version = shift;
  330.   my $lib_modules="$modules_base/$version";
  331.   my $message = '';
  332.  
  333.   if (-d "$lib_modules") {
  334.     opendir(DIR, $lib_modules) || die "canΓÇÖt opendir $lib_modules: $!";
  335.     my @children = readdir(DIR);
  336.     if ($#children > 1) {
  337.       my @dirs  = grep { -d "$lib_modules/$_" } @children;
  338.       if ($#dirs > 1) { # we have subdirs
  339.         my $dir_message='';
  340.         for my $dir (@dirs) {
  341.           if ($dir =~/kernel$/) {
  342.             $dir_message="An older install was detected.\n";
  343.           }
  344.           else {
  345.             $dir_message="Module sub-directories were detected.\n"
  346.               unless $dir_message;
  347.           }
  348.         }
  349.         $message += $dir_message if $dir_message;
  350.       }
  351.  
  352.       my @links = grep { -l "$lib_modules/$_" } @children;
  353.       if ($#links > -1) {
  354.         my $links_message = '';
  355.         for my $link (@links) {
  356.           next if ($link =~ /^build$/);
  357.           next if ($link =~ /^source$/);
  358.           $links_message = "Symbolic links were detected in $modules_base/$version.\n";
  359.         }
  360.         $message += $links_message if $links_message;
  361.       }
  362.       my @files = grep { -f "$lib_modules/$_" } @children;
  363.       $message += "Additional files also exist in $modules_base/$version.\n"
  364.         if ($#files > -1);
  365.     }
  366.   }
  367.   else { $message .= "$lib_modules does not exist. ";}
  368.   return $message;
  369. }
  370.  
  371. if (-d "$modules_base/$version") {
  372.   my $errors=check($version);
  373.   warn "Info:\n$errors\n" if $errors;
  374. }
  375.  
  376. # If this is an official image, and only a build symlink exists, allow
  377. # it to be clobbered.
  378. if ($official_image =~ /^\s*YES\s*$/o ) {
  379.   $silent_modules = 'YES';
  380.   if (-d "$modules_base/$version" && -l "$modules_base/$version/build" ) {
  381.     rename("$modules_base/$version/build", "$modules_base/$version/build.save") ||
  382.       die "failed to move $modules_base/$version/build:$!";
  383.   }
  384. }
  385.  
  386. if (-d "$modules_base/$version/kernel") {
  387.   if ($clobber_modules) {
  388.     my $ret = 
  389.       system("mv $modules_base/$version/kernel $modules_base/${version}/kernel_$$");
  390.     my $seen;
  391.     if ($ret) {
  392.       my $note = "${package_name}/preinst/failed-to-move-modules-$version";
  393.  
  394.       ($ret,$seen) = fset ("$note", 'seen', 'false');
  395.       die "Error setting debconf flags in $note: $seen" if $ret;
  396.  
  397.       ($ret,$seen) = fset ("$note", 'seen', 'false');
  398.       die "Error setting debconf flags in $note: $seen" if $ret;
  399.  
  400.       $ret = subst("$note", 'modules_base', "$modules_base");
  401.       die "Error setting debconf substitutions in $note: $seen" if $ret;
  402.  
  403.       $ret = subst("$note", 'dest', "${version}/kernel_$$");
  404.       die "Error setting debconf substitutions in $note: $seen" if $ret;
  405.  
  406.       ($ret,$seen) = input('critical', "$note");
  407.       if ($ret && $ret != 30 ) {
  408.         die "Error setting debconf note $note: $seen";
  409.       }
  410.  
  411.       ($ret,$seen) = go ();
  412.       if ($ret && $ret != 30 ) {
  413.         die "Error asking debconf question $note: $seen";
  414.       }
  415.       exit 1;
  416.     }
  417.   }
  418.   elsif ($silent_modules !~ m/YES/i) {
  419.     my $ret;
  420.     my $seen;
  421.     my $answer;
  422.     my $question = "${package_name}/preinst/overwriting-modules-$version";
  423.  
  424.     ($ret,$seen) = fset ("$question", 'seen', 'false');
  425.     die "Error setting debconf flags in $question: $seen" if $ret;
  426.  
  427.     $ret = subst("$question", 'modules_base', "$modules_base");
  428.     die "Error setting debconf substitutions in $question: $seen" if $ret;
  429.  
  430.     $ret = subst("$question", 'package', "$package_name");
  431.     die "Error setting debconf substitutions in $question: $seen" if $ret;
  432.  
  433.     ($ret,$seen) = input('critical', "$question");
  434.     if ($ret && $ret != 30 ) {
  435.       die "Error setting debconf question $question: $seen";
  436.     }
  437.     $invisible = $ret if $ret == 30;
  438.  
  439.     ($ret,$seen) = go ();
  440.     if ($ret && $ret != 30 ) {
  441.       die "Error asking debconf question $question: $seen";
  442.     }
  443.  
  444.     ($ret,$answer) = get("$question");
  445.     die "Error retreiving answer for $question: $answer" if $ret;
  446.  
  447.     $answer =~ s/^\s+//;
  448.     $answer =~ s/\s+$//;
  449.     print STDERR "Ok, Aborting\n" unless $answer =~ /^(f|n)/i;
  450.     if ($answer !~ /^(f|n)/i && $invisible) {
  451.       my $note = "${package_name}/preinst/abort-overwrite-$version";
  452.  
  453.       ($ret,$seen) = fset ("$note", 'seen', 'false');
  454.       die "Error setting debconf flags in $note: $seen" if $ret;
  455.  
  456.       ($ret,$seen) = fset ("$note", 'seen', 'false');
  457.       die "Error setting debconf flags in $note: $seen" if $ret;
  458.  
  459.       ($ret,$seen) = input('critical', "$note");
  460.       if ($ret && $ret != 30 ) {
  461.         die "Error setting debconf note $note: $seen";
  462.       }
  463.  
  464.       ($ret,$seen) = go ();
  465.       if ($ret && $ret != 30 ) {
  466.         die "Error asking debconf question $note: $seen";
  467.       }
  468.     }
  469.     exit 1 unless  $answer =~ /^(f|n)/i;
  470.   }
  471.   else {
  472.     print STDERR <<EOF;
  473. The directory $modules_base/$version still exists. Continuing as directed.
  474. EOF
  475.   ;
  476.   }
  477. }
  478.  
  479. # We don't worry about this for official images, since we ensure that
  480. # same-name packages are ABI compatible. It should be ok to load modules
  481. # across this update, and in fact, it better be.
  482. if ( -f "$modules_base/$version/modules.dep" ) {
  483.   my $running = '';
  484.   chop($running=`uname -r`);
  485.   if ($running eq $version && $official_image !~ /^\s*YES\s*$/o) {
  486.     my $note = "${package_name}/preinst/already-running-this-$version";
  487.  
  488.     ($ret,$seen) = fset ("$note", 'seen', 'false');
  489.     die "Error setting debconf flags in $note: $seen" if $ret;
  490.  
  491.     ($ret,$seen) = fset ("$note", 'seen', 'false');
  492.     die "Error setting debconf flags in $note: $seen" if $ret;
  493.  
  494.     $ret = subst("$note", 'modules_base', "$modules_base");
  495.     die "Error setting debconf substitutions in $note: $seen" if $ret;
  496.  
  497.     $ret = subst("$note", 'running', "$running");
  498.     die "Error setting debconf substitutions in $note: $seen" if $ret;
  499.  
  500.     ($ret,$seen) = input('critical', "$note");
  501.     if ($ret && $ret != 30 ) {
  502.       die "Error setting debconf note $note: $seen";
  503.     }
  504.  
  505.     ($ret,$seen) = go ();
  506.     if ($ret && $ret != 30 ) {
  507.       die "Error asking debconf question $note: $seen";
  508.     }
  509.   }
  510. }
  511.  
  512. # set the env var stem
  513. $ENV{'STEM'} = "=ST";
  514.  
  515.  
  516. ## Run user hook script here, if any
  517. if (-x "$preinst_hook") {
  518.   print STDERR "Running preinst hook $preinst_hook.\n";
  519.     system ("$preinst_hook $version  ${realimageloc}${kimage}-${version}") &&
  520.     die "User hook script $preinst_hook failed";
  521. }
  522. if (-d "/etc/kernel/preinst.d") {
  523.   print STDERR "Examining /etc/kernel/preinst.d/\n";
  524.   system ("run-parts --verbose --exit-on-error --arg=$version" .
  525.           " --arg=$realimageloc$kimage-$version" .
  526.           " /etc/kernel/preinst.d") &&
  527.             die "Failed to process /etc/kernel/preinst.d";
  528. }
  529. if (-d "/etc/kernel/preinst.d/$version") {
  530.   print STDERR "Examining /etc/kernel/preinst.d/$version.\n";
  531.   system ("run-parts --verbose --exit-on-error --arg=$version" .
  532.           " --arg=$realimageloc$kimage-$version" .
  533.           " /etc/kernel/preinst.d/$version") &&
  534.             die "Failed to process /etc/kernel/preinst.d/$version";
  535. }
  536. print STDERR "Done.\n";
  537.  
  538. exit 0;
  539.  
  540. __END__
  541.  
  542.  
  543.