版本 3.0 (zeus)

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

初始化系统选择

过去切换初始化系统管理器需要设置多个变量。现在可通过 INIT_MANAGER 变量及 相应的包含文件(conf/distro/include/init-manager-*.conf)切换。 四个值均提供包含文件:"none"、"sysvinit"、"systemd" 和 "mdev-busybox"。 INIT_MANAGER 默认值 "none" 应能使当前设置继续工作,但建议显式设置它。

移除 LSB 支持

Linux Standard Base(LSB)标准已不再跟进发展,也不太适合嵌入式应用。 如有需要,可在独立层中继续支持,但目前核心已移除 LSB 支持。

因此,原来也用于测试替代配置的 poky-lsb 衍生发行版配置, 已由移除 LSB 部分的 poky-altcfg 发行版取代。

已移除的配方

以下配方已移除。

  • core-image-lsb-dev:属于已移除的 LSB 支持。

  • core-image-lsb:属于已移除的 LSB 支持。

  • core-image-lsb-sdk:属于已移除的 LSB 支持。

  • cve-check-tool:功能由 cve-update-db 配方和 cve-check 类取代。

  • eglinfo:不再维护。mesa-demos 中的 eglinfo 是合适且仍维护的替代方案。

  • gcc-8.3:移除 8.3,由 9.2 取代。

  • gnome-themes-standard:仅被已移除的 gtk+ 2.x 需要。

  • gtk+:GTK+ 2 已过时,由 gtk+3 取代。

  • irda-utils:已过时。Linux 内核 4.17 及以后版本已移除 IrDA 支持。

  • libnewt-python:libnewt 的 Python 支持并入主 libnewt 配方。

  • libsdl:由较新的 libsdl2 取代。

  • libx11-diet:已过时。

  • libxx86dga:移除过时的客户端库。

  • libxx86misc:冗余库,予以移除。

  • linux-yocto:移除已多余的 5.0 版本(现有 5.2 / 4.19)。

  • lsbinitscripts:属于已移除的 LSB 支持。

  • lsb:属于已移除的 LSB 支持。

  • lsbtest:属于已移除的 LSB 支持。

  • openssl10:由较新的 openssl 1.1 取代。

  • packagegroup-core-lsb:属于已移除的 LSB 支持。

  • python-nose:移除配方的 Python 2.x 版本。

  • python-numpy:移除配方的 Python 2.x 版本。

  • python-scons:移除配方的 Python 2.x 版本。

  • source-highlight:不再需要。

  • stress:由 stress-ng 取代。

  • vulkan:拆分为 vulkan-loader、vulkan-headers 和 vulkan-tools。

  • weston-conf:功能移至 weston-init。

打包变更

打包方式有以下变更。

  • Epiphany 浏览器从 packagegroup-self-hosted 移除。 build-appliance-image 已有很长时间不需要它,而且它会造成资源问题。

  • libcap-ng 的 Python 支持移至独立的 libcap-ng-python 配方, 简化不需要 Python 绑定时的构建流程。

  • libdrm 将 amdgpu.ids 文件放入独立的 libdrm-amdgpu 包。

  • python3:runpy 模块移至 python3-core,因为常见的 "python3 -m" 命令用法需要它。

  • distcc 提供独立的 distcc-client 和 distcc-server 包, 因为通常只需要其中一个,而不是两者。

  • python*-setuptools 配方将 pkg_resources 模块单独打包为 python-pkg-resources / python3-pkg-resources,因为该模块可独立于 setuptools 的其他部分使用。主 python-setuptools / python3-setuptools 包依赖新包;只有需要利用更细粒度时才需调整相应依赖。

CVE 检查

cve-check-tool 的功能由新的 cve-update-db 配方和 cve-check 类中的 内置功能取代。新实现使用 NVD JSON 数据源,而不是 cve-check-tool 原来使用的 已弃用 XML 数据源,并支持 CVSSv3 评分及其他改进。

此外,CVE_CHECK_CVE_WHITELIST 由 CVE_CHECK_WHITELIST 取代 (后者在 4.0 中由 CVE_CHECK_IGNORE 取代)。

BitBake 变更

