6.1 (blacksail) 迁移说明

本节介绍如何从上一版本迁移到 Yocto Project 6.1 版本 (代号“blacksail”)。新功能与增强功能列表见 6.1 (blacksail) 发布说明。

支持的内核版本

本版本将 OLDEST_KERNEL 设置为 5.15,因此默认不支持更旧的内核。 详情见 4.3 迁移说明。

支持的发行版

与此前版本相比,新增支持在以下 GNU/Linux 发行版上运行 BitBake:

  • AlmaLinux 10

  • Fedora 44

  • Rocky Linux 10

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

useradd:将 GROUPMEMS_PARAM 赋值替换为 USERMOD_PARAM

从 4.20 版本开始,shadow 配方移除了 groupmems 命令。 usermod 命令能够实现 groupmems 提供的相同功能。

可以将 GROUPMEMS_PARAM 的赋值转换为 USERMOD_PARAM,将:

GROUPMEMS_PARAM:${PN} = "--add user --group group1; \
                         --add user --group group2"

替换为:

USERMOD_PARAM:${PN} = "--append --groups group1 user; \
                       --append --groups group2 user"

也可以简写为:

USERMOD_PARAM:${PN} = "--append --groups group1,group2 user"

更多信息见 b8da733。

移除 oe.utils.all_distro_features() 和 oe.utils.any_distro_features()

OpenEmbedded-Core (OE-Core) 已移除 oe.utils.all_distro_features() 和 oe.utils.any_distro_features() 函数。

可以将它们替换为 bb.utils.contains() 和 bb.utils.contains_any() 调用:

oe.utils.all_distro_features("x y", ...) -> bb.utils.contains("DISTRO_FEATURES", "x y", ...)

以及:

oe.utils.any_distro_features("x y", ...) -> bb.utils.contains_any("DISTRO_FEATURES", "x y", ...)

LICENSE 现在使用 SPDX License Expression

LICENSE 变量现在使用 SPDX License Expression, 取代过去使用的自定义许可证表达式。

新表达式要求进行以下变更:

  1. 将 & 运算符替换为 AND

  2. 将 | 运算符替换为 OR

  3. 任何不是有效 SPDX License Expression 的许可证值都会报错。

  4. 仍允许自定义许可证(非 SPDX License Identifier),但必须加上 LicenseRef- 前缀。在 LICENSE_PATH 中查找许可证文本 (带有或不带有 LicenseRef- 前缀)或使用 NO_GENERIC_LICENSE 的行为没有变化,仍可继续使用。

  5. CLOSED 许可证已弃用,使用时会产生警告。它实际上表示“无许可证” (通常意味着“保留所有权利”等),但更准确的定义方式是使用自定义许可证 提供实际的许可证文本。这样可以更一致地定义许可证文本,因为“无许可证”的 含义可能因司法管辖区而异。仍然可以将通用许可证文件放入 LICENSE_PATH, 并通过 LicenseRef- 许可证引用它。此时还需要提供 LIC_FILES_CHKSUM 值,指向该许可证文件。

  6. 不再允许通用的 PD (公有领域)许可证,因为它不是有效的 SPDX License Identifier。此外,“公有领域”的含义因司法管辖区而异, 因此不建议省略具体的许可证文本。应查找匹配的 SPDX 许可证 (SPDX License Check 网站可用于此目的),或结合 LicenseRef- 与 NO_GENERIC_LICENSE 指定实际的许可证文本。

  7. 现在应使用 WITH 运算符描述许可证例外,而不是使用特制的许可证标识符。 例如,原来的 Apache-2.0-with-LLVM-exception 应变为 Apache-2.0 WITH LLVM-exception。有效例外的列表见 SPDX License Exception。

  8. 由于用 WITH 取代了特制许可证,INCOMPATIBLE_LICENSE 的行为也有变化。 此变量中的条目仍匹配单个许可证(这一点不变),但也会匹配 WITH 表达式的 左侧(许可证部分)。若要允许带有特定 SPDX License Exception 的许可证, 必须将该 SPDX 许可证例外列入 INCOMPATIBLE_LICENSE_EXCEPTIONS。

    实际上,最常见的情况是使用 INCOMPATIBLE_LICENSE 排除 GPLv3 代码。 过去,这会允许所有 GPLv3-with-exception 许可证,因为这些特制许可证 不匹配 GPL-3.0* LGPL-3.0* 展开结果。现在,它们采用 GPL-3.0-or-later WITH exception 等形式,因此会匹配。 所以,应该允许的 GPLv3 例外都必须列入 INCOMPATIBLE_LICENSE_EXCEPTIONS。

目前仍会解析旧的许可证表达式语法,并将其自动转换为 SPDX License Expression,但会同时发出警告。这项兼容支持最终将被移除, 届时这些变量仅接受 SPDX License Expression。

小技巧

scripts/contrib/convert-spdx-licenses.py 脚本可以帮助转换 层 中的 LICENSE 表达式。

类文件中的函数移至 oe 库

许多类文件中的函数已移至 OpenEmbedded-Core (OE-Core) 的 oe 库:

  • kernel:

    • get_kernel*() 函数现在是 oe.kernel.get*()

    • 默认的内核构建 make 命令现在会设置 ARCH

    • 不再能通过 valid_arches 变量修改 ARCH

  • kernel-arch 不再导出或设置 ARCH 和 UBOOT_ARCH, 应改用 oe.kernel.map_kernel_arch(d) 和 oe.kernel.map_uboot_arch(d)

  • kernel、uboot-config:大多数情况下, ARCH 和 UBOOT_ARCH 不再导出到环境中

  • utils 类中的多种 Python 函数现在是 oe.utils.XXX() (见 meta/lib/oe/utils.py)

  • sanity 类中的大多数函数现在是 oe.sanity.XXX() (见 meta/lib/oe/sanity.py)

  • lsb_distro_identifier 现在始终为 oe.lsb.distro_identifier()

已移除的配方

  • libdazzle、libhandy:不再是 epiphany 配方的依赖,已移至 meta-gnome (位于 meta-openembedded 中) (32d91b6)

  • libpcre:已过时,由 libpcre2 取代 (057cccd)

  • libxfont:配方已过时,已有后继者 libxfont2; OpenEmbedded-Core (OE-Core) 中已无任何依赖它的内容 (4666968)

  • gptfdisk:OpenEmbedded-Core (OE-Core) 中已无任何依赖此配方的内容, 因此将其移除 (188d84b)

  • libclc:已由 mesa-libclc 取代,因此移除此配方 (5457c35)

  • makedepend:mesa 不再依赖 makedepend,因此移除此配方 (7e696b1)

  • python-six:移至 meta-python (372ee47)

已移除的变量

已移除的 PACKAGECONFIG 选项

已移除的类

  • linux-kernel-base.bbclass:其功能已移至 kernel-arch, 因此移除此类。使用此类的配方现在应改为继承 kernel-arch。

其他变更