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 获取器

以下 BitBake 获取器 已被禁用或移除:

  • 由于安全问题(355cd22) 和缺乏维护,npm 和 npmsw (NPM)获取器已被禁用。

    所有相关测试也已禁用。

  • 移除对 Bazaar 获取器的支持 (8e057d5)。

  • 移除对 OSC 获取器的支持 (99497c1)。

  • 移除对 CVS 获取器的支持 (5427500)。

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。

建议用户按以下方式迁移到这些变量:

更多信息见提交 159148f 和 3194d68。

默认启用的 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 的兼容支持。

这意味着不能再同时使用 systemd 和 sysvinit 发行版功能。

建议用户完全切换到其中一种初始化管理器。

更多信息见提交 d9ec9e2。

已移除的配方

本版本移除了以下配方:

  • jquery:此配方最后的使用者是可复现性测试,但这些测试已在 d3ee549 中改用 jQuery CDN (见 aae793a)

  • systemd-compat-units:随 systemd 移除 SysVinit 支持而移除 (d9ec9e2)

  • gstreamer1.0-vaapi:其功能已经由 gstreamer1.0-plugins-bad 的 va PACKAGECONFIG 选项提供,因此移除 (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:该类执行的大多数检查现在已由代码的其他部分完成, 因此此类已经过时并被移除。

其他变更

  • meson:移除无法正常工作的 meson_do_qa_configure (0514b45)

  • 从 oe-init-build-env 脚本中移除 VSCode 设置支持。建议用户改用 bitbake-setup (4e781c6)