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:
committed by
Richard Purdie
parent
4a1c9c4eb1
commit
2c2ab20c21
@@ -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
|
||||||
**************************
|
**************************
|
||||||
|
|
||||||
|
|||||||
@@ -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``.
|
||||||
|
|
||||||
|
|||||||
@@ -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`
|
||||||
|
|||||||
Reference in New Issue
Block a user