我正在创建一个包含标准食谱和我自己的图像.我想列出我在所有包含的软件包中使用的许可证,然后检查我是否可以将它们用于商业应用程序.
我有惊喜包装组已经有一个LICENSE标志.我注意到它:
bitbake -e -n -v core-image-minimal | grep "LICENSE"
Run Code Online (Sandbox Code Playgroud)
它返回LICENSE = MIT,因为它是在bb文件中定义的.
但我没有关于所有包含的信息.这个MIT已经手动放在core-image-minimal.bb中,但我对所有依赖项感兴趣.我的.bb文件有同样的问题.
方法1
解决方案是将每个许可证都设置为INCOMPATIBLE_LICENSE然后
bitbake -k -n -e -v <recipe> | grep "incompatible with license"
Run Code Online (Sandbox Code Playgroud)
然后检查哪一个弹出,将它们添加到LICENSE_FLAGS_WHITELIST中并从INCOMPATIBLE_LICENSE中删除它们并迭代.问题是,每次完成时,它再次解析整个工作区,并且需要很长时间.
是否有一个脚本可以轻松检查?像Yocto这样的蟒蛇总是如此.
方法2 我编辑了meta/classes/license.bbclass并添加了
bb.warn('%s license is %s' %(pn, licenses))
Run Code Online (Sandbox Code Playgroud)
在check_license_format函数的for循环中.现在它打印每个包的许可证,但我想总结一下
这样做的好方法
因此,我无法编译我的整个配方,因为"包管理"功能目前不适用于deb包(在此处阅读).请调整你的图像配方并使用@Roman Khimov的方法.这是干净的方式.
Rom*_*mov 11
你不需要做什么特别,只是建立你的形象,并在生成的清单文件看build/tmp/deploy/licenses/$IMAGE_NAME-$MACHINE-$DATE/license.manifest
(如果,当然,你没有重新定义LICENSE_DIRECTORY
).
例如,如果我core-image-minimal
为自己的generic-amd64
MACHINE 构建,我得到的结果是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+
...
Run Code Online (Sandbox Code Playgroud)