6.0 (wrynose) 迁移说明
本节介绍如何从上一版本迁移到 Yocto Project 6.0 版本 (代号“wrynose”)。新功能与增强功能列表见 6.0 (wrynose) 发布说明。
6.0 (wrynose) 是继 5.0 (scarthgap) 之后的新长期支持版本。 如果从 5.0 迁移,请务必阅读之前的迁移指南:
另请参阅此前各版本的新功能与增强功能列表:
支持的内核版本
本版本将 OLDEST_KERNEL 设置为 5.15,因此默认不支持更旧的内核。 详情见 4.3 迁移说明。
支持的发行版
与此前版本相比,新增支持在以下 GNU/Linux 发行版上运行 BitBake:
Fedora 43
openSUSE Leap 16.0
Ubuntu 26.04 (LTS)
同时,不再支持以下较早的发行版:
Fedora 39
Fedora 40
Fedora 41
openSUSE Leap 15.5
参见 所有受支持的发行版。
移除的 BitBake 获取器
INIT_MANAGER 的默认定义改为 systemd
defaultsetup.conf
文件中 INIT_MANAGER 的默认定义由 none 改为 systemd。
这意味着使用默认发行版设置(显示为 nodistro DISTRO)的用户
将以 systemd 作为默认初始化管理器。
这不会改变 Poky 发行版的默认初始化管理器,它仍为 SysVinit。
若要改回 SysVinit,可在自己的 DISTRO 配置文件中指定 INIT_MANAGER:
INIT_MANAGER = "sysvinit"
更多信息见提交 0b4061c。
默认 DISTRO_FEATURES 和 MACHINE_FEATURES 的提供方式变更
OpenEmbedded Build System 提供默认 DISTRO_FEATURES 和 MACHINE_FEATURES 的方式发生了变化。
DISTRO_FEATURES_BACKFILL、DISTRO_FEATURES_BACKFILL_CONSIDERED、
DISTRO_FEATURES_DEFAULT、MACHINE_FEATURES_BACKFILL 和
MACHINE_FEATURES_BACKFILL_CONSIDERED 变量现已过时。
取而代之的是 DISTRO_FEATURES_DEFAULTS、DISTRO_FEATURES_OPTED_OUT、 MACHINE_FEATURES_DEFAULTS 和 MACHINE_FEATURES_OPTED_OUT。
建议用户按以下方式迁移到这些变量:
对于 DISTRO_FEATURES:
如果此前为 DISTRO_FEATURES 赋值时未使用
DISTRO_FEATURES_DEFAULT, 现在会自动添加默认功能(来自 DISTRO_FEATURES_DEFAULTS)。 需要检查这些功能,并将不想使用的功能加入 DISTRO_FEATURES_OPTED_OUT。DISTRO_FEATURES_DEFAULT已不再使用。新变量名略有不同 (DISTRO_FEATURES_DEFAULTS),以确保尚未适应新命名的层不会意外使用它。如果此前设置了
DISTRO_FEATURES_BACKFILL_CONSIDERED, 请改用新的 DISTRO_FEATURES_OPTED_OUT 变量。如果此前修改了
DISTRO_FEATURES_BACKFILL,请移除这些赋值并按上述说明操作。
对于 MACHINE_FEATURES:
MACHINE_FEATURES 现在会自动添加默认功能 (来自 MACHINE_FEATURES_DEFAULTS)。需要检查这些功能, 并将不想使用的功能加入 MACHINE_FEATURES_OPTED_OUT。
如果此前设置了
MACHINE_FEATURES_BACKFILL_CONSIDERED, 请改用新的 MACHINE_FEATURES_OPTED_OUT 变量。如果此前修改了
MACHINE_FEATURES_BACKFILL,请移除这些赋值并按上述说明操作。
默认启用的 DISTRO_FEATURES 列表变更
meta/conf/bitbake.conf 现在默认启用以下 DISTRO_FEATURES:
multiarch:启用支持多种架构的应用程序构建。opengl:包含 Open Graphics Library,这是用于渲染二维和三维图形的 跨语言、多平台应用程序编程接口。ptest:为支持的软件配方启用软件包测试构建。若要将构建出的 ptest 软件包加入镜像,请在镜像配方的 IMAGE_FEATURES 中添加ptest-pkgs。vulkan:包含对 Vulkan API 的支持。wayland:包含 Wayland 显示服务器协议及其支持库。
更多信息见提交 2e1e7c8。
从 meta-poky 移除默认配置模板
meta-poky/conf/templates/default 中的配置模板已移除,因为现在统一由
OpenEmbedded-Core (OE-Core) 的 meta/conf/templates/default
提供。
两组默认模板之间的差异见提交 ac300ba。
native 和 cross 类的 DEBUG_BUILD 变更
此前,全局将 DEBUG_BUILD 设置为 "1" 会阻止 OpenEmbedded Build System 剥离目标、native 和 cross 二进制文件。 现在的行为改为,设置该变量时仅剥离 目标 二进制文件。
可以在 configuration file 中添加以下两行来恢复此前的行为:
INHIBIT_SYSROOT_STRIP:class-cross = "${@oe.utils.vartrue('DEBUG_BUILD', '1', '', d)}"
INHIBIT_SYSROOT_STRIP:class-native = "${@oe.utils.vartrue('DEBUG_BUILD', '1', '', d)}"
更多信息见提交 3c29afe。
U-Boot 配置流程变更(uboot-config)
过去,声明多个 U-Boot 配置时,每个配置完全由一个 UBOOT_CONFIG 变量标志定义,例如:
UBOOT_CONFIG ??= "foo bar"
UBOOT_CONFIG[foo] = "config,images,binary"
UBOOT_CONFIG[bar] = "config2,images2,binary2"
现在已拆分为更多变量标志,例如:
UBOOT_CONFIG ??= "foo bar"
UBOOT_CONFIG[foo] = "config"
UBOOT_CONFIG[bar] = "config2"
UBOOT_CONFIG_IMAGE_FSTYPES[bar] = "fstype"
UBOOT_CONFIG_BINARY[foo] = "binary"
UBOOT_CONFIG_MAKE_OPTS[foo] = "FOO=1"
UBOOT_CONFIG_MAKE_OPTS[bar] = "BAR=1"
UBOOT_CONFIG_FRAGMENTS[foo] = "foo.fragment"
完整信息见 uboot-config 文档。
目前仍支持旧方式,但将在下一个版本移除。建议用户迁移到新方式。
更多信息见提交 cd9e730。
备注
单配置构建没有变化,仍使用以下语句声明:
UBOOT_MACHINE = "config"
UBOOT_BINARY = "u-boot.bin"
vex 输出 JSON 文档的扩展名变更
继承 vex 类的镜像配方会生成额外的 JSON 文档,
其后缀过去为 .json。例如,构建继承该类的 core-image-minimal 镜像配方,
过去会生成以下文件:
core-image-minimal-qemuarm64.rootfs.json
该文件的后缀现在改为 .vex.json。以上例为例,同一文件现在命名为:
core-image-minimal-qemuarm64.rootfs.vex.json
移除 SPDX 2.2 支持
已移除通过 create-spdx-2.2 类生成 SPDX 2.2 文档的支持:
Removes SPDX 2.2 support in favor of SPDX 3 support being the only
option. The SPDX 3 data is far superior to SPDX 2.2 and thus more useful
for SBoM uses cases.
更多信息见提交 12abd05。
建议用户迁移到 create-spdx 类提供的 SDPX 3.0。
移除 cve-check 类
cve-check 类已移除,由 sbom-cve-check 类取代。
以下引用移除该类的提交(00de455):
It's been long known that the cve-check class in oe-core is not that
usable in the real world, for more details see "Future of CVE scanning
in Yocto"[1]. This mail proposed an alternative direction that included
a CVE scanning tool that can be ran both during the build and afterwards,
so that periodic scans of a previously build image is possible.
Last year, Bootlin wrote sbom-cve-check[2] and I compared this to my
proposal in "Comparing cve-check with sbom-cve-check"[3], concluding
that this is likely the missing piece.
Support for sbom-cve-check has been merged into oe-core, and the
cve-check class is now obsolete. So that we don't have to maintain it for
the four-year lifecycle of the Wrynose release, delete it.
This patch also deletes the database fetcher recipes, and the test cases
that were specific to cve-check. Note that the oe.cve_check library
still exists as this is used by the SPDX classes.
[1] https://lore.kernel.org/openembedded-core/7D6E419E-A7AE-4324-966C-3552C586E452@arm.com/
[2] https://github.com/bootlin/sbom-cve-check
[3] https://lore.kernel.org/openembedded-core/2CD10DD9-FB2A-4B10-B98A-85918EB6B4B7@arm.com/
建议目前使用 cve-check 类的用户切换到 sbom-cve-check:
应移除以下赋值:
INHERIT += "cve-check"
并替换为:
OE_FRAGMENTS += "core/yocto/sbom-cve-check"
这将启用 sbom-cve-check 类及其推荐设置。
构建镜像后,会在部署目录(DEPLOY_DIR_IMAGE)中部署两个文件:
以
.sbom-cve-check.yocto.json结尾的文件:输出的 JSON 报告, 格式与cve-check类部署的报告相同。以
.sbom-cve-check.spdx.json结尾的文件:标注了漏洞 CVE 的 SPDX 报告。
cve-check类原来部署于 DEPLOY_DIR_IMAGE、以.cve.txt结尾的 摘要文件不再默认部署。可以在配置文件中添加以下语句恢复它:SBOM_CVE_CHECK_EXPORT_VARS:append = " SBOM_CVE_CHECK_EXPORT_SUMMARY"
这会部署一个以
.cve.txt结尾的新文件,其格式与此前cve-check类 部署的摘要相同。更多信息见 SBOM_CVE_CHECK_EXPORT_VARS 文档。
CVE_CHECK_SHOW_WARNINGS原来用于控制cve-check在发现未修补的 CVE 时 是否显示警告。该变量现已移除,由功能相同的 SBOM_CVE_CHECK_SHOW_WARNINGS 取代。
更多信息见 Yocto Project 安全手册的 检查漏洞 一节。
CVE_PRODUCT 字符转义变更
CVE_PRODUCT 变量指定将配方名称与上游 NIST CVE 数据库 中的名称进行匹配时使用的名称, 过去要求对特殊字符进行转义。
现在不再需要如此。例如,webkitgtk 配方的 CVE_PRODUCT 不应再写成
webkitgtk\+,而应写成 webkitgtk+。
建议用户检查 CVE_PRODUCT 的赋值,移除所有特殊字符转义。
应将 WIC_SECTOR_SIZE 替换为 --sector-size
WIC_SECTOR_SIZE 变量此前用于定义 WIC 工具
生成的分区的扇区大小。wic 命令行工具现在支持 --sector-size 参数,
用于替代该变量。
虽然配方中仍可使用此变量,但使用时现在会在控制台显示警告:
DEPRECATED: WIC_SECTOR_SIZE is deprecated, use the --sector-size command-line argument instead.
可通过 WIC_CREATE_EXTRA_ARGS 变量使用 --sector-size 命令行参数。
例如,原来的 WIC_SECTOR_SIZE 赋值:
WIC_SECTOR_SIZE = "4096"
应替换为:
WIC_CREATE_EXTRA_ARGS += "--sector-size 4096"
更多信息见提交 b50d6de。
将 WIC kickstart 文件移至 files/wic
WIC kickstart 文件(WKS 文件)
应移至其所属层的 files/wic/ 目录。
否则构建将失败,并显示说明如何移动这些文件的错误,例如:
wic/wks files at ../meta-custom/wic need to be moved to files/wic within the layer to be found/used
wic/wks files at ../meta-custom/scripts/lib/wic/canned-wks need to be moved to files/wic within the layer to be found/used
例如,撰写本文时 OpenEmbedded-Core (OE-Core) 的 "meta" 层内容如下:
meta/files/wic
├── common.wks.inc
├── directdisk-bootloader-config.cfg
├── directdisk-bootloader-config.wks
├── directdisk-gpt.wks
├── directdisk-multi-rootfs.wks
├── directdisk.wks
├── efi-bootdisk.wks.in
├── efi-uki-bootdisk.wks.in
├── mkefidisk.wks
├── mkhybridiso.wks
├── qemuloongarch.wks
├── qemuriscv.wks
├── qemux86-directdisk.wks
├── sdimage-bootpart.wks
└── systemd-bootdisk.wks
该变更不影响 WIC 插件,它们应继续放在 scripts/lib/wic/plugins/source/。
移除 systemd 中的 SysVinit 兼容支持
原因是 systemd 的 近期公告 表示计划移除 对 SysVinit 的兼容支持。
这意味着不能再同时使用 systemd 和 sysvinit
发行版功能。
建议用户完全切换到其中一种初始化管理器。
更多信息见提交 d9ec9e2。
已移除的配方
本版本移除了以下配方:
jquery:此配方最后的使用者是可复现性测试,但这些测试已在 d3ee549 中改用 jQuery CDN (见 aae793a)gstreamer1.0-vaapi:其功能已经由gstreamer1.0-plugins-bad的vaPACKAGECONFIG 选项提供,因此移除 (9e2d2a5)pkgconfig:由pkgconf配方取代 (e32bf38)python3-pyzstd:OpenEmbedded-Core (OE-Core) 中没有使用者, 且 Python 3.14 现在内置了 zstd 支持 (55061de)cve-update-db-native、cve-update-nvd2-native:随着cve-check类 一同移除,因为该类是这些配方的唯一使用者 (00de455)python3-roman-numerals-py:重命名为python3-roman-numerals(faff756)
已移除的 PACKAGECONFIG 选项
已移除的类
本版本移除了以下类:
oelint:该类执行的大多数检查现在已由代码的其他部分完成, 因此此类已经过时并被移除。
其他变更
从
oe-init-build-env脚本中移除 VSCode 设置支持。建议用户改用 bitbake-setup (4e781c6)