我正在创建一张包含标准食谱和自己的食谱的图片。我想列出所有包含程序的许可证,并在以后检查它们是否可以用于商业应用,例如。但是,我发现不好的消息是packagegroups已经有了LICENSE标志。我通过以下方式发现了这一点:
在check_license_format函数的for循环中,现在它打印每个软件包的许可证,但我希望有一种总结的方式。
好的做法
所以,由于“软件包管理”功能目前不支持deb软件包(请阅读此处),我无法编译整个配方。请调整您的镜像配方,并使用@Roman Khimov下面提供的方法。这是一个干净利落的做法。
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下面提供的方法。这是一个干净利落的做法。
license_create_manifest()
是从ROOTFS_POSTPROCESS_COMMAND
运行的,而这是在rootfs创建阶段。此外,理论上,你无法在构建镜像之前构建完整的软件包和许可证列表,因为至少存在动态软件包。 - Roman Khimov