对使用 Yocto 的 install -m 和 install -d 感到困惑
Confused about install -m and install -d using Yocto
我已经接管了一个 Yocto 项目,在一个 .bb 配方文件中,我看到以下行在图像中安装新目录:
do_install() {
install -m 0755 -d ${DEPLOY_DIR_IMAGE}/app
install -m 0755 -d ${DEPLOY_DIR_IMAGE}/app/apiary
install -m 0755 -d ${DEPLOY_DIR_IMAGE}/app/lib
install -m 0755 -d ${DEPLOY_DIR_IMAGE}/app/config
install -m 0755 -d ${DEPLOY_DIR_IMAGE}/app/scripts
install -m 0755 -d ${DEPLOY_DIR_IMAGE}/app/keys
这行得通,但我很困惑。根据我对 Yocto 的阅读和做 do_install,我认为 -m 选项仅用于安装文件而不是目录。
执行 install -m 0755 -d 的效果是什么,-m 和 -d 安装命令的选项?
此外,为什么没有像我看到的大多数其他目录安装中那样的 ${D} 变量?
我通常不会求助于 Stack Overflow 来解决这样的问题,但有太多我不理解的不一致之处,而且很难找到答案。
相关任务定义为 shell 函数。 install
命令是一个 shell 命令,不是任何 Yocto- 或 BitBake-specific,因此您应该查看 its docs 以获得启发,而不是依赖 BitBake 文档或示例.然而,特别是在 Yocto 的上下文中,您应该查看 install
程序的 GNU coreutils 版本的文档(如上链接),这是您总是会在 Linux 上找到的文档系统.*
From my reading about Yocto and doing do_install, I thought that the -m
option is only for installing files and not directories.
除了之前没有看到它应用于目录之外,我不确定是什么让您这么想。
What is the effect of doing install -m 0755 -d
, both the -m
and -d
options with the install command?
-m
选项设置已安装对象的模式(access-control 位)。目录与普通文件一样具有模式,-m
选项对于安装目录的含义与安装普通文件的含义相同。
-d
选项指定为安装指定的名称将作为要创建的目录,以及指定路径中任何缺失的目录。正如@jww 在评论中观察到的,效果类似于 mkdir -p
.
这些选项是正交的。当一起使用时,它们的效果以自然的方式组合在一起:创建指定的目录,如果需要,还会创建父目录,并且所有创建的目录都分配有指定的模式。但是,将模式显式设置为 0755
是多余的,因为这是默认设置。这可能就是您不习惯看到用于目录的 -m
选项的原因。
Also, why is there no ${D} variable like in the majority of other directory installations which I see?
do_install
的 Yocto 规范说它应该安装相对于 ${D}
的文件,而 the variable DEPLOY_DIR_IMAGE
指的是 ready-to-install 图像的位置。安装到 ${DEPLOY_DIR_IMAGE}
似乎是错误的做法,但这并不一定意味着它不会产生预期的最终效果。或者,该食谱可能只是为某些更有意义的旧版本 BitBake 编写的。无论如何,整理细节将是比我准备为您执行的更深入和更复杂的分析。
*install
未被 POSIX 标准化。 GNU 版本的灵感来自 BSD 的同名程序,其当前版本具有相似的选项和行为,特别是关于 -m
和 -d
选项。
我已经接管了一个 Yocto 项目,在一个 .bb 配方文件中,我看到以下行在图像中安装新目录:
do_install() {
install -m 0755 -d ${DEPLOY_DIR_IMAGE}/app
install -m 0755 -d ${DEPLOY_DIR_IMAGE}/app/apiary
install -m 0755 -d ${DEPLOY_DIR_IMAGE}/app/lib
install -m 0755 -d ${DEPLOY_DIR_IMAGE}/app/config
install -m 0755 -d ${DEPLOY_DIR_IMAGE}/app/scripts
install -m 0755 -d ${DEPLOY_DIR_IMAGE}/app/keys
这行得通,但我很困惑。根据我对 Yocto 的阅读和做 do_install,我认为 -m 选项仅用于安装文件而不是目录。
执行 install -m 0755 -d 的效果是什么,-m 和 -d 安装命令的选项?
此外,为什么没有像我看到的大多数其他目录安装中那样的 ${D} 变量? 我通常不会求助于 Stack Overflow 来解决这样的问题,但有太多我不理解的不一致之处,而且很难找到答案。
相关任务定义为 shell 函数。 install
命令是一个 shell 命令,不是任何 Yocto- 或 BitBake-specific,因此您应该查看 its docs 以获得启发,而不是依赖 BitBake 文档或示例.然而,特别是在 Yocto 的上下文中,您应该查看 install
程序的 GNU coreutils 版本的文档(如上链接),这是您总是会在 Linux 上找到的文档系统.*
From my reading about Yocto and doing do_install, I thought that the
-m
option is only for installing files and not directories.
除了之前没有看到它应用于目录之外,我不确定是什么让您这么想。
What is the effect of doing
install -m 0755 -d
, both the-m
and-d
options with the install command?
-m
选项设置已安装对象的模式(access-control 位)。目录与普通文件一样具有模式,-m
选项对于安装目录的含义与安装普通文件的含义相同。
-d
选项指定为安装指定的名称将作为要创建的目录,以及指定路径中任何缺失的目录。正如@jww 在评论中观察到的,效果类似于 mkdir -p
.
这些选项是正交的。当一起使用时,它们的效果以自然的方式组合在一起:创建指定的目录,如果需要,还会创建父目录,并且所有创建的目录都分配有指定的模式。但是,将模式显式设置为 0755
是多余的,因为这是默认设置。这可能就是您不习惯看到用于目录的 -m
选项的原因。
Also, why is there no ${D} variable like in the majority of other directory installations which I see?
do_install
的 Yocto 规范说它应该安装相对于 ${D}
的文件,而 the variable DEPLOY_DIR_IMAGE
指的是 ready-to-install 图像的位置。安装到 ${DEPLOY_DIR_IMAGE}
似乎是错误的做法,但这并不一定意味着它不会产生预期的最终效果。或者,该食谱可能只是为某些更有意义的旧版本 BitBake 编写的。无论如何,整理细节将是比我准备为您执行的更深入和更复杂的分析。
*install
未被 POSIX 标准化。 GNU 版本的灵感来自 BSD 的同名程序,其当前版本具有相似的选项和行为,特别是关于 -m
和 -d
选项。