有没有办法在不修改 Yocto 的情况下为机器 ID 创建链接?

2024-03-24

我正在运行使用 Yocto Zeus (3.0.0) 构建的 Linux 4.14.149。我正在运行只读文件系统,最近发现一个问题,我的 UID (/etc/machine-id)每次启动都会发生变化(这个问题的结果 -https://superuser.com/questions/1668481/dhcpd-doesnt-issue-the-same-lease-after-reboot https://superuser.com/questions/1668481/dhcpd-doesnt-issue-the-same-lease-after-reboot ).

我试图使该文件成为用户数据分区的链接,以便它在重新启动后仍然存在。我尝试将链接作为base-files_%.bbappend这就是我为主机名建立链接的方式(有效)。这是该文件的内容(/var/local 是我们的用户数据分区,在 init 脚本中以 RW 方式安装):

FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"

hostname = ""
machine-id = ""

do_install_append() {
    ln -sfn /var/local/etc/hostname ${D}/${sysconfdir}/hostname
    ln -sfn /var/local/etc/machine-id ${D}/${sysconfdir}/machine-id
}

但当我尝试构建它时,我看到以下错误:

Exception: bb.process.ExecutionError: Execution of '/home/gen-ccm-root/workdir/tools/poky/build-dev/tmp/work/mi_nhep-poky-linux-gnueabi/mi-dev/1.0-r0/temp/run.read_only_rootfs_hook.50286' failed with exit code 1:
touch: cannot touch '/home/gen-ccm-root/workdir/tools/poky/build-dev/tmp/work/mi_nhep-poky-linux-gnueabi/mi-dev/1.0-r0/rootfs/etc/machine-id': No such file or directory
WARNING: exit code 1 from a shell command.

事实证明,有两件事与该文件有关;这rootfs-postcommands.bbclasssystemctlpython脚本(在meta/recipes-core/systemd/systemd-systemctl/systemctl中找到),前者(我认为)导致了错误。 do_rootfs 步骤失败。

创建此链接的​​最佳方式是什么?如果有选择的话,如果可能的话,我宁愿不修改 Yocto 源代码。


您可以通过定义自己的 rootfs post 命令并将其附加到ROOTFS_POSTPROCESS_COMMAND https://docs.yoctoproject.org/ref-manual/variables.html#term-ROOTFS_POSTPROCESS_COMMAND让它运行afterYocto 的内置read_only_rootfs_hook这创造了空/etc/machine-id文件使用touch.

# setup-machine-id-symlink.bbclass

ROOTFS_POSTPROCESS_COMMAND += "install_machine_id_symlink ;"
install_machine_id_symlink () {
    ln -sfn /var/local/etc/machine-id ${IMAGE_ROOTFS}/etc/machine-id
}


# your-image.bb

inherit setup-machine-id-symlink

The 图像生成 https://docs.yoctoproject.org/overview-manual/concepts.html#image-generation文档更详细地介绍了如何在构建过程中应用后处理命令。

Note:您需要确保尽早安装持久分区,以便读取/etc/machine-id不会导致符号链接损坏。


或者,使用绑定安装:

您还可以在运行时执行此操作,方法是安装在启动序列早期运行的 systemd 服务,并将持久机器 ID 挂载到 Yocto 在 rootfs 中提供的空白机器 ID 上。

使用 systemd 服务(而不是绑定挂载条目)/etc/fstab) 是必要的,因为您需要在创建绑定安装之前确保持久性计算机 ID 文件确实存在。不过,您也许可以利用tmpfiles.d https://www.freedesktop.org/software/systemd/man/tmpfiles.d.html而是这样做。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有没有办法在不修改 Yocto 的情况下为机器 ID 创建链接? 的相关文章

  • 如何使用QEMU学习ARM Linux内核开发?

    我想学习它 比如开发一些设备驱动程序等 并为此使用 QEMU 因为我没有像 beagle 板这样的 ARM 硬件板 你们有什么建议 我可以使用 Qemu 模拟器来学习 ARM 目标上的 Linux 内核吗 或者我应该尝试的任何其他选择 这取
  • 如何在嵌入式 Linux Raspberry Pi 上安装 GCC 和/或 apt

    我在树莓派 用于比特币矿工 上有一个预配置的 Linux 发行版 问题是这个发行版非常小 只有 busybox 用于基本命令 它没有包管理器 甚至没有 gcc 编译器 所以我的目标是在上面安装一个 gcc 编译器 这样我就可以进一步安装其他
  • 如何使用 yocto 构建简单的 qt 应用程序?

    I have yocto开发环境设置 我可以在其中进行 bitbake 并在目标中运行一个简单的 C 应用程序 现在我想尝试使用简单的 Qt 应用程序 当我执行时bitbake layers 显示层它在列表中显示meta qt5 meta
  • arecord 创建的多个文件

    我使用 buildroot 进行了自定义分发 并为 ARMv7 处理器提供了硬流 一切正常 除了 arecord D hw 0 0 fdat d 5 test wav 这会生成多个文件 其中有数千人 rw r r 1 root root 9
  • 如何检查内核中SMP是否启用或禁用?

    我想知道如何检查我正在运行的机器 内核是否配置为 SMP 当然 我可以查看内核 config文件并可以搜索它 但是 问题是假设我没有源代码 我将如何检查 SMP 配置 有没有proc文件来检查吗 下面说我没有多核 cat proc cpui
  • 如何仅使用串行控制台将二进制闪存文件发送到嵌入式系统?

    我有一个使用 ramdisk 启动的嵌入式 Linux 系统 因此它运行时没有可用的持久存储 它有闪存来存储内核和 ramdisk 唯一的连接是 RS 232 串行登录控制台 所以我受到其内置 busybox 提供的功能的限制 我想检索 r
  • yocto 中的机器特定层

    我想为一台新机器 称之为 A 添加一些从上游获取的层 主要是为了使用这些层提供的机器 A 配置文件 内核和 u boot 然而 新层有几个 bbappend 文件 还有 bb 文件 其版本与我的 yocto 项目中其他机器的层不同 例如 机
  • 如何指定使用 bitbake/yocto 构建哪个内核

    我正在努力使用 yocto daisy 生成新的 BSP 当我构建图像时 我收到以下警告 NOTE Resolving any missing task queue dependencies NOTE multiple providers
  • 从内核模块向用户空间通知 GPIO 中断[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我有一段代码可以检测内核模块中的 GPIO 中断 现在 我正在寻找一种机制 在检测到来自内核模块的 gpio 中断时通知用户空间 任何与不同选项
  • 添加条目到task_struct并初始化为默认值

    我想添加一个条目到进程控制块结构 task struct 让我们说一种标记某些进程的方法 我想将除 一些特殊进程 之外的所有进程的该字段初始化为 0 稍后通过调用sched setscheduler 我将为 特殊进程 设置此标志 有谁知道如
  • 如何在Linux中使用C或shell检查密码?

    我有一个用 C 编写的程序 运行在嵌入式 Linux 上 有时它想检查系统用户的密码 如果我能得到地穴盐 etc 密码 我可以使用 crypt 检查用户密码的正确性 有没有shell脚本可以帮助我检查密码 比如check passwd用户名
  • 如何编写需要内核源头文件的 BitBake 驱动程序配方?

    介绍 我有一个do install我为驱动程序编写的 BitBake 配方中的任务 我在其中执行自定义install脚本 任务失败 因为安装脚本无法在其中找到内核源头文件
  • u-boot:搬迁

    这是一个与u boot相关的基本问题 为什么 u boot 代码会自行重新定位 好吧 如果 u boot 是从 NOR flash 或启动 ROM 空间执行 那么这是有道理的 但如果它已经从 SDRAM 运行 为什么它必须再次重新定位自己呢
  • 从内核空间中的块设备读取

    我正在编写一个内核模块 需要从现有的块设备执行读取 dev 东西 有谁知道有任何其他模块可以执行这些操作 我可以用作参考吗 欢迎任何指点 Linux 2 6 30 如果你真的绝对必须那么使用filp open filp close vfs
  • 以非 root 用户身份使用 AWS CodeBuild

    有没有办法掉root用户开启AWS 代码构建 我们正在构建一个 Yocto 项目 如果我们是 root Bitbake 健全性检查 该项目将在 CodeBuild 上失败 我们绝望的做法也不起作用 build commands chmod
  • 开始使用 Real Time Linux 编程的最佳方式是什么?

    虽然我用C实现了很多项目 但我对操作系统完全陌生 我在 Discovery board STM32 上尝试了实时 Linux 并得到了闪烁 LED 的正确结果 但我并没有真正理解整个过程 因为我只是按照步骤操作 并且无法在互联网上找到每个步
  • dlopen 或 dlclose 未调用信号处理程序

    我在随机时间内收到分段错误 我注册了信号 但发生分段错误时未调用信号处理程序 include
  • QtWebEngine Quicknano 在嵌入式 Linux 中没有声音

    我已将 QtWebEngine 编译到我的 i MX6 嵌入式设备中 当我尝试使用 Quicknanobrowser 播放 YouTube 视频时 视频会播放 但没有声音 事实上 当我尝试播放音频文件时没有声音hpr dogphilosop
  • GDB 脚本编写为 MOCK

    我正在尝试使用 GDB 模拟一个函数 用于单元测试父函数 一种方法是在您想要模拟和使用 GDB 的函数中设置一个断点return命令 但是当 GDB 时我无法做同样的事情call使用命令 gdb b secret check Breakpo
  • Linux 内核使用的设备树文件 (dtb) 可视化工具? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个可以图形化表示Linux内核中使用的硬件设备树的工具 我正在尝试了解特定 Arm 芯片组

随机推荐

  • 如何在 Postgres 中运行通过 pgagent 创建的作业

    使用 pgagent 创建了一个作业 它已成功创建 但无法检查其状态是否正在运行 它都没有执行我在步骤中给出的指定代码 使用的版本 x86 64 pc linux gnu 上的 PostgreSQL 9 6 2 由 gcc GCC 4 4
  • python在加载模块时捕获NameError

    我试图捕获无法加载模块时发生的任何异常 当前的结果是 except 块没有被执行 import sys def loadModule module try import module except print Cannot load s F
  • 如何在DBeaver中使用sqlcmd GO批量分隔符?

    我需要使用GO1 https learn microsoft com en us sql t sql language elements sql server utilities statements goDBeaver IDE 中的熟食器
  • 获取属于任意类型的单元名称(TRttiType)

    我需要获取任何单元的名称 命名空间 TRttiType http docwiki embarcadero com CodeSamples en Category 3aRtti TRttiType 到目前为止 我已经尝试了以下方法 1 使用P
  • iTunes Connect 预发布版本无效。

    当尝试提交应用程序存档时 我在 Xcode 中收到以下错误 错误 ITMS 9000 预发布列车无效 列车版本 2 1 5 已关闭以提交新版本 有人有解决方案吗 该版本已经等待审核 我拒绝了它 现在正在尝试提交新版本 版本号相同 但我增加了
  • 覆盖 Primefaces 特定小部件的方法

    我想覆盖 Primefaces 数据表组件的函数 根据这个问题 如何在基于 widgetVar 的 Primefaces 组件中查找和 或覆盖 JavaScript https stackoverflow com questions 275
  • 如何强制内联div保持在同一行?

    我正在尝试制作三列布局 我希望左列和右列的宽度仅与其子项内容一样宽 我希望中心柱能够扩大以填充剩余空间 我正在尝试以下操作 概述 下面包含 jsfiddle 链接 colLeft display inline float left colC
  • 在 .NET 异常中保留原始 StackTrace/LineNumbers

    了解之间的区别throw ex and throw 为什么在这个例子中保留了原来的StackTrace static void Main string args try LongFaultyMethod catch System Excep
  • Windows Phone 应用程序缺少 EventToCommand

    我正在使用 MVVM Light 构建 Windows Phone 8 应用程序 到目前为止 一切都很好 但是 当我使用 EventToCommand 时 出现多个错误 一个类似的问题在这里迁移到 SL5 的 v4 时 EventToCom
  • 为什么 C++ 中不允许初始化整型成员变量(不是 const static)?

    当我尝试在类定义中初始化 int 成员变量时 我的 C 编译器会抱怨 它告诉我们 只有静态常量整型数据成员才能在类中初始化 您能否解释一下此限制背后的理由 如果可能的话 举例说明 因为目前的标准是不允许的 根据比亚恩的说法 http www
  • WP7 在地图上拖动图钉

    有谁知道如何在运行 Mango 的 WP7 客户端上的地图上实现可拖动图钉 我有一个图钉绑定到地图上的地理位置 我希望用户能够将其拖动到地图上并记录其新位置 我见过一些资源 但它们用于非 WP7 Bing 地图控制 任何帮助 将不胜感激 T
  • 如何使用 Asset Pipeline 从非标准目录传送字体

    我正在尝试将 Fontawesome 包含在 Rails 4 应用程序中 但资产并未进入资产管道 然而 这些字体并没有在生产中使用 我不明白为什么 文件结构组织 我所有的资产都存储在 assets components因此 Fontawes
  • Node.js 公牛队列中的作业陷入“等待”状态

    我有一堆工作在公牛队列中 其中一个被卡住了 1 个多小时 通常需要大约 2 分钟才能运行 但没有失败 我无法使用我使用的 bull arena UI 将作业从活动状态中删除 因此我删除了 Redis 中活动作业的密钥 这消除了卡住的活动作业
  • php 中的图像验证码

    下面是一个程序的源代码 谁能帮我弄清楚程序的工作原理
  • 在 Android 手机中打开键盘时图像大小调整问题

    感谢您的阅读 我是cordova开发的新手 我正在使用framework7使用cordova开发混合应用程序 我将背景放在登录表单上 但在移动设备中 当打开键盘进行书写时 背景图像会调整大小 我想要修复打开 Android 键盘时未调整大小
  • r-将列表列转换为字符向量,其中列表是字符

    我正在尝试将列表转换为单个字符值 或者基本上从这里开始 test lt data frame a c 1 1 1 2 2 2 b c a b c d e f gt group by a gt summarise b list b to th
  • 在 Elasticsearch 和 Lucene 4.4 中使用 Shingles 和停用词

    在我正在构建的索引中 我有兴趣运行查询 然后 使用方面 返回该查询的带状疱疹 这是我在文本上使用的分析器 settings analysis analyzer shingleAnalyzer tokenizer standard filte
  • 如何检查 AlarmManager 是否已经设置了闹钟?

    当我的应用程序启动时 我希望它检查特定警报 通过 AlarmManager 注册 是否已设置并正在运行 谷歌的结果似乎表明没有办法做到这一点 这仍然正确吗 我需要执行此检查 以便在采取任何操作创建新警报之前向用户提供建议 跟进 ron 发表
  • 如何将数据直接写入显存?

    程序员有什么办法可以直接将数据写入显存吗 我知道操作系统对此非常严格 但是某些类型的应用程序 例如视频播放器或电脑游戏 如何将其数据直接写入视频内存 我知道有很多知名的库 例如 OpenGL 但它们毕竟只是普通的库 它们和我和你写的程序没有
  • 有没有办法在不修改 Yocto 的情况下为机器 ID 创建链接?

    我正在运行使用 Yocto Zeus 3 0 0 构建的 Linux 4 14 149 我正在运行只读文件系统 最近发现一个问题 我的 UID etc machine id 每次启动都会发生变化 这个问题的结果 https superuse