我正在创建一个包含标准食谱和我自己的图像。我想列出我在所有包含的软件包中使用的许可证,然后检查我是否可以将它们用于商业应用程序。
我有惊喜包装组已经有一个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这样的蟒蛇总是如此。
方法2 我编辑了meta / classes / license.bbclass并添加了
bb.warn('%s license is %s' %(pn, licenses))
在check_license_format函数的for循环中。现在它打印每个包的许可证,但我想总结一下
这样做的好方法
所以,我无法编译我的整个配方,因为“包管理”功能目前不适用于deb包(阅读here)。 请调整你的图像配方并使用@Roman Khimov的方法。这是干净的方式。
答案 0 :(得分:10)
您不需要做任何特别的事情,只需构建您的图片并查看build/tmp/deploy/licenses/$IMAGE_NAME-$MACHINE-$DATE/license.manifest
中生成的清单文件(当然,如果您没有重新定义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+
...