/ / Verwenden Sie den Linux-Befehl setcap, um die Funktionen während des Yocto-Builds festzulegen - Linux, Embedded-Linux, Yocto, Open-Embedded-Linux-Funktionen

Verwenden Sie den Linux-Befehl setcap, um Funktionen während Yocto build - linux, embedded-linux, yocto, open-embedded, linux - zu setzen

Ich verwende Yocto 1.8, um ein Linux-System zu erstellen.

Ich muss den Befehl verwenden "Setcapmsgstr "um Dateifunktionen während des Builds festzulegen, das über das Rezeptrezept" libcap "eingeführt wird: http://cgit.openembedded.org/openembedded-core/tree/meta/recipes-support/libcap/libcap_2.25.bb?h=master

Das Problem ist, dass das Rezept liefert Libcap Paket, das nur die Bibliothek ist, und ein anderes untergeordnetes Paket libcap-bin das enthält die Binaries, die ich verwenden muss. Aber ich konnte das nicht bauen oder benutzen libcap-bin-native Paket in meinem Rezept als Abhängigkeit (mit HÄNGT DAVON AB Variable). also jedes mal wenn ich anrufe "Setcap"binär, Yocto verwendet die Host-Binärdateien (Ubuntu 14.04 64-Bit) und nicht die Build-System-Dateien (da sie nicht vorhanden sind).

Ich muss wissen, wie die aus dem Paket libcap-bin erstellten systemeigenen Binärdateien in meinem systemeigenen Sysroot-Buildsystem enthalten sind, das während der Rezeptausführung verwendet wird.

Beispielrezept zur Verwendung des Befehls 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

Dieses Rezept funktioniert gut, außer dass es das verwendet Setcap Befehl von meinem Hostsystem (Ubuntu 14.04 64-Bit), das sich befindet "/ sbin / setcap"

Das Abhängigkeitspaket libcap-native enthält nur die Bibliotheksdateien in meinem systemeigenen Sysroot, nicht jedoch die Binärdateien.

Wenn ich das in meinem Rezept verwendet habe:

DEPENDS = "libcap-bin"

Ich habe diesen Fehler:

ERROR: Nothing PROVIDES "libcap-bin"

Ich habe auch gesehen, wie dieser Thread über dasselbe Thema sprach: Linux-Fähigkeiten mit Yocto

Aber er benutzt Yocto> 2.3 und ich verwende Yocto 1.8, und ich kann es jetzt nicht aktualisieren.

Irgendeine Hilfe?

PS: Ich habe mein Yocto-Build-System bereits aktualisiert, um ACLs und erweiterte Attribute während der IPK-Erstellung zu erhalten, und es funktioniert und wird innerhalb des IPK, innerhalb der Rootfs und nach dem Flashen auf dem Ziel beibehalten.

Antworten:

1 für die Antwort № 1

Ich habe die Lösung gefunden. Ich musste dies dem Rezept libcap hinzufügen

PACKAGECONFIG_class-native = "attr"

Da die generierten Binaries (setcap & getcap) von libattr abhängig sind, muss dies manuell konfiguriert werden.

Ich habe festgestellt, dass es bereits für das Zielpaket konfiguriert ist

PACKAGECONFIG ??= "attr ${@bb.utils.contains("DISTRO_FEATURES", "pam", "pam", "", d)}"

Entschuldigung für die Störung.


0 für die Antwort № 2

Ich kann hier noch nicht kommentieren.

Der Befehl setcap sollte von libcap-native bereitgestellt werden. Und überprüfen Sie noch einmal, ob es in tmp / work / x86_64-linux / libcap-native / 2.25-r0 / image / vorhanden ist:

$ 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 /

Sie finden setcap hier nach dem Entfernen des Präfixes:

$ 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