1
0
mirror of https://git.yoctoproject.org/poky synced 2026-06-03 01:40:07 +00:00

manuals: expand init manager documentation

- Add details about INIT_MANAGER
  Correct the fact that "none" currently generates
  an image with "sysvinit", at least on Poky.
  This behaviour should probably be changed.

- Expand the "Selecting an Initialization Manager" section.

- Stop mentioning "rescue image" generation, as this
  is not detailed anywhere else.

(From yocto-docs rev: fd99f2753b50b7ad6133b787b90331fcb3a35152)

Signed-off-by: Michael Opdenacker <michael.opdenacker@bootlin.com>
CC: Paul Eggleton <bluelightning@bluelightning.org>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Michael Opdenacker
2023-04-27 17:30:05 +02:00
committed by Richard Purdie
parent 4a1c9c4eb1
commit 2c2ab20c21
3 changed files with 98 additions and 43 deletions
@@ -1,5 +1,7 @@
.. SPDX-License-Identifier: CC-BY-SA-2.0-UK .. SPDX-License-Identifier: CC-BY-SA-2.0-UK
.. _device-manager:
Selecting a Device Manager Selecting a Device Manager
************************** **************************
+72 -36
View File
@@ -1,71 +1,107 @@
.. SPDX-License-Identifier: CC-BY-SA-2.0-UK .. SPDX-License-Identifier: CC-BY-SA-2.0-UK
.. _init-manager:
Selecting an Initialization Manager Selecting an Initialization Manager
*********************************** ***********************************
By default, the Yocto Project uses SysVinit as the initialization By default, the Yocto Project uses :wikipedia:`SysVinit <Init#SysV-style>` as
manager. However, there is also support for systemd, which is a full the initialization manager. There is also support for BusyBox init, a simpler
replacement for init with parallel starting of services, reduced shell implementation, as well as support for :wikipedia:`systemd <Systemd>`, which
overhead and other features that are used by many distributions. 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 treats system components as services. These Within the system, SysVinit and BusyBox init treat system components as
services are maintained as shell scripts stored in the ``/etc/init.d/`` services. These services are maintained as shell scripts stored in the
directory. Services organize into different run levels. This ``/etc/init.d/`` directory.
organization is maintained by putting links to the services in the
``/etc/rcN.d/`` directories, where `N/` is one of the following options: SysVinit is more elaborate than BusyBox init and organizes services in
"S", "0", "1", "2", "3", "4", "5", or "6". 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:: .. note::
Each runlevel has a dependency on the previous runlevel. This Each runlevel has a dependency on the previous runlevel. This
dependency allows the services to work properly. 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 In comparison, systemd treats components as units. Using units is a
broader concept as compared to using a service. A unit includes several broader concept as compared to using a service. A unit includes several
different types of entities. Service is one of the types of entities. different types of entities. ``Service`` is one of the types of entities.
The runlevel concept in SysVinit corresponds to the concept of a target The runlevel concept in SysVinit corresponds to the concept of a target
in systemd, where target is also a type of supported unit. in systemd, where target is also a type of supported unit.
In a SysVinit-based system, services load sequentially (i.e. one by one) In systems with SysVinit or BusyBox init, services load sequentially (i.e. one
during init and parallelization is not supported. With systemd, services by one) during init and parallelization is not supported. With systemd, services
start in parallel. Needless to say, the method can have an impact on start in parallel. This method can have an impact on the startup performance
system 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.
If you want to use SysVinit, you do not have to do anything. But, if you On the contrary, BusyBox init is the simplest and the lightest solution and
want to use systemd, you must take some steps as described in the also comes with BusyBox mdev as device manager, a lighter replacement to
following sections. :wikipedia:`udev <Udev>`, which SysVinit and systemd both use.
Using systemd Exclusively The ":ref:`device-manager`" chapter has more details about device managers.
Using SysVinit with udev
========================= =========================
Set the :term:`INIT_MANAGER` variable in your distribution configuration SysVinit with the udev device manager corresponds to the
file as follows:: 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" INIT_MANAGER = "systemd"
This will enable systemd and remove sysvinit components from the image. This will enable systemd and remove sysvinit components from the image.
See ``meta/conf/distro/include/init-manager-systemd.inc`` for exact 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. details on what this does.
Using systemd for the Main Image and Using SysVinit for the Rescue Image Controling systemd from the target command line
======================================================================== -----------------------------------------------
Set these variables in your distribution configuration file as follows:: 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:
DISTRO_FEATURES:append = " systemd" - ``systemctl status``: show the status of all services
VIRTUAL-RUNTIME_init_manager = "systemd" - ``systemctl status <service>``: show the status of one service
- ``systemctl [start|stop] <service>``: start or stop a service
Doing so causes your main image to use the - ``systemctl [enable|disable] <service>``: enable or disable a service at boot time
``packagegroup-core-boot.bb`` recipe and systemd. The rescue/minimal - ``systemctl list-units``: list all available units
image cannot use this package group. However, it can install SysVinit - ``journalctl -a``: show all logs for all services
and the appropriate packages will have support for both systemd and - ``journalctl -f``: show only the last log entries, and keep printing updates as they arrive
SysVinit. - ``journalctl -u``: show only logs from a particular service
Using systemd-journald without a traditional syslog daemon Using systemd-journald without a traditional syslog daemon
========================================================== ----------------------------------------------------------
Counter-intuitively, ``systemd-journald`` is not a syslog runtime or provider, 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 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 effectively disable syslog entirely by setting these variables in your distribution
configuration file:: configuration file::
@@ -73,5 +109,5 @@ configuration file::
VIRTUAL-RUNTIME_base-utils-syslog = "" VIRTUAL-RUNTIME_base-utils-syslog = ""
Doing so will prevent ``rsyslog`` / ``busybox-syslog`` from being pulled in by Doing so will prevent ``rsyslog`` / ``busybox-syslog`` from being pulled in by
default, leaving only ``journald``. default, leaving only ``systemd-journald``.
+24 -7
View File
@@ -3959,16 +3959,33 @@ system and gives an overview of their function and contents.
:term:`INIT_MANAGER` :term:`INIT_MANAGER`
Specifies the system init manager to use. Available options are: Specifies the system init manager to use. Available options are:
- ``sysvinit`` - System V init (default for poky) - ``sysvinit``
- ``systemd`` - systemd - ``systemd``
- ``mdev-busybox`` - mdev provided by busybox - ``mdev-busybox``
- ``none`` - no init manager - ``none``
With ``sysvinit``, the init manager is set to
:wikipedia:`SysVinit <Init#SysV-style>`, the traditional UNIX init
system. This is the default choice in the Poky distribution, together with
the Udev device manager (see the ":ref:`device-manager`" section).
With ``systemd``, the init manager becomes :wikipedia:`systemd <Systemd>`,
which comes with the :wikipedia:`udev <Udev>` device manager.
With ``mdev-busybox``, the init manager becomes the much simpler BusyBox
init, together with the BusyBox mdev device manager. This is the simplest
and lightest solution, and probably the best choice for low-end systems
with a rather slow CPU and a limited amount of RAM.
With ``none``, the init manager is also set to ``sysvinit``. This is the
default setting in OpenEmbedded-Core. This option also selects the
:wikipedia:`udev <Udev>` device manager.
More concretely, this is used to include More concretely, this is used to include
``conf/distro/include/init-manager-${INIT_MANAGER}.inc`` into the global ``conf/distro/include/init-manager-${INIT_MANAGER}.inc`` into the global
configuration. You can have a look at the ``conf/distro/include/init-manager-*.inc`` configuration. You can have a look at the
files for more information, and also the :yocto_git:`meta/conf/distro/include/init-manager-*.inc </poky/tree/meta/conf/distro/include>`
":ref:`dev-manual/init-manager:selecting an initialization manager`" files for more information, and also the ":ref:`init-manager`"
section in the Yocto Project Development Tasks Manual. section in the Yocto Project Development Tasks Manual.
:term:`INITRAMFS_DEPLOY_DIR_IMAGE` :term:`INITRAMFS_DEPLOY_DIR_IMAGE`