我正在使用Yocto1.8构建一个linux系统。
我需要使用命令"setcap“在构建过程中设置文件功能,这是通过libcap包配方:2.25.bb?h=master引入的。
问题在于,菜谱提供了libcap包(仅为库),以及另一个名为libcap的子包,该包包含我需要使用的二进制文件。但是,我无法在我的食谱中构建或使用libcap-bin-native包作为依赖关系(使用依赖变量)。因此,每次我调用"setcap“二进制文件时,Yocto都使用主机二进制文件(Ubuntu14.04 64位),而不是构建系统二进制(因为它不存在)。
我需要知道如何将从libcap包构建的本机二进制文件包含在本机sysroot构建系统中,以便在执行配方时使用。
使用setcap命令的示例配方:
DESCRIPTION = "Apply CAPs on files"
SECTION = "bin"
LICENSE = "CLOSED"
do_install() {
install -d ${D}${bindir}
touch ${D}${bindir}/testacl
}
DEPENDS = "libcap libcap-native"
#New task will be added to each recipe to apply attributes inside ipks
fakeroot do_setcaps() {
setcap 'cap_sys_admin,cap_sys_rawio+ep' ${WORKDIR}/packages-split/${PN}${bindir}/testacl
}
#Adding the new task just before do_package_write_ipk task
addtask setcaps before do_package_write_ipk after do_packagedata此菜谱运行良好,只不过它使用了位于"/sbin/setcap“的主机系统(Ubuntu14.04 64位)中的setcap命令。
依赖包libcap本机只包括我的本机sysroot中的库文件,而不是二进制文件。
如果我在我的食谱里用这个:
DEPENDS = "libcap-bin"我发现了一个错误:
ERROR: Nothing PROVIDES 'libcap-bin'我还看到这篇文章谈到了同样的主题:Linux capabilities with yocto
但是他使用Yocto > 2.3,而我使用Yocto1.8,我现在不能更新它。
有什么帮助吗?
PS:我已经更新了我的yocto构建系统,以便在IPK创建过程中保存ACL和扩展属性,并且它在IPK内部、rootfs内部以及闪烁后的目标上都在工作和保存。
发布于 2017-04-26 14:56:57
我找到了解决办法。我不得不把这个添加到libcap食谱中
PACKAGECONFIG_class-native = "attr"由于生成的二进制文件(setcap&getcap)取决于libattr,因此必须手动配置。
我发现它已经为目标包配置好了
PACKAGECONFIG ??= "attr ${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'pam', '', d)}"抱歉打扰了。
发布于 2017-04-19 09:50:03
我还不能发表评论,所以在这里发表评论。
命令集应该由libcap本机提供。另外,请再次检查tmp/work/x86_64-linux/libcap-native/2.25-r0/image/:中是否存在
$ find tmp/work/x86_64-linux/libcap-native/2.25-r0/sysroot-destdir/ -name setcap tmp/work/x86_64-linux/libcap-native/2.25-r0/sysroot-destdir/buildarea3/kkang/cgp9/builds/qemumips64-Apr24/tmp/sysroots/x86_64-linux/usr/sbin/setcap
在移除前缀后,您可以在这里找到setcap:
$ ls /buildarea3/kkang/cgp9/builds/qemumips64-Apr24/tmp/sysroots/x86_64-linux/usr/sbin/setcap /buildarea3/kkang/cgp9/builds/qemumips64-Apr24/tmp/sysroots/x86_64-linux/usr/sbin/setcap
https://stackoverflow.com/questions/43476801
复制相似问题