向 yocto 添加 iptables 导致镜像 do_rootfs 失败

向 yocto 添加 iptables 导致镜像 do_rootfs 失败

我的图像与内核 4.13(在 参考资料中设置local.conf)和我的所有食谱构建得很好。

当我尝试将 iptables 配方 (v1.6) 添加到我的映像时,do_rootfs 任务失败并出现以下错误:

ERROR: image-dev-0.7-r0 do_rootfs: Error executing a python function in exec_python_func() autogenerated:

The stack trace of python calls that resulted in this exception/failure was:
File: 'exec_python_func() autogenerated', lineno: 2, function: <module>
     0001:
 *** 0002:license_create_manifest(d)
     0003:
File: '/home/yocto/sources/poky/meta/classes/license.bbclass', lineno: 48, function: license_create_manifest
     0044:    pkg_dic = {}
     0045:    for pkg in sorted(image_list_installed_packages(d)):
     0046:        pkg_info = os.path.join(d.getVar('PKGDATA_DIR'),
     0047:                                'runtime-reverse', pkg)
 *** 0048:        pkg_name = os.path.basename(os.readlink(pkg_info))
     0049:
     0050:        pkg_dic[pkg_name] = oe.packagedata.read_pkgdatafile(pkg_info)
     0051:        if not "LICENSE" in pkg_dic[pkg_name].keys():
     0052:            pkg_lic_name = "LICENSE_" + pkg_name
Exception: FileNotFoundError: [Errno 2] No such file or directory: '/media/yocto/build/tmp/pkgdata/machine/runtime-reverse/kernel-4.14.1-fslc+ga4f7f0ac8250'

ERROR: image-dev-0.7-r0 do_rootfs: Function failed: license_create_manifest
ERROR: Logfile of failure stored in: /media/yocto/build/tmp/work/machine-linux-gnueabi/image-dev/0.7-r0/temp/log.do_rootfs.49245
ERROR: Task (/home/yocto/sources/meta-mymeta/recipes-images/images/image-dev.bb:do_rootfs) failed with exit code '1'

查看错误和日志时,iptables 希望安装必要的内核模块(好),但版本为 4.14-fslc(坏)。我的层中甚至没有 4.14 内核。

当我手动将内核模块配方添加到我的映像中时,会发生完全相同的事情。

所以问题是: 为什么我的 Yocto 使用 4.13 内核构建并想要安装 4.14 内核模块?

因此下一个问题: 我如何告诉 Yocto 构建并安装 4.13 内核模块?


更新1:

进一步挖掘后:让我们以模块kernel-module-x-tables为例。根据错误日志,它是为 4.14 构建并使用的。然而,查看buildlog-files,kernel-module-x-tables也是在4.13中构建的,但是这个版本即使没有使用也没有被使用。


更新2:

我已将 poky 更新到最新的 rocko 版本,并将内核升级到 4.19.13,图像在没有 iptables 的情况下工作正常。错误仍然存​​在,但略有变化。它再次尝试为某些 iptables 模块安装 4.14 内核模块,但现在4.14.24-stable.我在我们需要的另一个元层中找到了这个内核版本。

但是,它应该安装 4.19.13 模块,该模块也是由 yocto 根据构建日志构建的。

由于其他限制,我们确实需要 4.16 以上的内核。不幸的是,我们不能只使用 4.14.24。

答案1

看起来这些包没有在上游源保持同步。您的选择是找到与 4.13 兼容的软件包的源(在当前树之外,我会提供软件包选项,但您的帖子未指示目标平台),或更新到 4.14 源。

另一种选择是将 iptables 的要求恢复到 1.6 之前的版本。

相关内容