在Yocto ext4镜像中设置Linux能力

5

我打算使用 "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会显示正确的cap设置。但是,在最终运行的sdcard映像中仍然无法获得功能。
此外,如果我使用-o loop将rootfs ext4(用于创建最终sdcard映像)挂载到目录上,则看不到我的二进制文件中的功能。 对我来说,当使用mkfs.ext4创建ext4时,似乎功能会丢失。
我必须附加sudo以设置cap,否则它会抱怨说“无法设置CAP_SETFCAP有效能力:操作不允许”。尽管我的理解是IMAGE_PREPROCESS_COMMAND命令使用fakeroot运行,因此不需要sudo。
因此,总结我的问题:
1.如何在使用ext4 rootfs映像制作的sdcard映像上获取功能? 2.我想使用不需要使用“sudo”的方法。
我正在使用Yocto Krogoth,目前无法升级。

当您挂载 ext4 映像时,可能需要添加 -o user_xattr 吗? - Nayfe
有停留在Krogoth的理由吗?也许可以在qemu板上尝试在Rocko上做同样的事情,以检查问题是否得到解决?您还可以加入freenode irc上的#yocto频道获取更多帮助。 - Nayfe
@Nayfe 升级 Yocto 可以解决 fakeroot setcap 问题,因为这里有一个修补程序可以修复它:链接 - Rogue
主要问题仍然是在poky/meta/classes/image_types.bbclass中调用mkfs.ext4时,从{IMAGE_ROOTFS}目录复制到ext4镜像时会丢失权限。据我所知,即使在Sumo版本中也没有改变这个问题。 - Rogue
@Nayfe 感谢您的建议。我尝试使用了 e2fsprogs 1.43.8,但是没有成功。 - Rogue
显示剩余3条评论
1个回答

0

你真的在最终图像上测试过它,还是在从yocto构建中的rootfs文件夹中测试过?

我在rootfs文件夹中的文件上运行了getcap命令,但没有设置任何内容。

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

因此,这些属性不会为“rootfs”文件夹中的文件设置,但会在创建镜像/rootfs时添加。

您可以在配方中使用setcap,需要添加:

DEPENDS = "libcap-native"

在你的菜谱中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接