2016-08-18 98 views
2

我正在创建一个包含标准配方和我的拥有者的映像。我想列出所有包含的软件包中使用的许可证,然后检查我是否可以将它们用于商业应用。Yocto上软件包和映像的许可证

我有不好的惊喜packagegroups已经有一个许可证标志。我注意到它做:

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

它返回LICENSE = MIT,因为它是在BB文件中定义。

但我没有关于所有包含的信息。这麻省理工学院已被手动放在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 我编辑元/类/ license.bbclass并加入

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

为check_license_format功能的回路。现在,它打印许可为每个包,但我想有几分总结

好办法做到这一点

所以,我无法编译我的整个配方自从“包管理“功能目前不能与deb软件包一起使用(请参阅here)。 请改编你的图像配方,并在那里使用@Roman Khimov的方法。这是干净的方式。

回答

8

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

例如,如果我建立core-image-minimal为我自己的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+ 
... 
+0

有没有一种方法,使其与干运行(-n,我测试过,没有得到许可工作.manifest)? –

+0

@DavidBensoussan:不要这么想,因为'license_create_manifest()'从ROOTFS_POSTPROCESS_COMMAND运行,并且在rootfs创建阶段。此外,从理论上讲,由于至少包含动态包,因此在构建映像之前,您无法构建完整的软件包和许可证列表。 –