]>
Commit | Line | Data |
---|---|---|
fef4fb4a LO |
1 | #!/usr/bin/perl |
2 | # -*- Mode: Cperl -*- | |
3 | # debian.postinst --- | |
4 | # Author : Manoj Srivastava ( srivasta@pilgrim.umass.edu ) | |
5 | # Created On : Sat Apr 27 05:42:43 1996 | |
6 | # Created On Node : melkor.pilgrim.umass.edu | |
7 | # Last Modified By : Manoj Srivastava | |
8 | # Last Modified On : Sat Aug 5 13:20:22 2006 | |
9 | # Last Machine Used: glaurung.internal.golden-gryphon.com | |
10 | # Update Count : 45 | |
11 | # Status : Unknown, Use with caution! | |
12 | # HISTORY : | |
13 | # Description : | |
14 | # | |
15 | # | |
16 | # | |
17 | # arch-tag: 1c716174-2f0a-476d-a626-a1322e62503a | |
18 | # | |
19 | ||
20 | ||
21 | $|=1; | |
22 | ||
23 | # Predefined values: | |
24 | my $version = "=V"; | |
25 | my $kimage = "=K"; | |
26 | my $package_name = "linux-image-$version"; | |
27 | ||
28 | ||
29 | # Ignore all invocations uxcept when called on to configure. | |
30 | exit 0 unless ($ARGV[0] && $ARGV[0] =~ /configure/); | |
31 | ||
32 | #known variables | |
33 | my $image_dest = "/"; | |
34 | my $realimageloc = "/boot/"; | |
35 | my $silent_modules = ''; | |
36 | my $modules_base = '/lib/modules'; | |
37 | my $CONF_LOC = '/etc/kernel-img.conf'; | |
38 | # remove multiple leading slashes; make sure there is at least one. | |
39 | $realimageloc =~ s|^/*|/|o; | |
40 | $realimageloc =~ s|/+|/|o; | |
41 | ||
42 | chdir '/usr/src' or die "Could not chdir to /usr/src:$!"; | |
43 | ||
44 | if (-r "$CONF_LOC" && -f "$CONF_LOC" ) { | |
45 | if (open(CONF, "$CONF_LOC")) { | |
46 | while (<CONF>) { | |
47 | chomp; | |
48 | s/\#.*$//g; | |
49 | next if /^\s*$/; | |
50 | ||
51 | $header_postinst_hook = "$1" if /^\s*header_postinst_hook\s*=\s*(\S+)/ig; | |
52 | } | |
53 | close CONF; | |
54 | } | |
55 | } | |
56 | ||
57 | sub exec_script { | |
58 | my $type = shift; | |
59 | my $script = shift; | |
60 | print STDERR "Running $type hook script $script.\n"; | |
61 | system ("$script $version $realimageloc$kimage-$version") && | |
62 | print STDERR "User $type hook script [$script] "; | |
63 | if ($?) { | |
64 | if ($? == -1) { | |
65 | print STDERR "failed to execute: $!\n"; | |
66 | } | |
67 | elsif ($? & 127) { | |
68 | printf STDERR "died with signal %d, %s coredump\n", | |
69 | ($? & 127), ($? & 128) ? 'with' : 'without'; | |
70 | } | |
71 | else { | |
72 | printf STDERR "exited with value %d\n", $? >> 8; | |
73 | } | |
74 | exit $? >> 8; | |
75 | } | |
76 | } | |
77 | sub run_hook { | |
78 | my $type = shift; | |
79 | my $script = shift; | |
80 | if ($script =~ m,^/,) { | |
81 | # Full path provided for the hook script | |
82 | if (-x "$script") { | |
83 | &exec_script($type,$script); | |
84 | } | |
85 | else { | |
86 | die "The provided $type hook script [$script] could not be run.\n"; | |
87 | } | |
88 | } | |
89 | else { | |
90 | # Look for it in a safe path | |
91 | for my $path ('/bin', '/sbin', '/usr/bin', '/usr/sbin') { | |
92 | if (-x "$path/$script") { | |
93 | &exec_script($type, "$path/$script"); | |
94 | return 0; | |
95 | } | |
96 | } | |
97 | # No luck | |
98 | print STDERR "Could not find $type hook script [$script].\n"; | |
99 | die "Looked in: '/bin', '/sbin', '/usr/bin', '/usr/sbin'\n"; | |
100 | } | |
101 | } | |
102 | ||
103 | ## Run user hook script here, if any | |
104 | if (-x "$header_postinst_hook") { | |
105 | &run_hook("postinst", $header_postinst_hook); | |
106 | } | |
107 | ||
108 | if (-d "/etc/kernel/header_postinst.d") { | |
109 | print STDERR "Examining /etc/kernel/header_postinst.d.\n"; | |
110 | system ("run-parts --verbose --exit-on-error --arg=$version " . | |
111 | "--arg=$realimageloc$kimage-$version " . | |
112 | "/etc/kernel/header_postinst.d") && | |
113 | die "Failed to process /etc/kernel/header_postinst.d"; | |
114 | } | |
115 | ||
116 | if (-d "/etc/kernel/header_postinst.d/$version") { | |
117 | print STDERR "Examining /etc/kernel/header_postinst.d/$version.\n"; | |
118 | system ("run-parts --verbose --exit-on-error --arg=$version " . | |
119 | "--arg=$realimageloc$kimage-$version " . | |
120 | "/etc/kernel/header_postinst.d/$version") && | |
121 | die "Failed to process /etc/kernel/header_postinst.d/$version"; | |
122 | } | |
123 | ||
124 | exit 0; | |
125 | ||
126 | __END__ |