Direkt zum Hauptbereich

Finding the culprit

Working in an environment with license restrictions is always a bit challenging.
Recently while migrating a larger code base I encountered the following error message 

1
 Package gawk cannot be installed into the image because it has incompatible license(s): GPL-3.0

hummmm, where is that actually coming from? - a quick grep through my image recipes didn't reveal anything, so it has to be something pulled in by one of the packages or even further down the line.

All the package data is available in a human readable format within your workspace, still it's hard to track the relations for the above mentioned issues...

So I decided to write a small script which turns this into small and way better understandable trees in the console...

Et voila, I present to you dot2tree, a small script which can turn different bitbake related sources into tree printouts in your console.

Let's give it a try with the above shown error.
As we all know, bitbake/poky creates an image manifest, which holds the information about all the packages installed to an image, plus we know where we want to end our search (in this case gawk).
(just to be clear all the script does is to create a tree and print the branches between root and end node, so in this case our image manifest provides the root node(s) and the gawk the where we want to end our search)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
 ./dot2tree --mode=pkgdepend build/tmp/deploy/licenses/core-image-foo/package.manifest gawk build/tmp/pkgdata/foo/runtime-reverse
 packagegroup-core-full-cmdline
 ├── packagegroup-core-full-cmdline-utils
 │   └── gawk
 └── packagegroup-core-full-cmdline-initscripts
     └── syslog-ng
         └── gawk
 packagegroup-foo-core
 └── syslog-ng
     └── gawk
 syslog-ng
 └── gawk

so that is information I can work with - a quick jump into the syslog-ng recipe revealed that some (more or less optional scripts) are using awk as an interpreter... I just removed them via an

1
2
3
 do_install_append() {
    find ${D} -name "*.awk" -type f -exec rm -f {} \;
 }

as was as gawk-free as I could be😁 (and was able to assemble my above mentioned image, totally compliant in terms of licensing)

The script is freely available to anyone of you in case you're facing similar problems.

Kommentare

Beliebte Posts aus diesem Blog

Speedup python on embedded systems

Have you ever considered to use python as a scripting language in an embedded system? I've been using this on recent projects although it wasn't my first choice. If I had to choose a scripting language to be used in embedded I always had a strong preference for shell/bash or lua, because they are either builtin or designed to have a significant lower footprint compared to others. Nevertheless the choice was python3 (was out of my hands to decide). When putting together the first builds using YOCTO I realized that there are two sides to python. the starting phase, where the app is initializing the execution phase, where the app just processes new data In the 2nd phase python3 has good tradeoffs between maintainability of code vs. execution speed, so there is nothing to moan about. Startup is the worst But the 1st phase where the python3-interpreter is starting is really bad. So I did some research where is might be coming from. Just to give a comparison of ...

Using bbclass based on conditions

When you are working with YOCTO build system, you might be aware of the construct .bbclass. For those who are not: these are code snippets which will be injected into the recipe itself. Mostly they add new tasks or provide some generalization for things you often. A good example might be pypi.bbclass. In your recipe you write usually something likes this SRC_URI = "https://www.foo.org/foo.tar.gz" When it comes to python packages a way more elegant way is to use pypi.org . And here does the pypi.bbclass provide some magic - you recipe will just look like this inherit pypi   PYPI_PACKAGE = "foo" the bbclass pypi will automatically translate the variable name PYPI_PACKAGE into a valid URL to fetch the package. Also it will set some internal variables such as HOMEPAGE or S to the correct settings. You see life can be convenient when you know how to do it. If you want to apply a bbclass you can either insert inherit foo.bbclass into each recipe or you...

Static analysis tool: cppcheck

This post shall be the start of a loose series on static code analysis tools that I've been using when professionally coding. The tools should be compared against the same code base, so that one could get an impression what the benefits and flaws of a certain tool are. Please put your questions/suggestions into the comments. Today's tool should be cppcheck . Supported Languages C C++ Dependencies (besides gcc) libprce Special features custom rules for checking can be applied as prce-compatible regular expressions Testing Under test shall be the unmodified code of busybox version 1.29.2 as to be found as yocto-poky layer at gitrev 3541f019a505d18263fad0b46b88d470e3fd9d62. As configuration for yocto the standard configuration is used. cppcheck is used in version 1.87 Number of total findings in code : 308 Number of different finding types : 26 Findings in details class vs. count nullPointer 3 memleakOnRealloc ...