如何在 /var/volatile/log/ 下创建一个新目录并在 Yocto build 中更改权限?

How to create a new directory under /var/volatile/log/ and change permission in Yocto build?

我想在 Yocto 构建中创建目录 /var/volatile/log/mydir 或 /var/log/mydir。根据 OE 手册,我们不应在任何配方文件中包含 /var 目录 (http://www.embeddedlinux.org.cn/OEManual/recipes_volatiles.html)。我试图在我的 bbappend 文件中包含这一行 install -m 0755 -d ${D}${localstatedir}/volatile/log/mydir,我可以确认它不起作用。

我的应用程序需要目录 /var/log/mydir 才能在该目录中写入易失性日志文件,例如 /var/log/mydir/myapp.log.

由于是易失性数据,我可以在systemd服务文件中创建目录如:

[Service]
Type=simple
UMask=0027
User=@MYUSER@
Group=@MYGROUP@
ExecStartPre=mkdir -p /var/log/mydir
ExecStart=/usr/bin/myapp

问题是由于权限被拒绝,myapp无法在启动后创建目录。如何在 Yocto 设置中处理此权限问题?

要在 /var/volatile/log 中创建目录,请在 .bbappend 文件中添加以下行

do_install_append() {
    install -d ${D}${localstatedir}/volatile/log/mydir
}

此行将在 /var/volatile/log

中创建一个目录

由于 volatile 目录是在运行时创建的,而不是在 bibake 编译期间创建的,因此正常的 install -d 不起作用。这些步骤允许我创建目录:

  1. 创建配置文件,例如myapp.conf 其中列出了所有需要的目录:
d  /var/log/mydir 0775 myuser mygroup -
  1. 然后,将这些行包含在 myapp.bbappend 文件的 do_install_append() 中。
install -d ${D}${sysconfdir}/tmpfiles.d/ 
install -m 0755 ${WORKDIR}/myapp.conf ${D}${sysconfdir}/tmpfiles.d/