我打算使用“setcap”对Yocto镜像中包含的二进制文件设置一些功能。由于某种原因,此处提到的解决方案对我不起作用:
Linux capabilities with 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。

因此,总结一下我的问题:
  • 如何获得使用ext4 rootfs镜像制作的sdcard镜像的功能?
  • 我想使用一种不需要使用“sudo”的方式。

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

    最佳答案

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

    我在rootfs文件夹中的文件上运行getcap,那里没有任何设置。

    由于yocto使用伪lib拦截chown,chmod调用,因此请在sqlite db中跟踪它们(使用LD_PRELOAD进行拦截)。

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

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

    DEPENDS = "libcap-native"
    

    在你的食谱中。

    10-08 00:07