Yocto上软件包组和镜像的许可证

6
我正在创建一张包含标准食谱和自己的食谱的图片。我想列出所有包含程序的许可证,并在以后检查它们是否可以用于商业应用,例如。但是,我发现不好的消息是packagegroups已经有了LICENSE标志。我通过以下方式发现了这一点:
bitbake -e -n -v core-image-minimal | grep "LICENSE"

由于在bb文件中定义了,它返回 LICENSE=MIT

但是我没有关于所有包含软件包的信息。这个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软件包(请阅读此处),我无法编译整个配方。请调整您的镜像配方,并使用@Roman Khimov下面提供的方法。这是一个干净利落的做法。
1个回答

16

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

例如,如果我为自己的generic-amd64 MACHINE构建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+
...

有没有办法让它在模拟运行时工作(-n,我测试了,没有license.manifest)? - David Bensoussan
@DavidBensoussan:我认为不是这样的,因为license_create_manifest()是从ROOTFS_POSTPROCESS_COMMAND运行的,而这是在rootfs创建阶段。此外,理论上,你无法在构建镜像之前构建完整的软件包和许可证列表,因为至少存在动态软件包。 - Roman Khimov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接