【发布时间】:2021-10-15 00:57:51
【问题描述】:
我正在运行使用 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)。
我正在尝试使该文件成为指向用户数据分区的链接,以便它在重新启动后仍然存在。我尝试将链接作为base-files_%.bbappend 的一部分,这是我为主机名创建链接的方式(有效)。这是该文件的内容(/var/local 是我们的用户数据分区,在初始化脚本中以 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.bbclass 和 systemctl python 脚本(在 meta/recipes-core/systemd/systemd-systemctl/systemctl 中找到),其中前者(我认为)导致错误。它在 do_rootfs 步骤中失败了。
创建此链接的最佳方式是什么?如果可以选择,我宁愿不修改 Yocto 源代码。
【问题讨论】:
标签: embedded-linux yocto