版本 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 类的配方
添加校验和列表,可以按以下步骤操作:
从配方中移除所有
crate://行创建空的
${BPN}-crates.inc文件,并让配方通过 require 引入它执行
bitbake -c update_crates your_recipe将 BitBake 输出的缺失校验和信息复制到
${BPN}-crates.inc文件中。
Python 库代码扩展
本版本中的 BitBake 支持新的 addpylib 指令,用于启用层中的 Python 库。
应将此指令添加到层配置中,示例来自 meta/conf/layer.conf:
addpylib ${LAYERDIR}/lib oe
目前通过添加 lib 目录扩展 Python 库代码的层,现在应使用此指令, 因为 OE-Core 将来不再自动添加 BBPATH。注意,这些指令立即执行, 因此相比目前基于 BBPATH 的方式,模块会更早可用。
已移除的变量
以下变量已移除:
SERIAL_CONSOLE:自 2.6 起弃用,由 SERIAL_CONSOLES 取代。PACKAGEBUILDPKGD:package 类中主要供内部使用的变量, 很少用于定制打包。如果自定义配方或 bbappend 使用了它, 需要改用 PACKAGE_PREPROCESS_FUNCS 或 PACKAGESPLITFUNCS。
已移除的配方
本版本移除了以下配方:
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 = ""