我打算使用“setcap”为Yocto图像中包含的二进制文件设置一些功能。出于某种原因,这里提到的解决方案对我不起作用: Linux capabilities with yocto 。我已经通过在rootfs创建目录中的二进制文件上运行“getcap”来检查它:
<div class="switch switch-1" align="center">
<label>
1 OFF
<input id="Switch1" type="checkbox">
<span class="lever"></span>
1 ON
</label>
</div>
<div class="switch switch-2" align="center">
<label>
2 OFF
<input id="Switch2" type="checkbox">
<span class="lever"></span>
2 ON
</label>
</div>
不会返回任何内容。我也没有在最终运行的SD卡图像中找到这些功能。
接下来,我尝试使用IMAGE_PREPROCESS_COMMAND方法。我在小shell函数中包装了setcap命令,例如:
getcap ${IMAGE_ROOTFS}/usr/bin/mybinary
并将函数名称附加到IMAGE_PREPROCESS_COMMAND。这在某种程度上起作用,现在在{IMAGE_ROOTFS}目录中运行我的二进制文件上的getcap确实显示了正确的上限集。但是我仍然没有在最终运行的SD卡图像中获得这些功能。
另外如果我使用-o loop在目录上挂载rootfs ext4(用于创建最终的sdcard图像),我看不到我的二进制文件的功能。 在我看来,当使用mkfs.ext4创建ext4时,能力会以某种方式丢失。
我不得不将sudo附加到setcap,否则它会抱怨“无法设置CAP_SETFCAP有效功能:不允许操作”。虽然我的理解是IMAGE_PREPROCESS_COMMAND命令是使用fakeroot运行的,所以不应该要求这个sudo。
所以,总结一下我的问题:
我正在使用Yocto Krogoth,目前无法升级。
答案 0 :(得分:0)
您真的在yocto版本的最终映像或rootfs文件夹中对其进行了测试吗?
我在rootfs文件夹中的文件上运行getcap,那里没有任何设置。
因为yocto使用伪lib来拦截chown,chmod调用,并在sqlite db中跟踪它们(使用LD_PRELOAD进行拦截)。</ p>
因此,没有为“ rootfs”文件夹中的文件设置此属性,而是在创建image / rootfs时添加了该属性。
您可以在配方中使用setcap,必须添加
DEPENDS = "libcap-native"
在您的食谱中。