]> git.donarmstrong.com Git - debhelper.git/blob - dh_installinit
r1849: * dh_installinit: If run with -o, do the inverse of -n and only
[debhelper.git] / dh_installinit
1 #!/usr/bin/perl -w
2
3 =head1 NAME
4
5 dh_installinit - install init scripts into package build directories
6
7 =cut
8
9 use strict;
10 use Debian::Debhelper::Dh_Lib;
11
12 =head1 SYNOPSIS
13
14 B<dh_installinit> [S<I<debhelper options>>] [B<--name=>I<name>] [B<-n>] [B<-r>] [B<-d>] [S<B<--> I<params>>]
15
16 =head1 DESCRIPTION
17
18 dh_installinit is a debhelper program that is responsible for installing
19 init scripts and associated defaults files into package build directories.
20
21 It also automatically generates the postinst and postrm and prerm commands
22 needed to set up the symlinks in /etc/rc*.d/ and to start and stop the init
23 scripts.
24
25 If a file named debian/package.init exists, then it is installed into
26 etc/init.d/package in the package build directory, with "package" replaced
27 by the package name.
28
29 If a file named debian/package.default exists, then it is installed into
30 etc/default/package in the package build directory, with "package" replaced
31 by the package name.
32
33 =head1 OPTIONS
34
35 =over 4
36
37 =item B<-n>, B<--noscripts>
38
39 Do not modify postinst/postrm/prerm scripts.
40
41 =item B<-o>, B<--onlyscripts>
42
43 Only modify postinst/postrm/prerm scripts, do not actually install any init
44 script or default files. May be useful if the init script is shipped and/or
45 installed by upstream in a way that doesn't make it easy to let
46 dh_installinit find it.
47
48 =item B<-r>, B<--no-restart-on-upgrade>
49
50 Do not restart init script on upgrade.
51
52 =item B<--no-start>
53
54 Do not start the init script on install or upgrade, or stop it on removal.
55 Only call update-rc.d. Useful for rcS scripts.
56
57 =item B<-d>, B<--remove-d>
58
59 Remove trailing "d" from the name of the package, and use the result for the
60 filename the init script is installed as in etc/init.d/ , and the default file
61 is installed as in etc/default/ . This may be useful for daemons with names
62 ending in "d". (Note: this takes precedence over the --init-script parameter
63 described below.)
64
65 =item B<-u>I<params> B<--update-rcd-params=>I<params>
66
67 =item B<--> I<params>
68
69 Pass "params" to L<update-rc.d(8)>. If not specified, "defaults" will be
70 passed to L<update-rc.d(8)>.
71
72 =item B<--name=>I<name>
73
74 Install the init script (and default file) using the filename I<name>
75 instead of the default filename, which is the package name. When this
76 parameter is used, dh_installinit looks for and installs files named
77 debian/package.name.init and debian/package.name.default, instead of the
78 usual debian/package.init and debian/package.default.
79
80 =item B<--init-script=>I<scriptname>
81
82 Use "scriptname" as the filename the init script is installed as in
83 etc/init.d/ (and also use it as the filename for the defaults file, if it
84 is installed). If you use this parameter, dh_installinit will look to see
85 if a file in the debian/ directory exists that looks like
86 "package.scriptname" and if so will install it as the init script in
87 preference to the files it normally installs.
88
89 This parameter is deprecated, use the --name parameter instead.
90
91 =item B<
92
93 =item B<--error-handler=>I<function>
94
95 Call the named shell function if running the init script fails. The
96 function should be provided in the prerm and postinst scripts, before the
97 #DEBHELPER# token.
98
99 =back
100
101 =head1 NOTES
102
103 Note that this command is not idempotent. "dh_clean -k" should be called
104 between invocations of this command. Otherwise, it may cause multiple
105 instances of the same text to be added to maintainer scripts.
106
107 =cut
108
109 init();
110
111 foreach my $package (@{$dh{DOPACKAGES}}) {
112         my $tmp=tmpdir($package);
113
114         # Figure out what filename to install it as.
115         my $script;
116         if (defined $dh{NAME}) {
117                 $script=$dh{NAME};
118         }
119         elsif ($dh{D_FLAG}) {
120                 # -d on the command line sets D_FLAG. We will 
121                 # remove a trailing 'd' from the package name and 
122                 # use that as the name.
123                 $script=$package;
124                 if ($script=~m/(.*)d$/) {
125                         $script=$1;
126                 }
127                 else {
128                         warning("\"$package\" has no final d' in its name, but -d was specified.");
129                 }
130         }       
131         elsif ($dh{INIT_SCRIPT}) {
132                 $script=$dh{INIT_SCRIPT};
133         }
134         else {
135                 $script=$package;
136         }       
137         
138         my $init=pkgfile($package,$script) || pkgfile($package,"init") ||
139               pkgfile($package,"init.d");
140         my $default=pkgfile($package,'default');
141
142         if ($default ne '' && ! $dh{ONLYSCRIPTS}) {
143                 if (! -d "$tmp/etc/default") {
144                         doit("install","-d","$tmp/etc/default");
145                 }
146                 doit("install","-p","-m644",$default,"$tmp/etc/default/$script");
147         }
148
149         if ($init ne '' || $dh{ONLYSCRIPTS}) {
150                 if (! $dh{ONLYSCRIPTS}) {
151                         if (! -d "$tmp/etc/init.d") {
152                                 doit("install","-d","$tmp/etc/init.d");
153                         }
154                 
155                         doit("install","-p","-m755",$init,"$tmp/etc/init.d/$script");
156                 }
157                 
158                 # This is set by the -u "foo" command line switch, it's
159                 # the parameters to pass to update-rc.d. If not set,
160                 # we have to say "defaults".
161                 my $params='';
162                 if (defined($dh{U_PARAMS})) {
163                         $params=join(' ',@{$dh{U_PARAMS}});
164                 }       
165                 if ($params eq '') {
166                         $params="defaults";
167                 }
168                 
169                 if (! $dh{NOSCRIPTS}) {
170                         if (! $dh{NO_START}) {
171                                 # update-rc.d, and start script
172                                 autoscript($package,"postinst", "postinst-init",
173                                         "s/#SCRIPT#/$script/;s/#INITPARMS#/$params/;s/#ERROR_HANDLER#/$dh{ERROR_HANDLER}/");
174                         
175                                 if ($dh{R_FLAG}) {
176                                         # stops script only on remove
177                                         autoscript($package,"prerm","prerm-init-norestart",
178                                                 "s/#SCRIPT#/$script/;s/#INITPARMS#/$params/;s/#ERROR_HANDLER#/$dh{ERROR_HANDLER}/");
179                                 }
180                                 else {
181                                         # always stops script
182                                         autoscript($package,"prerm","prerm-init",
183                                                 "s/#SCRIPT#/$script/;s/#INITPARMS#/$params/;s/#ERROR_HANDLER#/$dh{ERROR_HANDLER}/");
184                                 }
185                         }
186                         else {
187                                 # just update-rc.d
188                                 autoscript($package,"postinst", "postinst-init-nostart",
189                                         "s/#SCRIPT#/$script/;s/#INITPARMS#/$params/;s/#ERROR_HANDLER#/$dh{ERROR_HANDLER}/");
190                         }
191
192                         # removes rc.d links
193                         autoscript($package,"postrm","postrm-init",
194                                 "s/#SCRIPT#/$script/;s/#INITPARMS#/$params/;s/#ERROR_HANDLER#/$dh{ERROR_HANDLER}/");
195                 }
196         }
197 }
198
199 =head1 SEE ALSO
200
201 L<debhelper(7)>
202
203 This program is a part of debhelper.
204
205 =head1 AUTHOR
206
207 Joey Hess <joeyh@debian.org>
208
209 =cut