Recipe dependent on Debian package - How should I approach? #yocto #debian


Mitch Gaines <gainesmitch2@...>
 

I have a project I am attempting to migrate from a Debian platform to Yocto. This specific project has a dependency on libsystemd-dev which is a Debian package, but it doesn't seem to build when adding a DEPENDS on "systemd" which is available on yocto. What is the best approach for migrating dependencies in this manner? I'm sure I am going to run into other projects to migrate which require Debian packages that are not directly available on Yocto. Or am I doing something wrong? See this specific example outlined below:

Below is a recipe for a Makefile C project that was mostly generated with `recipetool create`. I then added the DEPENDS on "systemd" and removed the unused tasks:
    # Recipe created by recipetool
# This is the basis of a recipe and may need further editing in order to be fully functional.
# (Feel free to remove these comments when editing.)
 
# WARNING: the following LICENSE and LIC_FILES_CHKSUM values are best guesses - it is
# your responsibility to verify that the values are complete and correct.
#
# The following license files were not able to be identified and are
# represented as "Unknown" below, you will need to check them yourself:
#   debian/copyright
LICENSE = "Unknown"
LIC_FILES_CHKSUM = "file://debian/copyright;md5=some-hash"
 
SRC_URI = "git://git@...;protocol=ssh"
 
# Modify these as desired
PV = "1.0+git${SRCPV}"
SRCREV = "<...>"
 
S = "${WORKDIR}/git"
DEPENDS = "systemd"
 
# NOTE: this is a Makefile-only piece of software, so we cannot generate much of the
# recipe automatically - you will need to examine the Makefile yourself and ensure
# that the appropriate arguments are passed in.
 
 
do_compile () {
    oe_runmake my-project
}
Whenever I bitbake this recipe, I get the following:


NOTE: Executing Tasks ERROR: <recipe-name> do_compile: oe_runmake failed ERROR: <recipe-name> do_compile: Execution of '/home/mitch/bin/yocto/project-name/build/tmp/work/armv7vet2hf-neon-poky-linux-gnueabi/recipe-name/1.0+gitAUTOINC+...-r0/temp/run.do_compile.13271' failed with exit code 1: make[1]: Entering directory '/home/mitch/bin/yocto/project-name/build/tmp/work/armv7vet2hf-neon-poky-linux-gnueabi/recipe-name/1.0+gitAUTOINC+...-r0/git/src/core' CC file-name.c ../file-name.c:6:10: fatal error: systemd/sd-daemon.h: No such file or directory 6 | #include <systemd/sd-daemon.h> | ^~~~~~~~~~~~~~~~~~~~~ compilation terminated. make[1]: *** [Makefile:93: build/file-name.o] Error 1 make[1]: Leaving directory '/home/mitch/bin/yocto/project-name/build/tmp/work/armv7vet2hf-neon-poky-linux-gnueabi/recipe-name/1.0+gitAUTOINC+...-r0/git/src/core' make: *** [Makefile:72: some-recipe] Error 2 WARNING: exit code 1 from a shell command. ERROR: Logfile of failure stored in: /home/mitch/bin/yocto/project-name/build/tmp/work/armv7vet2hf-neon-poky-linux-gnueabi/recipe-name/1.0+gitAUTOINC+...-r0/temp/log.do_compile.13271 Log data follows: | DEBUG: Executing shell function do_compile | NOTE: make -j 24 my-project | make[1]: Entering directory '/home/mitch/bin/yocto/project-name/build/tmp/work/armv7vet2hf-neon-poky-linux-gnueabi/recipe-name/1.0+gitAUTOINC+...-r0/git/src/core' | CC my-file.c | ../my-file.c:6:10: fatal error: systemd/sd-daemon.h: No such file or directory | 6 | #include <systemd/sd-daemon.h> | | ^~~~~~~~~~~~~~~~~~~~~ | compilation terminated. | make[1]: *** [Makefile:93: build/my-file.o] Error 1 | make[1]: Leaving directory '/home/mitch/bin/yocto/project-name/build/tmp/work/armv7vet2hf-neon-poky-linux-gnueabi/recipe-name/1.0+gitAUTOINC+...-r0/git/src/core' | make: *** [Makefile:72: my-project] Error 2 | ERROR: oe_runmake failed | WARNING: exit code 1 from a shell command. | ERROR: Execution of '/home/mitch/bin/yocto/project-name/build/tmp/work/armv7vet2hf-neon-poky-linux-gnueabi/recipe-name/1.0+gitAUTOINC+...-r0/temp/run.do_compile.13271' failed with exit code 1: | make[1]: Entering directory '/home/mitch/bin/yocto/project-name/build/tmp/work/armv7vet2hf-neon-poky-linux-gnueabi/recipe-name/1.0+gitAUTOINC+...-r0/git/src/core' | CC my-file.c | ../my-file.c:6:10: fatal error: systemd/sd-daemon.h: No such file or directory | 6 | #include <systemd/sd-daemon.h>


