版本 3.3 (hardknott)

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

最低系统要求

构建主机现在至少需要安装 Python 3.6。多数较新发行版已提供此版本; 若所用发行版没有,可以使用 buildtools 压缩包 (通过 scripts/install-buildtools 即可轻松安装)。详情见 所需的 Git、tar、Python、make 和 gcc 版本。

已移除的配方

以下配方已移除:

  • go-dep:随着 Go modules 的出现而过时

  • gst-validate:由 gst-devtools 取代

  • linux-yocto:移除 5.8 版本配方(仍提供 5.4 / 5.10)

  • vulkan-demos:由 vulkan-samples 取代

单一版本通用许可证文件命名

meta/files/common-licenses 中部分许可证文件已重命名,以匹配当前 SPDX 命名约定:

  • AGPL-3.0 -> AGPL-3.0-only

  • GPL-1.0 -> GPL-1.0-only

  • GPL-2.0 -> GPL-2.0-only

  • GPL-3.0 -> GPL-3.0-only

  • LGPL-2.0 -> LGPL-2.0-only

  • LGPL-2.1 -> LGPL-2.1-only

  • LGPL-3.0 -> LGPL-3.0-only

此外,新增了对应的 "-or-later" 后缀文件,例如 GPL-2.0-or-later。

由于保留了原名称的映射,不要求修改 LICENSE 值。 但在少数情况下,如果配方将 LIC_FILES_CHKSUM 指向 meta/files/common-licenses 中的文件(无论如何都不建议这样做), 则需要更新这些引用。

新增 python3targetconfig 类

新增的 python3targetconfig 类,适用于过去继承 python3native、但又需要访问目标配置数据 (如正确的安装目录)的情况。此类配方应改为继承 python3targetconfig, 而不是 python3native。这也会加入对目标 python3 的依赖, 因此仅应在需要时使用,以免无谓延长构建时间。

已作此变更的配方示例包括 gpgme、libcap-ng 和 python3-pycairo。

Python 模块的 setup.py 路径

Python 模块的 setup.py 有时位于源码树深处。 过去,配方将 S 指向 setup.py 所在的源码子目录来处理此情况。 但近期 pseudo 的变更导致问题: 某些 Python 模块会修改 ${S} 路径之上的文件。例如:

S = "${WORKDIR}/git/python/pythonmodule"

然后 setup.py 通过 ../../src 等相对路径操作源码。 这会导致 pseudo 无法正确跟踪路径而失败。本版本引入 DISTUTILS_SETUP_PATH, 使配方可以显式指定该路径,例如:

S = "${WORKDIR}/git"
DISTUTILS_SETUP_PATH = "${S}/python/pythonmodule"

如果配方继承 distutils3 (或继承它的 setuptools3), 同时按上述方式将 S 指向子目录中的 Python 模块, 现在应改为设置 DISTUTILS_SETUP_PATH。

BitBake 变更

  • BitBake 现在为所有任务配置默认 umask 为 022, 由新增的 BB_DEFAULT_UMASK 指定。必要时仍可通过任务函数的 umask 变量标志逐任务设置,但大多数情况下不需要。

  • 如果 PREFERRED_VERSION 指定的版本不可用,现在会触发警告, 而不只是提示,使此类问题更醒目。

打包变更

以下打包方式发生了变化。所有情况下,主软件包仍依赖拆分出的软件包, 因此除非希望利用更细的粒度,否则无需采取措施:

  • dbus:拆分出 -common 和 -tools

  • iproute2:将 ip 二进制文件拆分到独立软件包

  • net-tools:将 mii-tool 拆分到独立软件包

  • procps:将 ps 和 sysctl 各自拆分到独立软件包

  • rpm:将构建和额外功能拆分到独立软件包

  • sudo:将 sudo 二进制文件拆分到 sudo-sudo,库拆分到 sudo-lib

  • systemtap:拆分出示例、Python 脚本和运行时内容

  • util-linux:将 libuuid 拆分为独立的 util-linux-libuuid 配方及相应软件包, 避免 util-linux 启用 libgcrypt 支持时出现循环依赖。 util-linux 依赖 util-linux-libuuid。

其他变更

  • poky 默认的 DISTRO_VERSION 现在使用核心元数据的 Git 哈希 (METADATA_REVISION),而不是日期(DATE),减少一个小的 不可复现来源。当然,仍可按需指定自己的 DISTRO_VERSION, 尤其是在创建自定义发行版配置时。

  • 重新加入 adwaita-icon-theme 3.34.3,并通过 meta/conf/distro/include/default-versions.inc 中的 PREFERRED_VERSION 将其设为默认,因为新版与 librsvg 2.40 配合不佳。 librsvg 已移植到 Rust,而 Rust 尚未进入 OE-Core,当前实际上无法升级它, 但后续版本会改变这一状况。

  • ffmpeg 现在默认禁用 GPL 许可部分,以降低意外违反 GPL 的可能性。 若要显式启用,可通过 bbappend 将 gpl 加入 ffmpeg 的 PACKAGECONFIG, 或在配置中使用 PACKAGECONFIG_append_pn-ffmpeg = " gpl"。

  • connman 现在声明与 systemd-networkd 冲突,因为它们的功能重叠, 运行时可能相互干扰。

  • 镜像许可证清单现在使用规范的 SPDX 许可证名称,避免同一许可证的别名同时出现, 例如 GPLv2 和 GPL-2.0。