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 内、およびフラッシュ後のターゲット上で機能し、保持されています。