Am I doing anything overtly wrong here? Would appreciate any assistance you can provide.

Thanks!


William Huang
 

Hi Mitch,
You can get systemd into your image... refer to the mega-manual:
https://www.yoctoproject.org/docs/current/mega-manual/mega-manual.html#using-systemd-exclusively
Hopefully this resolves your issue.

- William Huang

On Mon, Jul 26, 2021 at 9:30 AM Mitch Gaines <gainesmitch2@gmail.com> wrote:

I have a project I am attempting to migrate from a Debian platform to Yocto. This specific project has a dependency on libsystemd-dev which is a Debian package, but it doesn't seem to build when adding a DEPENDS on "systemd" which is available on yocto. What is the best approach for migrating dependencies in this manner? I'm sure I am going to run into other projects to migrate which require Debian packages that are not directly available on Yocto. Or am I doing something wrong? See this specific example outlined below:

Below is a recipe for a Makefile C project that was mostly generated with `recipetool create`. I then added the DEPENDS on "systemd" and removed the unused tasks:
# Recipe created by recipetool
# This is the basis of a recipe and may need further editing in order to be fully functional.
# (Feel free to remove these comments when editing.)

# WARNING: the following LICENSE and LIC_FILES_CHKSUM values are best guesses - it is
# your responsibility to verify that the values are complete and correct.
#
# The following license files were not able to be identified and are
# represented as "Unknown" below, you will need to check them yourself:
# debian/copyright
LICENSE = "Unknown"
LIC_FILES_CHKSUM = "file://debian/copyright;md5=some-hash"

SRC_URI = "git://git@my-project.git;protocol=ssh"

# Modify these as desired
PV = "1.0+git${SRCPV}"
SRCREV = "<...>"

S = "${WORKDIR}/git"
DEPENDS = "systemd"

# NOTE: this is a Makefile-only piece of software, so we cannot generate much of the
# recipe automatically - you will need to examine the Makefile yourself and ensure
# that the appropriate arguments are passed in.


do_compile () {
oe_runmake my-project
}
Whenever I bitbake this recipe, I get the following:


