版本 4.2 (mickledore)

4.2 (mickledore) 迁移说明

本节介绍如何从上一版本迁移到 Yocto Project 4.2 版本(代号“mickledore”)。

支持的发行版

本版本新增支持在以下 GNU/Linux 发行版上运行 BitBake:

  • Fedora 36 和 37

  • AlmaLinux 8.7 和 9.1

  • OpenSuse 15.4

同时,不再支持以下较早的发行版:

  • Debian 10.x

  • Fedora 34 和 35

  • AlmaLinux 8.5

参见 所有受支持的发行版。

最低 Python 版本现在为 Python 3.8

BitBake 和 OpenEmbedded-Core 现在要求 Python 3.8 或更新版本。 因此,必须使用至少提供此版本的发行版,或安装 buildtools 压缩包。

最低 GNU C 编译器版本现在为 gcc 8.0

2018 年发布的该版本是构建 mesa-native 配方的最低要求。 由于构建 QEMU 时默认依赖链包含该配方,因此现在所有构建都要求此版本。

如果主机发行版未提供此版本或更新版本的 gcc,可以安装 buildtools-extended 压缩包。

通过 2.0 API 获取 NVD 漏洞数据库

由于 1.0 API 将在 2023 年退役,本版本新增了通过 2.0 API 获取 NVD 数据库的获取器。

实现尽可能减少变动,保留现有数据库格式,但在过渡期使用不同的数据库文件。 一个明显的例外是不再使用 META 表。

可能注意到以下细微变化:

  • 数据库起始年份由 2002 年改为 1999 年

  • 完整获取时间更长(通常约 30 分钟)

Rust:强制要求 crate 校验和

本版本支持 Rust crate 的校验和,并要求配方中的每个 crate 都提供校验和。 示例见 python3_bcrypt 配方变更。

cargo-update-recipe-crates 工具 已扩展, 能够包含这些校验和。如果需要为目前仅继承 cargo 类的配方 添加校验和列表,可以按以下步骤操作:

  1. 让配方继承 cargo-update-recipe-crates

  2. 从配方中移除所有 crate:// 行

  3. 创建空的 ${BPN}-crates.inc 文件,并让配方通过 require 引入它

  4. 执行 bitbake -c update_crates your_recipe

  5. 将 BitBake 输出的缺失校验和信息复制到 ${BPN}-crates.inc 文件中。

Python 库代码扩展

本版本中的 BitBake 支持新的 addpylib 指令,用于启用层中的 Python 库。

应将此指令添加到层配置中,示例来自 meta/conf/layer.conf:

addpylib ${LAYERDIR}/lib oe

目前通过添加 lib 目录扩展 Python 库代码的层,现在应使用此指令, 因为 OE-Core 将来不再自动添加 BBPATH。注意,这些指令立即执行, 因此相比目前基于 BBPATH 的方式,模块会更早可用。

更多信息见 Extending Python Library Code。

已移除的变量

以下变量已移除:

已移除的配方

本版本移除了以下配方:

  • python3-picobuild:已改用 python3-build。

  • python3-strict-rfc3339:无人维护,且 openembedded-core 和 meta-openembedded 均无使用者。

  • linux-yocto:移除 5.19 版本配方(仍提供 6.1 和 5.15)。

已移除的类

本版本移除了以下类:

  • rust-bin:不再使用。

  • package_tar:不能用于实际打包,因此实用价值有限。

自定义层与 devtool 工作区的 LAYERSERIES_COMPAT

一些层维护者曾将 conf/layer.conf 中的 LAYERSERIES_COMPAT 设置为 LAYERSERIES_CORENAMES 的值,实际绕过兼容性检查。现在不再允许这种做法。 层维护者应正确设置 LAYERSERIES_COMPAT,帮助用户了解层的兼容状态。

此外,devtool 工作区层的 LAYERSERIES_COMPAT 现在会在创建时设置。 如果升级时启用了工作区层并希望保留它,需手动更新 workspace/conf/layer.conf 中的 LAYERSERIES_COMPAT。如果不再需要它,可从 build/conf/bblayers.conf 的 BBLAYERS 中移除相应路径, 并删除或移走 workspace 目录。

