Difference between revisions of "Add a systemd service file into a Yocto image"

From KoanSoftware Wiki
Jump to: navigation, search
(Created page with "== Add a systemd service file into a Yocto image == During [https://koansoftware.com/training KOAN training] we use a '''meta-training''' layer to create an '''example.bb'''...")
 
(Add a systemd service file into a Yocto image)
Line 1: Line 1:
 
== Add a systemd service file into a Yocto image ==
 
== Add a systemd service file into a Yocto image ==
  
During [https://koansoftware.com/training KOAN training] we use a '''meta-training''' layer to create an '''example.bb''' recipe building a '''helloworld''' executable.
+
During [https://koansoftware.com/training KOAN training] we use a [https://github.com/koansoftware/meta-training meta-training] layer to create an '''example.bb''' recipe building a '''helloworld''' executable.
  
 
In this article we want to create a recipe to add a systemd service file that starts such '''helloworld''' executable.
 
In this article we want to create a recipe to add a systemd service file that starts such '''helloworld''' executable.

Revision as of 17:17, 23 March 2021

Add a systemd service file into a Yocto image

During KOAN training we use a meta-training layer to create an example.bb recipe building a helloworld executable.

In this article we want to create a recipe to add a systemd service file that starts such helloworld executable.

Create a recipe to add a systemd service file

For the helloworld application, we don’t necessarily need a service file as this application does not provide services to other parts of this system. However, for example purposes, we will create an autostart script to run hello at boot time. The output from this invocation will be available in the systemd logs using the journalctl command. This service file can also be manually invoked at runtime.

First, we will create the service file itself which is read and processed by systemd:

mkdir -p meta-training/recipes-example/systemd/files/

Edit a new configuration file

gedit meta-training/recipes-example/systemd/files/hello.service

containing the following code

[Unit]
Description=GNU Hello World startup script for KOAN training course

[Service]
ExecStart=/usr/bin/hello

[Install]
WantedBy=multi-user.target

Now let’s add the recipe settings to integrate this into the systemd configuration for our build:


Edit a new configuration file

gedit meta-training/recipes-example/systemd/hellosystemd_1.00.bb

containing the following code

inherit systemd

SYSTEMD_AUTO_ENABLE = "enable"
SYSTEMD_SERVICE_\${PN} = "hello.service"

SRC_URI_append = " file://hello.service "
FILES_\${PN} += "\${systemd_unitdir}/system/hello.service"

do_install_append() {
  install -d \${D}/\${systemd_unitdir}/system
  install -m 0644 \${WORKDIR}/hello.service \${D}/\${systemd_unitdir}/system
}

Add the recipe to the image editing local.conf

IMAGE_INSTALL_append = " hellosystemd"

Now rebuild your image

bitbake core-image-minimal

Boot and verify that the service started and the output is visible in the systemd logs.