版本 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:由较新的openssl1.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-filesbbappend 中), 现在应移除。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, 并附注释解释原因。