NOTE: Executing Tasks ERROR: <recipe-name> do_compile: oe_runmake failed ERROR: <recipe-name> do_compile: Execution of '/home/mitch/bin/yocto/project-name/build/tmp/work/armv7vet2hf-neon-poky-linux-gnueabi/recipe-name/1.0+gitAUTOINC+...-r0/temp/run.do_compile.13271' failed with exit code 1: make[1]: Entering directory '/home/mitch/bin/yocto/project-name/build/tmp/work/armv7vet2hf-neon-poky-linux-gnueabi/recipe-name/1.0+gitAUTOINC+...-r0/git/src/core' CC file-name.c ../file-name.c:6:10: fatal error: systemd/sd-daemon.h: No such file or directory 6 | #include <systemd/sd-daemon.h> | ^~~~~~~~~~~~~~~~~~~~~ compilation terminated. make[1]: *** [Makefile:93: build/file-name.o] Error 1 make[1]: Leaving directory '/home/mitch/bin/yocto/project-name/build/tmp/work/armv7vet2hf-neon-poky-linux-gnueabi/recipe-name/1.0+gitAUTOINC+...-r0/git/src/core' make: *** [Makefile:72: some-recipe] Error 2 WARNING: exit code 1 from a shell command. ERROR: Logfile of failure stored in: /home/mitch/bin/yocto/project-name/build/tmp/work/armv7vet2hf-neon-poky-linux-gnueabi/recipe-name/1.0+gitAUTOINC+...-r0/temp/log.do_compile.13271 Log data follows: | DEBUG: Executing shell function do_compile | NOTE: make -j 24 my-project | make[1]: Entering directory '/home/mitch/bin/yocto/project-name/build/tmp/work/armv7vet2hf-neon-poky-linux-gnueabi/recipe-name/1.0+gitAUTOINC+...-r0/git/src/core' | CC my-file.c | ../my-file.c:6:10: fatal error: systemd/sd-daemon.h: No such file or directory | 6 | #include <systemd/sd-daemon.h> | | ^~~~~~~~~~~~~~~~~~~~~ | compilation terminated. | make[1]: *** [Makefile:93: build/my-file.o] Error 1 | make[1]: Leaving directory '/home/mitch/bin/yocto/project-name/build/tmp/work/armv7vet2hf-neon-poky-linux-gnueabi/recipe-name/1.0+gitAUTOINC+...-r0/git/src/core' | make: *** [Makefile:72: my-project] Error 2 | ERROR: oe_runmake failed | WARNING: exit code 1 from a shell command. | ERROR: Execution of '/home/mitch/bin/yocto/project-name/build/tmp/work/armv7vet2hf-neon-poky-linux-gnueabi/recipe-name/1.0+gitAUTOINC+...-r0/temp/run.do_compile.13271' failed with exit code 1: | make[1]: Entering directory '/home/mitch/bin/yocto/project-name/build/tmp/work/armv7vet2hf-neon-poky-linux-gnueabi/recipe-name/1.0+gitAUTOINC+...-r0/git/src/core' | CC my-file.c | ../my-file.c:6:10: fatal error: systemd/sd-daemon.h: No such file or directory | 6 | #include <systemd/sd-daemon.h>


Am I doing anything overtly wrong here? Would appreciate any assistance you can provide.

Thanks!


Mitch Gaines <gainesmitch2@...>
 

So, that is something I already have. What I really need are the systemd header files in order to build my recipe. Looks like the log output didn't format well. Let me re-post that below with some better formatting and you'll see what I'm referring to. How can I get those header files to build with my project? I thought just adding it as a DEPENDS would do it, but that doesn't seem to be the case.

NOTE: Executing Tasks
ERROR: <recipe-name> do_compile: oe_runmake failed
ERROR: <recipe-name> do_compile: Execution of '/home/mitch/bin/yocto/project-name/build/tmp/work/armv7vet2hf-neon-poky-linux-gnueabi/recipe-name/1.0+gitAUTOINC+...-r0/temp/run.do_compile.13271' failed with exit code 1:
make[1]: Entering directory '/home/mitch/bin/yocto/project-name/build/tmp/work/armv7vet2hf-neon-poky-linux-gnueabi/recipe-name/1.0+gitAUTOINC+...-r0/git/src/core'
CC file-name.c
../file-name.c:6:10: fatal error: systemd/sd-daemon.h: No such file or directory
    6 | #include <systemd/sd-daemon.h>
      |          ^~~~~~~~~~~~~~~~~~~~~
