4

我打算使用“setcap”在 Yocto 映像中包含的二进制文件上设置一些功能。出于某种原因,这里提到的解决方案对我不起作用: Linux 功能与 yocto 。我通过在 rootfs 创建目录中的二进制文件上运行“getcap”来检查这一点:

getcap ${IMAGE_ROOTFS}/usr/bin/mybinary

不返回任何东西。我也没有在最终运行的 sdcard 映像中找到这些功能。

接下来我尝试了使用 IMAGE_PREPROCESS_COMMAND 的方法。我将 setcap 命令封装在小的 shell 函数中,例如:

my_setcap_function() {
    sudo setcap cap_ipc_owner+ep ${IMAGE_ROOTFS}/usr/bin/mybinary
}

并将函数名称附加到 IMAGE_PREPROCESS_COMMAND。这适用于现在在 {IMAGE_ROOTFS} 目录中的我的二进制文件上运行 getcap 确实显示正确的大写设置。但是我仍然没有获得最终运行的 sdcard 映像中的功能。

此外,如果我使用 -o 循环将 rootfs ext4(用于创建最终的 sdcard 映像)安装在目录上,我看不到二进制文件的功能。在我看来,当使用 mkfs.ext4 创建 ext4 时,这些功能会以某种方式丢失。

我必须将 sudo 附加到 setcap,否则它会抱怨说“无法设置 CAP_SETFCAP 有效功能:不允许操作”。虽然我的理解是 IMAGE_PREPROCESS_COMMAND 命令是使用 fakeroot 运行的,所以这个 sudo 不应该是必需的。

所以,总结一下我的问题:

  1. 如何获得使用 ext4 rootfs 映像制作的 sdcard 映像的功能?
  2. 我想使用一种不需要使用“sudo”的方式。

我正在使用 Yocto Krogoth,目前无法升级。

4

1 回答 1

0

您是否真的在最终图像或 yocto 构建的 rootfs 文件夹中对其进行了测试?

我在 rootfs 文件夹中的文件上运行 getcap,并且没有设置任何内容。

因为 yocto 使用伪 lib 来拦截 chown、chmod 调用,在 sqlite db 中跟踪它们(使用 LD_PRELOAD 进行拦截)。

因此,没有为“rootfs”文件夹中的文件设置此属性,而是在创建图像/rootfs 时添加。

您可以在配方中使用 setcap,您必须添加

DEPENDS = "libcap-native"

在你的食谱里。

于 2020-02-14T10:33:33.297 回答