163 lines
5.7 KiB
ReStructuredText
163 lines
5.7 KiB
ReStructuredText
.. SPDX-License-Identifier: CC-BY-SA-2.0-UK
|
|
|
|
.. _init-manager:
|
|
|
|
Selecting an Initialization Manager
|
|
***********************************
|
|
|
|
By default, the Yocto Project uses :wikipedia:`SysVinit <Init#SysV-style>` as
|
|
the initialization manager. There is also support for BusyBox init, a simpler
|
|
implementation, as well as support for :wikipedia:`systemd <Systemd>`, which
|
|
is a full replacement for init with parallel starting of services, reduced
|
|
shell overhead, increased security and resource limits for services, and other
|
|
features that are used by many distributions.
|
|
|
|
Within the system, SysVinit and BusyBox init treat system components as
|
|
services. These services are maintained as shell scripts stored in the
|
|
``/etc/init.d/`` directory.
|
|
|
|
SysVinit is more elaborate than BusyBox init and organizes services in
|
|
different run levels. This organization is maintained by putting links
|
|
to the services in the ``/etc/rcN.d/`` directories, where `N/` is one
|
|
of the following options: "S", "0", "1", "2", "3", "4", "5", or "6".
|
|
|
|
.. note::
|
|
|
|
Each runlevel has a dependency on the previous runlevel. This
|
|
dependency allows the services to work properly.
|
|
|
|
Both SysVinit and BusyBox init are configured through the ``/etc/inittab``
|
|
file, with a very similar syntax, though of course BusyBox init features
|
|
are more limited.
|
|
|
|
In comparison, systemd treats components as units. Using units is a
|
|
broader concept as compared to using a service. A unit includes several
|
|
different types of entities. ``Service`` is one of the types of entities.
|
|
The runlevel concept in SysVinit corresponds to the concept of a target
|
|
in systemd, where target is also a type of supported unit.
|
|
|
|
In systems with SysVinit or BusyBox init, services load sequentially (i.e. one
|
|
by one) during init and parallelization is not supported. With systemd, services
|
|
start in parallel. This method can have an impact on the startup performance
|
|
of a given service, though systemd will also provide more services by default,
|
|
therefore increasing the total system boot time. systemd also substantially
|
|
increases system size because of its multiple components and the extra
|
|
dependencies it pulls.
|
|
|
|
On the contrary, BusyBox init is the simplest and the lightest solution and
|
|
also comes with BusyBox mdev as device manager, a lighter replacement to
|
|
:wikipedia:`udev <Udev>`, which SysVinit and systemd both use.
|
|
|
|
The ":ref:`device-manager`" chapter has more details about device managers.
|
|
|
|
Using SysVinit with udev
|
|
=========================
|
|
|
|
SysVinit with the udev device manager corresponds to the
|
|
default setting in Poky. This corresponds to setting::
|
|
|
|
INIT_MANAGER = "sysvinit"
|
|
|
|
Using BusyBox init with BusyBox mdev
|
|
====================================
|
|
|
|
BusyBox init with BusyBox mdev is the simplest and lightest solution
|
|
for small root filesystems. All you need is BusyBox, which most systems
|
|
have anyway::
|
|
|
|
INIT_MANAGER = "mdev-busybox"
|
|
|
|
Using systemd
|
|
=============
|
|
|
|
The last option is to use systemd together with the udev device
|
|
manager. This is the most powerful and versatile solution, especially
|
|
for more complex systems::
|
|
|
|
INIT_MANAGER = "systemd"
|
|
|
|
This will enable systemd and remove sysvinit components from the image.
|
|
See :yocto_git:`meta/conf/distro/include/init-manager-systemd.inc
|
|
</poky/tree/meta/conf/distro/include/init-manager-systemd.inc>` for exact
|
|
details on what this does.
|
|
|
|
Controling systemd from the target command line
|
|
-----------------------------------------------
|
|
|
|
Here is a quick reference for controling systemd from the command line on the
|
|
target. Instead of opening and sometimes modifying files, most interaction
|
|
happens through the ``systemctl`` and ``journalctl`` commands:
|
|
|
|
- ``systemctl status``: show the status of all services
|
|
- ``systemctl status <service>``: show the status of one service
|
|
- ``systemctl [start|stop] <service>``: start or stop a service
|
|
- ``systemctl [enable|disable] <service>``: enable or disable a service at boot time
|
|
- ``systemctl list-units``: list all available units
|
|
- ``journalctl -a``: show all logs for all services
|
|
- ``journalctl -f``: show only the last log entries, and keep printing updates as they arrive
|
|
- ``journalctl -u``: show only logs from a particular service
|
|
|
|
Using systemd-journald without a traditional syslog daemon
|
|
----------------------------------------------------------
|
|
|
|
Counter-intuitively, ``systemd-journald`` is not a syslog runtime or provider,
|
|
and the proper way to use ``systemd-journald`` as your sole logging mechanism is to
|
|
effectively disable syslog entirely by setting these variables in your distribution
|
|
configuration file::
|
|
|
|
VIRTUAL-RUNTIME_syslog = ""
|
|
VIRTUAL-RUNTIME_base-utils-syslog = ""
|
|
|
|
Doing so will prevent ``rsyslog`` / ``busybox-syslog`` from being pulled in by
|
|
default, leaving only ``systemd-journald``.
|
|
|
|
Summary
|
|
-------
|
|
|
|
The Yocto Project supports three different initialization managers, offering
|
|
increasing levels of complexity and functionality:
|
|
|
|
.. list-table::
|
|
:widths: 40 20 20 20
|
|
:header-rows: 1
|
|
|
|
* -
|
|
- BusyBox init
|
|
- SysVinit
|
|
- systemd
|
|
* - Size
|
|
- Small
|
|
- Small
|
|
- Big [#footnote-systemd-size]_
|
|
* - Complexity
|
|
- Small
|
|
- Medium
|
|
- High
|
|
* - Support for boot profiles
|
|
- No
|
|
- Yes ("runlevels")
|
|
- Yes ("targets")
|
|
* - Services defined as
|
|
- Shell scripts
|
|
- Shell scripts
|
|
- Description files
|
|
* - Starting services in parallel
|
|
- No
|
|
- No
|
|
- Yes
|
|
* - Setting service resource limits
|
|
- No
|
|
- No
|
|
- Yes
|
|
* - Support service isolation
|
|
- No
|
|
- No
|
|
- Yes
|
|
* - Integrated logging
|
|
- No
|
|
- No
|
|
- Yes
|
|
|
|
.. [#footnote-systemd-size] Using systemd increases the ``core-image-minimal``
|
|
image size by 160\% for ``qemux86-64`` on Mickledore (4.2), compared to SysVinit.
|