我打算使用“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 不应该是必需的。
所以,总结一下我的问题:
- 如何获得使用 ext4 rootfs 映像制作的 sdcard 映像的功能?
- 我想使用一种不需要使用“sudo”的方式。
我正在使用 Yocto Krogoth,目前无法升级。