BitBake 有以下变更。

  • addtask 现在正确验证依赖任务。过去会默默忽略无效任务,现在会产生警告。

  • 其他无效的 addtask 和 deltask 用法现在触发以下警告: "multiple target tasks arguments with addtask / deltask" 和 "multiple before/after clauses"。

  • "multiconfig" 前缀简化为 "mc"。"multiconfig" 仍可用,但未来可能移除。

  • bitbake -g 不再生成 recipe-depends.dot,因为其内容 (重新处理的 task-depends.dot)令人困惑。

  • 移除了 bb.build.FuncFailed 异常。过去 bb.build.exec_func() 遇到某些 其他异常时会抛出它;现在直接抛出实际的底层异常。若自定义类或使用 tinfoil 的 脚本调用 bb.build.exec_func(),应清理对 bb.build.FuncFailed 的引用。

  • bb.build.exec_func() 不再接受 "pythonexception" 参数,现始终抛出异常。 自定义类或脚本中的调用应移除此参数。

  • 不再使用 BB_SETSCENE_VERIFY_FUNCTION2。如有引用,应移除。

  • setscene 任务现在作为正常运行队列的一部分执行,因此移除了 RunQueueExecuteScenequeue 和 RunQueueExecuteTasks 事件。 自定义类或脚本中处理这两个事件的代码需要更新。

  • BB_HASHCHECK_FUNCTION 所用函数接收的参数发生了变化。 如使用自定义哈希检查函数,详情见 https://git.yoctoproject.org/poky/commit/?id=40a5e193c4ba45c928fccd899415ea56b5417725。

  • BB_TASKDEPDATA 和签名生成器类实现中的任务标识现在统一使用 "<fn>:<task>", 不再在部分位置使用 "." 分隔符,使代码各处保持一致。 自定义签名生成器类和读取 BB_TASKDEPDATA 的代码,需要将分隔符由 '.' 改为 ':'。

健全性检查

健全性检查有以下变更。

  • SRC_URI 现在检查两类存在问题的用法:

    • 使用 "${PN}" 前缀/后缀:只要使用 ${PN} 就会警告, 无论是否启用了多配置或其他会产生前后缀的功能,都必须修复。

    • GitHub 归档压缩包:它们不保证稳定,可能重新生成,导致 SRC_URI 校验和失效。建议改为获取正式发布压缩包, 或从实际 Git 仓库获取特定修订版本。

    以上任一情况现在默认触发警告。若要禁用此检查, 可从 WARN_QA 移除 src-uri-bad。

  • file-rdeps 运行时依赖检查不再递归展开 RDEPENDS, 因为无法保证完整计算,竞态会使错误时有时无。现在可能会报告此前通过递归 满足的运行时依赖缺失。例如,包 A 含有以 #!/bin/bash 开头的 shell 脚本, 却不依赖 bash;包 A 依赖包 B,而包 B 依赖 bash。 现在需要补充缺失的直接依赖来解决警告。

  • 在任何位置(通常是配方中)设置 DEPENDS_${PN} 都会报错, 因为 DEPENDS 不同于 RDEPENDS,不是软件包特定变量。 应直接设置 DEPENDS。

  • systemd 当前与 musl C 库配合不佳,因为上游仅正式支持与 glibc 链接。 因此,与 musl 一起构建 systemd 时会警告。

其他变更

其他变更如下。

  • gnome 类因作用已很小而移除。原来继承此类的配方应更新为:

    inherit gnomebase gtk-icon-cache gconf mime
    
  • 移除了 meta/recipes-kernel/linux/linux-dtb.inc。 此文件此前已弃用,建议直接在内核配方中设置 KERNEL_DEVICETREE, 且该文件此前仅产生警告。请移除指向它的 include 或 require。

  • TARGET_CFLAGS、TARGET_CPPFLAGS、TARGET_CXXFLAGS 和 TARGET_LDFLAGS 不再导出到外部环境。核心配方无需因此修改, 说明通常也不需要调整。但如果某个配方构建的软件要求设置这些环境变量, 构建就会失败。这时需在配方中显式导出相关变量,或修改脚本使其不再需要导出。

  • NATIVELSBSTRING 使用的主机发行版标识符必须全小写,即使不含版本号。 仅在不使用 uninative 和 SANITY_TESTED_DISTROS 时需要此变更。

  • base-files 配方将主机名写入 /etc/hosts 和 /etc/hostname 的操作, 现在位于主 do_install 函数,而不是 do_install_basefilesissue。 这样更容易覆盖后者,无需重复主机名逻辑。如果此前已在自定义 do_install_basefilesissue 中复制了该逻辑(例如在 base-files bbappend 中), 现在应移除。

  • wic --expand 现在使用逗号而不是连字符分隔 "key:value" 对。

    备注

    wic 命令行帮助尚未更新。

    如果脚本或命令用 wic --expand 指定多个 "key:value" 对,需要更新。

  • UEFI 镜像变量设置由多处集中到 conf/image-uefi.conf。 这不应影响现有配置,因为核心元数据中的 meta/conf/image-uefi.conf 仅设置默认值,仍可按原方式覆盖。

  • 移除了 conf/distro/include/world-broken.inc。 对于使用 musl C 库时需要禁用的配方,现在设置 COMPATIBLE_HOST_libc-musl, 并附注释解释原因。