update-rc.d class
Services which need to be started during boot need to be registered
using the update-rc.d command. These services are required to have an init
script which is installed into /etc/init.d that can be
used to start and stop the service.
The following examples show a service being manually stopped and
started using it's init script:root@titan:/etc# /etc/init.d/syslog stop
Stopping syslogd/klogd: stopped syslogd (pid 1551).
stopped klogd (pid 1553).
done
root@titan:/etc# /etc/init.d/syslog start
Starting syslogd/klogd: done
root@titan:/etc#The update-rc.d class takes care of the following
automatically:
Registers the service with the system during postinst so it will
be automatically started on boot;
Stops the service during prerm so it will no longer be running
after being removed;
Unregisters the service during prerm so there will be no attempts
to start the removed service during boot;
Adds a build and run time dependency on the update-rc.d package
which it uses to register and unregister the services.
Usage is very simple, as shown by this example from dropbear:INITSCRIPT_NAME = "dropbear"
INITSCRIPT_PARAMS = "defaults 10"
inherit autotools update-rc.d
where the variables are:
INITSCRIPT_NAME
The name of the init script, which the package will have
installed into /etc/init.d
INITSCRIPT_PARAMS
The parameters to pass to the update-rc.d call during
installation. Typically this will be the work default followed by
either single number or a pair of numbers representing the start/stop
sequence number (both are set to the same if only one number is
supplied.)
The help from update-rc.d shows show the required parameters:root@titan:/etc# update-rc.d -h
usage: update-rc.d [-n] [-f] [-r <root>] <basename> remove
update-rc.d [-n] [-r <root>] [-s] <basename> defaults [NN | sNN kNN]
update-rc.d [-n] [-r <root>] [-s] <basename> start|stop NN runlvl [runlvl] [...] .
-n: not really
-f: force
-r: alternate root path (default is /)
-s: invoke start methods if appropriate to current runlevel
root@titan:/etc#The start and stop sequence numbers need to ensure
that the the service is started at the appropriate time relative to other
services, such as waiting for any service that it depends on before starting
(networking for example). Unless the service is a system or security related
service it's better to be started as late as possible.
Multiple update-rc.d packages
Defining multiple init scripts within the one recipe is also
supported. Note that each init script must be in it's own package. The
following example is from the quagga recipe:# Main init script starts all deamons
# Seperate init script for watchquagga
INITSCRIPT_PACKAGES = "${PN} ${PN}-watchquagga"
INITSCRIPT_NAME_${PN} = "quagga"
INITSCRIPT_PARAMS_${PN} = "defaults 15 85"
INITSCRIPT_NAME_${PN}-watchquagga = "watchquagga"
INITSCRIPT_PARAMS_${PN}-watchquagga = "defaults 90 10"
inherit autotools update-rc.d The variables that need to be declared
are:
INITSCRIPT_PACKAGES
The names of each package which includes an init
script.
INITSCRIPT_NAME_x
The same meaning as INITSCRIPT_NAME, but for the package x.
This would be repeated for each package that includes an init
script.
INITSCRIPT_PARAMS_x
The same meaning as INITSCRIPT_PARAMS, but for the package x.
This would be repeated for each package that includes an init
script.