3.4 (honister) 迁移说明
本节介绍如何从上一版本迁移到 Yocto Project 3.4 版本(代号“honister”)。
覆盖语法变更
本版本使用 : 字符代替 _ 表示覆盖,最常用于变量的条件赋值。
因此,以下条目:
SRC_URI_qemux86 = "file://somefile"
现在变为:
SRC_URI:qemux86 = "file://somefile"
因为 qemux86 是一个覆盖项。这适用于所有覆盖语法。例如:
SRC_URI_append = " file://somefile"
SRC_URI_append_qemux86 = " file://somefile2"
SRC_URI_remove_qemux86-64 = "file://somefile3"
SRC_URI_prepend_qemuarm = "file://somefile4 "
FILES_${PN}-ptest = "${bindir}/xyz"
IMAGE_CMD_tar = "tar"
BASE_LIB_tune-cortexa76 = "lib"
SRCREV_pn-bash = "abc"
BB_TASK_NICE_LEVEL_task-testimage = '0'
现在变为:
SRC_URI:append = " file://somefile"
SRC_URI:append:qemux86 = " file://somefile2"
SRC_URI:remove:qemux86-64 = "file://somefile3"
SRC_URI:prepend:qemuarm = "file://somefile4 "
FILES:${PN}-ptest = "${bindir}/xyz"
IMAGE_CMD:tar = "tar"
BASE_LIB:tune-cortexa76 = "lib"
SRCREV:pn-bash = "abc"
BB_TASK_NICE_LEVEL:task-testimage = '0'
这也适用于 从数据存储查询变量,
例如使用 getVar 等函数时,d.getVar("RDEPENDS_${PN}") 应变为
d.getVar("RDEPENDS:${PN}")。
一些覆盖很明显,例如 MACHINE 和 DISTRO;另一些则不太直观,
例如 RDEPENDS、FILES 等打包变量将软件包名
(如 ${PN}、${PN}-ptest)用作覆盖。这些覆盖不一定出现在 OVERRIDES
中,而是在打包等特定上下文中有条件地应用。task-<taskname> 也是与上下文相关的
覆盖,其上下文是特定任务。调优覆盖又是一种特殊情况:有些代码将其作为覆盖使用,
有些则不是。我们计划让调优代码未来更一致地使用覆盖。
某些变量不使用覆盖语法,包括 layer.conf 中 BBFILE_PATTERN 等变量的
后缀、SRCREV_xxx (其中 xxx 是 SRC_URI 中的名称),
以及 PREFERRED_VERSION_xxx。尤其是 layer.conf 的后缀可能与
DISTRO 覆盖同名,容易混淆。发现这些问题后,我们计划进一步改善一致性。
为帮助迁移层,OE-Core 提供了脚本。配置好层所使用的覆盖项后,可运行:
<oe-core>/scripts/contrib/convert-overrides.py <layerdir>
备注
请阅读脚本中的说明:它并非完全自动化,也不保证处理所有情况。
尤其需要告知脚本该层使用哪些覆盖(通常是机器和发行版的名称/覆盖项)。
请仔细检查结果,因为脚本可能转换过多,会转换函数名和变量名中的
_append、_remove 和 _prepend 引用。
这项转换很重要,因为变量名也会使用下划线,而不一定表示覆盖。
新语法让 BitBake 更可靠地区分覆盖与普通名称,也有助于继续改进和简化语法,
提升易用性。此外,BitBake 不再需要猜测 my_functionname 中的 functionname
是否为覆盖,也不必为此维护庞大的查找列表,因此效率也应有所改善。
新增主机依赖
构建主机现在必须安装 lz4c、pzstd 和 zstd 命令,以支持 LZ4 和
Zstandard 压缩。多数 Linux 发行版通常通过 lz4 和 zstd 软件包提供它们。
如果发行版未提供,也可以使用 buildtools 压缩包中的版本。
更多信息见 构建主机所需的软件包。
已移除的配方
本版本移除了以下配方:
assimp:许可证方面存在问题,且没有其他使用者clutter-1.0:旧组件,移至 meta-gnomeclutter-gst-3.0:旧组件,移至 meta-gnomeclutter-gtk-1.0:旧组件,移至 meta-gnomecogl-1.0:旧组件,移至 meta-gnomecore-image-clutter:随 clutter 一同移除linux-yocto:移除 5.4 版本配方(仍提供 5.14 和 5.10)mklibs-native:缺乏积极测试,且上游 mklibs 仍要求 Python 2mx-1.0:已过时(最后发布于 2012 年),没有已知层使用它packagegroup-core-clutter:随 clutter 一同移除
已移除的类
clutter:随 clutter 本身移至 meta-gnomeimage-mklibs:缺乏积极测试,且上游 mklibs 仍要求 Python 2meta:已无实用价值。需要跳过软件包安装的配方应改为继承 nopackages。
默认禁用预链接
近期测试表明,只有不启用 PIE 时预链接才有效 (见 此处)。 PIE 是值得启用的安全功能,也是 Yocto Project 唯一提供并测试的配置, 因此继续启用 prelink 已没有意义。
此外,这部分代码似乎无人维护,仍有未解决的错误,包括 这个严重问题。 考虑到 prelink 会执行复杂的地址运算并重写二进制文件,最佳选择是禁用它。 如果自己的配置当前启用了此功能,建议考虑禁用。
虚拟运行时提供者
配方不应在 RPROVIDES 和 RDEPENDS 中使用 virtual/ 字符串,
因为它在这些变量中没有特殊含义,会造成混淆;这与构建时的 PROVIDES
和 DEPENDS 不同。
调优文件移至特定架构目录
conf/machine/include 中的调优文件已移至该位置下各自架构名称对应的目录。
例如,x86 文件移至 x86 子目录,MIPS 文件移至 mips 子目录。
ARM 调优还多了一层(armv8a、armv8m 等),部分文件重命名以保持一致。
参见 此提交。
如果引用了调优文件(例如在自定义机器配置中),需要更新这些引用。
可扩展 SDK 的主机扩展
对于普通 SDK,某些层无条件向 TOOLCHAIN_HOST_TASK 追加内容没有问题, 但当 eSDK 尝试将该变量覆盖为自己的值时就会出问题。eSDK 不安装此变量指定的 软件包,而是使用 native 配方,这是一种截然不同的方式。结果可能是二进制文件 被加入 SDK 却没有重定位,产生难以理解的错误。
为避免这些问题,新增了 TOOLCHAIN_HOST_TASK_ESDK。 若要扩展 eSDK 主机部分安装的内容,现在需要设置此变量。
软件包与配方拆分
为便于维护,
perl-cross已从主perl配方中拆分为独立的perlcross配方。 如果有 perl 配方的 bbappend,可能需要扩展它们。wayland配方现在将二进制文件放入wayland-tools软件包, 而不是wayland-dev。Xwayland 已从 xserver-xorg 源码树中拆分出来,因此现在拥有独立的
xwayland配方。如果镜像需要 Xwayland,可能需要显式添加它。rpm软件包的 RRECOMMENDS 不再包含rpm-build。 如果镜像仍需要 RPM 软件包构建功能,而尚未显式添加rpm-build,请将其加入镜像。Python 的
statistics标准模块现在打包为独立的python3-statistics, 不再放入python3-misc。
镜像/SDK 生成变更
构建 SDK 时现在禁用对 do_build 任务的递归依赖。 通常不需要这些依赖。如果确实遇到问题,通常是缺少需要补充的显式依赖。
构建镜像时,不再忽略安装“补充”软件包(例如
*-dbg和*-dev)期间的错误。 过去部分此类软件包存在安装问题,如今已不再如此。 如果仍因此报错,需要修复安装或打包问题。如果启用多种软件包类型(非典型配置),构建镜像时仅生成实际用于镜像构建的类型, 即 PACKAGE_CLASSES 的第一项。如果 CI 系统需要原来的行为, 请使用
bitbake --runall build <target>。将 LICENSE_CREATE_PACKAGE 设为 "1" 时,不再自动将
-lic软件包 加入所有其他软件包的 RRECOMMENDS。 如果希望安装镜像中各软件包对应的全部许可证包,应改为将新的lic-pkgs功能加入 IMAGE_FEATURES。
其他变更
BitBake 通过 HTTPS 获取源码时,现在会正确验证证书。如果自定义配方因此报错, 需要使用镜像,或与相关服务器的运营者共同解决问题。
avahi默认禁用 GTK+ 支持。若要重新启用,可在avahi配方的 bbappend 或自定义发行版配置文件中设置AVAHI_GTK = "gtk3"。将
BUILD_REPRODUCIBLE_BINARIES设为 "0" 时,不再使用异常陈旧的 2011 年 4 月 回退日期,而是如预期那样禁用可复现二进制构建。将 noexec/nostamp/fakeroot 变量标志设为 "1" 以外的任何值,现在都会触发警告。 应设置为 "1" 来启用,或不设置以禁用。
移除了此前已弃用的
COMPRESS_CMD和CVE_CHECK_CVE_WHITELIST。 应分别改用 CONVERSION_CMD 和CVE_CHECK_WHITELIST(后者在 4.0 中由 CVE_CHECK_IGNORE 取代)。移除了 utils 类原来提供的过时函数
oe_machinstall。 对于机器特定的安装,建议改用获取器内置的覆盖支持,或一般的覆盖机制。EXTRA_USERS_PARAMS 中的
useradd和usermod条目不再支持-P(--clear-password)选项。它原本通过shadow配方的自定义补丁实现, 与 shadow 4.9 上游新增的-P选项冲突,而且本质上并不安全。 仍支持硬编码密码,但需要先哈希,示例见 EXTRA_USERS_PARAMS。