2

Yocto 1.8 を使用して Linux システムを構築しています。

libcap パッケージのレシピ ( http://cgit.openembedded.org/openembedded-core/tree/meta/recipes-support/libcap/libcap_2 ) を介して導入される、ビルド中にコマンド「setcap 」を使用してファイルの機能を設定する必要があります。 25.bb?h=マスター

問題は、レシピがライブラリのみであるlibcapパッケージと、使用する必要があるバイナリを含むlibcap-binと呼ばれる別のサブパッケージを提供することです。しかし、レシピ内のlibcap-bin-nativeパッケージを依存関係としてビルドまたは使用できませんでした ( DEPENDS変数を使用)。そのため、「setcap」バイナリを呼び出すたびに、Yocto はビルド システムのバイナリではなくホスト バイナリ (Ubuntu 14.04 64 ビット) を使用します (存在しないため)。

libcap-bin パッケージからビルドされたネイティブ バイナリを、レシピの実行中に使用されるネイティブ 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 "にあるホスト システム (Ubuntu 14.04 64 ビット)のsetcapコマンドを使用する点が異なります。

依存パッケージ libcap-native には、ネイティブ sysroot 内のライブラリ ファイルのみが含まれますが、バイナリは含まれません。

これをレシピ内で使用した場合:

DEPENDS = "libcap-bin"

このエラーが発生しました:

ERROR: Nothing PROVIDES 'libcap-bin'

このスレッドでも同じトピックについて話しているのを見ました: Linux capabilities with yocto

しかし、彼は Yocto > 2.3 を使用しており、私は Yocto 1.8 を使用しており、今は更新できません。

何か助けはありますか?

PS: IPK の作成中に ACL と拡張属性を保持するように yocto ビルド システムを既に更新しました。IPK 内、rootfs 内、およびフラッシュ後のターゲット上で機能し、保持されています。

4

2 に答える 2