私のイメージは、カーネル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カーネルすらありません。
Kernel-module-recipesを手動でイメージに追加すると、まったく同じことが起こります。
したがって、質問は次のとおりです。4.13カーネルビルドのYoctoが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モジュールをインストールする必要があります。これも、build-logに従ってyoctoによってビルドされます。
他の制約のため、4.16を超えるカーネルが本当に必要です。残念ながら、4.14.24だけを使用することはできません。
パッケージがアップストリームソースで同期されていなかったように見えます。あなたのオプションは、4.13と互換性のあるパッケージのソース(現在のツリーの外で、パッケージオプションを提供しますが、あなたの投稿はターゲットプラットフォームを示していません)を見つけるか、4.14ソースに更新することです。
もう1つのオプションは、iptablesの要件を1.6より前の要件に戻すことです。