5 dh_installinit - install upstart jobs or init scripts into package build directories
10 use Debian::Debhelper::Dh_Lib;
14 B<dh_installinit> [S<I<debhelper options>>] [B<--name=>I<name>] [B<-n>] [B<-R>] [B<-r>] [B<-d>] [B<-O>] [S<B<--> I<params>>]
18 dh_installinit is a debhelper program that is responsible for installing
19 upstart job files or init scripts with associated defaults files into package
20 build directories, and in the former case providing compatibility handling
21 for non-upstart systems.
23 It also automatically generates the postinst and postrm and prerm commands
24 needed to set up the symlinks in /etc/rc*.d/ and to start and stop the init
31 =item debian/I<package>.upstart
33 If this exists, it is installed into etc/init/I<package>.conf in the package
36 =item debian/I<package>.init
38 Otherwise, if this exists, it is installed
39 into etc/init.d/I<package> in the package build directory.
41 =item debian/I<package>.default
43 If this exists, it is installed into etc/default/I<package> in the package
52 =item B<-n>, B<--noscripts>
54 Do not modify postinst/postrm/prerm scripts.
56 =item B<-o>, B<--onlyscripts>
58 Only modify postinst/postrm/prerm scripts, do not actually install any init
59 script, default files, or upstart job. May be useful if the init script or
60 upstart job is shipped and/or installed by upstream in a way that doesn't
61 make it easy to let dh_installinit find it.
63 If no upstart job file is installed in the target directory when
64 dh_installinit --onlyscripts is called, this program will assume that an
65 init script is being installed and not provide the compatibility symlinks
66 or upstart dependencies.
68 =item B<-R>, B<--restart-after-upgrade>
70 Do not stop the init script until after the package upgrade has been
71 completed. This is different than the default behavior, which stops the
72 script in the prerm, and starts it again in the postinst.
74 This can be useful for daemons that should not have a possibly long
75 downtime during upgrade. But you should make sure that the daemon will not
76 get confused by the package being upgraded while it's running before using
79 =item B<-r>, B<--no-restart-on-upgrade>
81 Do not stop init script on upgrade.
85 Do not start the init script on install or upgrade, or stop it on removal.
86 Only call update-rc.d. Useful for rcS scripts.
88 =item B<-d>, B<--remove-d>
90 Remove trailing "d" from the name of the package, and use the result for the
91 filename the upstart job file is installed as in etc/init/ , or for the
92 filename the init script is installed as in etc/init.d and the default file
93 is installed as in etc/default/ . This may be useful for daemons with names
94 ending in "d". (Note: this takes precedence over the --init-script parameter
97 =item B<-u>I<params> B<--update-rcd-params=>I<params>
101 Pass "params" to L<update-rc.d(8)>. If not specified, "defaults" will be
102 passed to L<update-rc.d(8)>.
104 =item B<--name=>I<name>
106 Install the upstart job file or the init script (and default file) using the
107 filename I<name> instead of the default filename, which is the package name.
108 When this parameter is used, dh_installinit looks for and installs files
109 named debian/package.name.upstart, debian/package.name.init and
110 debian/package.name.default, instead of the usual debian/package.upstart,
111 debian/package.init and debian/package.default.
113 =item B<--init-script=>I<scriptname>
115 Use "scriptname" as the filename the init script is installed as in
116 etc/init.d/ (and also use it as the filename for the defaults file, if it
117 is installed). If you use this parameter, dh_installinit will look to see
118 if a file in the debian/ directory exists that looks like
119 "package.scriptname" and if so will install it as the init script in
120 preference to the files it normally installs.
122 This parameter is deprecated, use the --name parameter instead. This
123 parameter will be ignored completely for upstart jobs.
125 =item B<--error-handler=>I<function>
127 Call the named shell function if running the init script fails. The
128 function should be provided in the prerm and postinst scripts, before the
135 Note that this command is not idempotent. L<dh_prep(1)> should be called
136 between invocations of this command. Otherwise, it may cause multiple
137 instances of the same text to be added to maintainer scripts.
143 "no-restart-on-upgrade" => \$dh{R_FLAG},
144 "no-start" => \$dh{NO_START},
145 "R|restart-after-upgrade" => \$dh{RESTART_AFTER_UPGRADE},
146 "init-script=s" => \$dh{INIT_SCRIPT},
147 "update-rcd-params=s", => \$dh{U_PARAMS},
148 "remove-d" => \$dh{D_FLAG},
151 foreach my $package (@{$dh{DOPACKAGES}}) {
152 my $tmp=tmpdir($package);
154 # Figure out what filename to install it as.
156 my $jobfile=$package;
157 if (defined $dh{NAME}) {
158 $jobfile=$script=$dh{NAME};
160 elsif ($dh{D_FLAG}) {
161 # -d on the command line sets D_FLAG. We will
162 # remove a trailing 'd' from the package name and
163 # use that as the name.
165 if ($script=~m/(.*)d$/) {
169 warning("\"$package\" has no final d' in its name, but -d was specified.");
172 elsif ($dh{INIT_SCRIPT}) {
173 $script=$dh{INIT_SCRIPT};
179 my $job=pkgfile($package,"upstart");
180 my ($init,$default) = ('','');
182 if ($job ne '' || ($dh{ONLYSCRIPTS} && -e "$tmp/etc/init/$jobfile.conf")) {
183 if (! $dh{ONLYSCRIPTS}) {
184 if (! -d "$tmp/etc/init") {
185 doit("install","-d","$tmp/etc/init");
188 doit("install","-p","-m644",$job,"$tmp/etc/init/$jobfile.conf");
191 # ensures that our /etc/init.d/ symlink points to a valid
193 addsubstvar($package, "misc:Depends", "upstart-job");
195 if (! -d "$tmp/etc/init.d") {
196 doit("install","-d","$tmp/etc/init.d");
198 doit("ln","-sf","/lib/init/upstart-job","$tmp/etc/init.d/$jobfile");
201 $init=pkgfile($package,$script) || pkgfile($package,"init") ||
202 pkgfile($package,"init.d");
203 $default=pkgfile($package,'default');
206 if ($default ne '' && ! $dh{ONLYSCRIPTS}) {
207 if (! -d "$tmp/etc/default") {
208 doit("install","-d","$tmp/etc/default");
210 doit("install","-p","-m644",$default,"$tmp/etc/default/$script");
213 if ($init ne '' && ! $dh{ONLYSCRIPTS}) {
214 if (! -d "$tmp/etc/init.d") {
215 doit("install","-d","$tmp/etc/init.d");
218 doit("install","-p","-m755",$init,"$tmp/etc/init.d/$script");
221 if ($job ne '' || $init ne '' || $dh{ONLYSCRIPTS})
223 if (-e "$tmp/etc/init/$jobfile.conf") {
227 # This is set by the -u "foo" command line switch, it's
228 # the parameters to pass to update-rc.d. If not set,
229 # we have to say "defaults".
231 if (defined($dh{U_PARAMS})) {
232 $params=join(' ',@{$dh{U_PARAMS}});
238 if (! $dh{NOSCRIPTS}) {
239 if (! $dh{NO_START}) {
240 if ($dh{RESTART_AFTER_UPGRADE}) {
241 # update-rc.d, and restart (or
242 # start if new install) script
243 autoscript($package,"postinst", "postinst-init-restart",
244 "s/#SCRIPT#/$script/;s/#INITPARMS#/$params/;s/#ERROR_HANDLER#/$dh{ERROR_HANDLER}/");
247 # update-rc.d, and start script
248 autoscript($package,"postinst", "postinst-init",
249 "s/#SCRIPT#/$script/;s/#INITPARMS#/$params/;s/#ERROR_HANDLER#/$dh{ERROR_HANDLER}/");
252 if ($dh{R_FLAG} || $dh{RESTART_AFTER_UPGRADE}) {
253 # stops script only on remove
254 autoscript($package,"prerm","prerm-init-norestart",
255 "s/#SCRIPT#/$script/;s/#INITPARMS#/$params/;s/#ERROR_HANDLER#/$dh{ERROR_HANDLER}/");
258 # always stops script
259 autoscript($package,"prerm","prerm-init",
260 "s/#SCRIPT#/$script/;s/#INITPARMS#/$params/;s/#ERROR_HANDLER#/$dh{ERROR_HANDLER}/");
265 autoscript($package,"postinst", "postinst-init-nostart",
266 "s/#SCRIPT#/$script/;s/#INITPARMS#/$params/;s/#ERROR_HANDLER#/$dh{ERROR_HANDLER}/");
270 autoscript($package,"postrm","postrm-init",
271 "s/#SCRIPT#/$script/;s/#INITPARMS#/$params/;s/#ERROR_HANDLER#/$dh{ERROR_HANDLER}/");
280 This program is a part of debhelper.
284 Joey Hess <joeyh@debian.org>
286 Steve Langasek <steve.langasek@canonical.com>