runqemu 现在将 slirp 主机端口转发限制到 localhost

在 runqemu 的默认 slirp 端口转发配置下,QEMU 此前会监听构建主机所有 IP 地址上的 TCP 2222 和 2323 端口。大多数 runqemu 使用场景只需要 localhost 访问; 运行允许 root 无密码登录的 QEMU 镜像,同时监听所有可能可从互联网访问的网络接口, 并不安全。因此,本版本将 QEMU 端口转发限制为 localhost(127.0.0.1)。

如果确实需要从网络访问 QEMU 机器,可以通过 build/conf/local.conf 或机器配置变量 QB_SLIRP_OPT 启用:

QB_SLIRP_OPT = "-netdev user,id=net0,hostfwd=tcp::2222-:22"

补丁 QA 检查

本版本对补丁模糊匹配和 Upstream-Status 的 QA 检查作了小幅调整。 现在可通过 WARN_QA / ERROR_QA 配置 Upstream-Status 检查, 核心层使用 patch-status-core,其他层使用 patch-status-noncore。

patch-fuzz 和 patch-status-core 检查现已加入 ERROR_QA 默认值, 触发时会导致构建失败。如果不希望如此,需要按需调整配置中的 ERROR_QA。

Native/nativesdk mesa 的使用与图形驱动

本版本包含 mesa 23.0。由于 mesa 上游对驱动及加载它们的库加入了严格的构建匹配检查, 此版本不能再使用主机系统中的驱动。

运行由构建系统构建的 QEMU 时,这一点尤其重要。runqemu 已加入检查, 在缺少 native/nativesdk opengl/virgl 支持时给出有用的错误信息。

为支持此行为,构建 mesa-native 时启用了多个驱动。这会引入一个主要依赖 llvm-native,在现代机器上增加几分钟构建时间。如果不希望如此, 可在配置中设置 DISTRO_FEATURES_NATIVE,排除 opengl。

其他变更

  • IMAGE_NAME 现在基于 IMAGE_LINK_NAME 设置。因此,如果将 IMAGE_LINK_NAME 设为 "" 来禁用无版本镜像符号链接的创建, 现在还需要为 IMAGE_NAME 设置合理值,例如:

    IMAGE_LINK_NAME = ""
    IMAGE_NAME = "${IMAGE_BASENAME}${IMAGE_MACHINE_SUFFIX}${IMAGE_VERSION_SUFFIX}"
    
  • /etc/os-release 现在使用 VERSION_CODENAME 字段代替 DISTRO_CODENAME (其值仍来自 DISTRO_CODENAME),以更符合 os-release 标准用法。 如果运行时代码从 /etc/os-release 读取该字段,可能需要更新。

  • kmod 配方现在默认启用 OpenSSL 支持,以支持模块签名。 如果不需要此功能,希望节省空间或避免该依赖,可在 kmod bbappend 中设置 PACKAGECONFIG (或在配置中设置 PACKAGECONFIG:pn-kmod),排除 openssl。

  • 移除了 OEBasic 签名处理器(见 BB_SIGNATURE_HANDLER)。 通常不会选用它,但如果已选择,需要移除此设置。

  • package 类现在会在 do_package 期间检查 PKG:${PN} 覆盖是否导致软件包名称冲突。如果出现相关错误, 需要调整 PKG 用法以解决冲突。

  • openssh 不再通过 RRECOMMENDS 引入 rng-tools,因为 Linux 内核 5.6 起已不需要 rngd。如果出于其他原因仍需要安装 rng-tools,应将它显式加入镜像。 如果还需要将 rngd 作为服务启动,则还需添加已拆分出来的 rng-tools-service 包。

  • cups 配方不再启用 Web 界面构建,可为最终镜像节省约 1.8M 空间。 若要启用,可在 cups bbappend 中设置 PACKAGECONFIG (或在配置中设置 PACKAGECONFIG:pn-cups),加入 webif。

  • scons 类现在向 scons 传入 MAXLINELENGTH 参数, 修复启用 ccache 时 scons 的命令行长度问题。但部分配方可能使用不支持 此参数的旧版 scons。此时可以在配方中设置以下内容来禁用它:

    SCONS_MAXLINELENGTH = ""