首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Linux setcap命令在Yocto构建期间设置功能

使用Linux setcap命令在Yocto构建期间设置功能
EN

Stack Overflow用户
提问于 2017-04-18 15:50:32
回答 2查看 3.4K关注 0票数 2

我正在使用Yocto1.8构建一个linux系统。

我需要使用命令"setcap“在构建过程中设置文件功能,这是通过libcap包配方:2.25.bb?h=master引入的。

问题在于,菜谱提供了libcap包(仅为库),以及另一个名为libcap的子包,该包包含我需要使用的二进制文件。但是,我无法在我的食谱中构建或使用libcap-bin-native包作为依赖关系(使用依赖变量)。因此,每次我调用"setcap“二进制文件时,Yocto都使用主机二进制文件(Ubuntu14.04 64位),而不是构建系统二进制(因为它不存在)。

我需要知道如何将从libcap包构建的本机二进制文件包含在本机sysroot构建系统中,以便在执行配方时使用。

使用setcap命令的示例配方:

代码语言:javascript
复制
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中的库文件,而不是二进制文件。

如果我在我的食谱里用这个:

代码语言:javascript
复制
DEPENDS = "libcap-bin"

我发现了一个错误:

代码语言:javascript
复制
ERROR: Nothing PROVIDES 'libcap-bin'

我还看到这篇文章谈到了同样的主题:Linux capabilities with yocto

但是他使用Yocto > 2.3,而我使用Yocto1.8,我现在不能更新它。

有什么帮助吗?

PS:我已经更新了我的yocto构建系统,以便在IPK创建过程中保存ACL和扩展属性,并且它在IPK内部、rootfs内部以及闪烁后的目标上都在工作和保存。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-26 14:56:57

我找到了解决办法。我不得不把这个添加到libcap食谱中

代码语言:javascript
复制
PACKAGECONFIG_class-native = "attr"

由于生成的二进制文件(setcap&getcap)取决于libattr,因此必须手动配置。

我发现它已经为目标包配置好了

代码语言:javascript
复制
PACKAGECONFIG ??= "attr ${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'pam', '', d)}"

抱歉打扰了。

票数 1
EN

Stack Overflow用户

发布于 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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43476801

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档