compilation terminated.
make[1]: *** [Makefile:93: build/file-name.o] Error 1
make[1]: Leaving directory '/home/mitch/bin/yocto/project-name/build/tmp/work/armv7vet2hf-neon-poky-linux-gnueabi/recipe-name/1.0+gitAUTOINC+...-r0/git/src/core'
make: *** [Makefile:72: some-recipe] Error 2
WARNING: exit code 1 from a shell command.

ERROR: Logfile of failure stored in: /home/mitch/bin/yocto/project-name/build/tmp/work/armv7vet2hf-neon-poky-linux-gnueabi/recipe-name/1.0+gitAUTOINC+...-r0/temp/log.do_compile.13271
Log data follows:
| DEBUG: Executing shell function do_compile
| NOTE: make -j 24 my-project
| make[1]: Entering directory '/home/mitch/bin/yocto/project-name/build/tmp/work/armv7vet2hf-neon-poky-linux-gnueabi/recipe-name/1.0+gitAUTOINC+...-r0/git/src/core'
| CC my-file.c
| ../my-file.c:6:10: fatal error: systemd/sd-daemon.h: No such file or directory
|     6 | #include <systemd/sd-daemon.h>
|       |          ^~~~~~~~~~~~~~~~~~~~~
| compilation terminated.
| make[1]: *** [Makefile:93: build/my-file.o] Error 1
| make[1]: Leaving directory '/home/mitch/bin/yocto/project-name/build/tmp/work/armv7vet2hf-neon-poky-linux-gnueabi/recipe-name/1.0+gitAUTOINC+...-r0/git/src/core'
| make: *** [Makefile:72: my-project] Error 2
| ERROR: oe_runmake failed
| WARNING: exit code 1 from a shell command.
| ERROR: Execution of '/home/mitch/bin/yocto/project-name/build/tmp/work/armv7vet2hf-neon-poky-linux-gnueabi/recipe-name/1.0+gitAUTOINC+...-r0/temp/run.do_compile.13271' failed with exit code 1:
| make[1]: Entering directory '/home/mitch/bin/yocto/project-name/build/tmp/work/armv7vet2hf-neon-poky-linux-gnueabi/recipe-name/1.0+gitAUTOINC+...-r0/git/src/core'
| CC my-file.c
| ../my-file.c:6:10: fatal error: systemd/sd-daemon.h: No such file or directory
|     6 | #include <systemd/sd-daemon.h>
|       |          ^~~~~~~~~~~~~~~~~~~~~
| compilation terminated.
| make[1]: *** [Makefile:93: build/my-file.o] Error 1
| make[1]: Leaving directory '/home/mitch/bin/yocto/project-name/build/tmp/work/armv7vet2hf-neon-poky-linux-gnueabi/recipe-name/1.0+gitAUTOINC+...-r0/git/src/core'
| make: *** [Makefile:72: my-recipe] Error 2
| WARNING: exit code 1 from a shell command.
| 
ERROR: Task (/home/mitch/bin/yocto/project-name/layers/meta-project/recipes-main/my-recipe/my-recipe_git.bb:do_compile) failed with exit code '1'
NOTE: Tasks Summary: Attempted 2166 tasks of which 2163 didn't need to be rerun and 1 failed.


Khem Raj
 

On 7/26/21 7:07 AM, Mitch Gaines wrote:
So, that is something I already have. What I really need are the systemd header files in order to build my recipe. Looks like the log output didn't format well. Let me re-post that below with some better formatting and you'll see what I'm referring to. How can I get those header files to build with my project? I thought just adding it as a DEPENDS would do it, but that doesn't seem to be the case.
|NOTE: Executing Tasks ERROR: <recipe-name> do_compile: oe_runmake failed ERROR: <recipe-name> do_compile: Execution of '/home/mitch/bin/yocto/project-name/build/tmp/work/armv7vet2hf-neon-poky-linux-gnueabi/recipe-name/1.0+gitAUTOINC+...-r0/temp/run.do_compile.13271' failed with exit code 1: make[1]: Entering directory '/home/mitch/bin/yocto/project-name/build/tmp/work/armv7vet2hf-neon-poky-linux-gnueabi/recipe-name/1.0+gitAUTOINC+...-r0/git/src/core' CC file-name.c ../file-name.c:6:10: fatal error: systemd/sd-daemon.h: No such file or directory 6 | #include <systemd/sd-daemon.h> |
Please post full compiler cmdline, it will show what all include paths are specified.

