Yocto 上包组和图像的许可证

Licenses for packagegroups and images on Yocto

我正在创建一个图像,其中包含标准食谱和我自己的食谱。我想列出我在所有包含的软件包中使用的许可证,然后检查我是否可以将它们用于商业应用程序。

令我感到意外的是,软件包组已经有了 LICENSE 标志。我注意到它在做:

bitbake -e -n -v core-image-minimal | grep "LICENSE"

它returns LICENSE=MIT因为它在bb文件中定义了。

但是我没有关于所有包含包的信息。这个 MIT 已经手动放在 core-image-minimal.bb 中,但我会对所有依赖项感兴趣。我的 .bb 文件也有同样的问题。

方法一

一个解决方案是将每个许可证都放在 INCOMPATIBLE_LICENSE 然后

bitbake -k -n -e -v <recipe> | grep "incompatible with license"

然后检查哪一个弹出,将它们添加到 LICENSE_FLAGS_WHITELIST 并从 INCOMPATIBLE_LICENSE 中删除它们并迭代。问题是,每次完成后,它都会再次解析整个工作区,这需要很长时间。

有没有什么地方可以轻松检查的脚本? python Yocto 总是这样。

方法二 我编辑了 meta/classes/license.bbclass 并添加了

bb.warn('%s license is %s' %(pn, licenses))

在check_license_format函数的for循环中。现在它为每个包打印许可证,但我想总结一下

好方法

因此,由于 "package-management" 功能当前不适用于 deb 包(阅读 here),因此我无法编译我的整个食谱。 请调整您的图像配方并使用@Roman Khimov 的方法。这是最干净的方式。

您不需要做任何特别的事情,只需构建您的映像并在 build/tmp/deploy/licenses/$IMAGE_NAME-$MACHINE-$DATE/license.manifest 中查看生成的清单文件(当然,如果您没有重新定义 LICENSE_DIRECTORY)。

例如,如果我为自己的 generic-amd64 机器构建 core-image-minimal,我会在 build/tmp-musl/deploy/licenses/core-image-minimal-generic-amd64-20160818141324/license.manifest 中得到结果:

PACKAGE NAME: base-files
PACKAGE VERSION: 3.0.14
RECIPE NAME: base-files
LICENSE: GPLv2

PACKAGE NAME: base-passwd
PACKAGE VERSION: 3.5.29
RECIPE NAME: base-passwd
LICENSE: GPLv2+
...