我正在创建一个包含标准食谱和我自己的图像。我想列出我在所有包含的包中使用的许可证,然后检查我是否可以将它们用于商业应用程序。
我有一个糟糕的惊喜包组已经有一个 LICENSE 标志。我注意到它在做:
bitbake -e -n -v core-image-minimal | grep "LICENSE"
它返回 LICENSE=MIT 因为它是在 bb 文件中定义的。
但我没有关于所有包含的包的信息。这个 MIT 已经手动放在 core-image-minimal.bb 中,但我对所有依赖项感兴趣。我的 .bb 文件也有同样的问题。
方法 1
一种解决方案是将每个许可证都设置为 INCOMPATIBLE_LICENSE 然后
bitbake -k -n -e -v <recipe> | grep "incompatible with license"
然后检查哪一个弹出,将它们添加到 LICENSE_FLAGS_WHITELIST 并从 INCOMPATIBLE_LICENSE 中删除它们并迭代。问题是,每次完成后,它都会再次解析整个工作区,这需要很长时间。
是否有脚本可以轻松检查?像 Yocto 这样的 python 总是如此。
方法 2
我编辑了 meta/classes/license.bbclass 并添加了
bb.warn('%s license is %s' %(pn, licenses))
在 check_license_format 函数的 for 循环中。现在它为每个包打印许可证,但我想总结一下
这样做的好方法
所以,我无法编译我的整个配方,因为“包管理”功能目前不适用于 deb 包(阅读 here )。
请调整您的图像配方并在那里使用@Roman Khimov 的方法。这是做到这一点的干净方式。
最佳答案
您不需要做任何特别的事情,只需构建您的图像并在 build/tmp/deploy/licenses/$IMAGE_NAME-$MACHINE-$DATE/license.manifest
中查看生成的 list 文件(当然,如果您没有重新定义 LICENSE_DIRECTORY
)。
例如,如果我为自己的 core-image-minimal
MACHINE 构建 generic-amd64
,则会在 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+
...
关于licensing - Yocto 上的软件包组和图像的许可证,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39018941/