If systemd is added to DEPENDS and also ensure you are using systemd for init system as well.

Search for sd-daemon.h in
/home/mitch/bin/yocto/project-name/build/tmp/work/armv7vet2hf-neon-poky-linux-gnueabi/recipe-name/1.0+gitAUTOINC+...-r0/

I wonder if it got staged into recipe specific sysroot or not.


^~~~~~~~~~~~~~~~~~~~~ compilation terminated. make[1]: *** [Makefile:93: build/file-name.o] Error 1 make[1]: Leaving directory '/home/mitch/bin/yocto/project-name/build/tmp/work/armv7vet2hf-neon-poky-linux-gnueabi/recipe-name/1.0+gitAUTOINC+...-r0/git/src/core' make: *** [Makefile:72: some-recipe] Error 2 WARNING: exit code 1 from a shell command. ERROR: Logfile of failure stored in: /home/mitch/bin/yocto/project-name/build/tmp/work/armv7vet2hf-neon-poky-linux-gnueabi/recipe-name/1.0+gitAUTOINC+...-r0/temp/log.do_compile.13271 Log data follows: | DEBUG: Executing shell function do_compile | NOTE: make -j 24 my-project | make[1]: Entering directory '/home/mitch/bin/yocto/project-name/build/tmp/work/armv7vet2hf-neon-poky-linux-gnueabi/recipe-name/1.0+gitAUTOINC+...-r0/git/src/core' | CC my-file.c | ../my-file.c:6:10: fatal error: systemd/sd-daemon.h: No such file or directory | 6 | #include <systemd/sd-daemon.h> | | ^~~~~~~~~~~~~~~~~~~~~ | compilation terminated. | make[1]: *** [Makefile:93: build/my-file.o] Error 1 | make[1]: Leaving directory '/home/mitch/bin/yocto/project-name/build/tmp/work/armv7vet2hf-neon-poky-linux-gnueabi/recipe-name/1.0+gitAUTOINC+...-r0/git/src/core' | make: *** [Makefile:72: my-project] Error 2 | ERROR: oe_runmake failed | WARNING: exit code 1 from a shell command. | ERROR: Execution of '/home/mitch/bin/yocto/project-name/build/tmp/work/armv7vet2hf-neon-poky-linux-gnueabi/recipe-name/1.0+gitAUTOINC+...-r0/temp/run.do_compile.13271' failed with exit code 1: | make[1]: Entering directory '/home/mitch/bin/yocto/project-name/build/tmp/work/armv7vet2hf-neon-poky-linux-gnueabi/recipe-name/1.0+gitAUTOINC+...-r0/git/src/core' | CC my-file.c | ../my-file.c:6:10: fatal error: systemd/sd-daemon.h: No such file or directory | 6 | #include <systemd/sd-daemon.h> | | ^~~~~~~~~~~~~~~~~~~~~ | compilation terminated. | make[1]: *** [Makefile:93: build/my-file.o] Error 1 | make[1]: Leaving directory '/home/mitch/bin/yocto/project-name/build/tmp/work/armv7vet2hf-neon-poky-linux-gnueabi/recipe-name/1.0+gitAUTOINC+...-r0/git/src/core' | make: *** [Makefile:72: my-recipe] Error 2 | WARNING: exit code 1 from a shell command. | ERROR: Task (/home/mitch/bin/yocto/project-name/layers/meta-project/recipes-main/my-recipe/my-recipe_git.bb:do_compile) failed with exit code '1' NOTE: Tasks Summary: Attempted 2166 tasks of which 2163 didn't need to be rerun and 1 failed.|