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 № 1Ich 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