/ / Użyj polecenia setcap Linux, aby ustawić możliwości podczas budowania Yocto - linux, embedded-linux, yocto, openembedded, linux-functions

Użyj polecenia setcap Linux, aby ustawić możliwości podczas kompilacji Yocto - linux, embedded-linux, yocto, openembedded, linux-functions

Używam Yocto 1.8 do zbudowania systemu Linux.

Muszę użyć polecenia "setcap"aby ustawić możliwości plików podczas kompilacji, które są wprowadzane przez przepis pakietu libcap: http://cgit.openembedded.org/openembedded-core/tree/meta/recipes-support/libcap/libcap_2.25.bb?h=master

Problem polega na tym, że przepis zapewnia libcap pakiet, który jest tylko biblioteką i nazwany innym podpakietem libcap-bin który zawiera pliki binarne, których potrzebuję użyć. Ale nie mogłem go zbudować ani używać libcap-bin-native pakiet wewnątrz mojego przepisu jako zależność (używając ZALEŻY zmienna). więc za każdym razem, gdy dzwonię "setcap"binarny, Yocto używa binarnych hostów (64-bitowy system operacyjny Ubuntu 14.04), a nie systemowych (jak nie ma).

Muszę wiedzieć, jak dołączyć natywne binaria zbudowane z pakietu libcap-bin w moim natywnym systemie plików sysroot do użycia podczas wykonywania receptury.

Przykładowa receptura do użycia polecenia 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

Ten przepis działa dobrze, z wyjątkiem tego, że używa setcap polecenie z mojego systemu hosta (64-bitowy system Ubuntu 14.04), który znajduje się "/ sbin / setcap"

Pakiet zależności libcap-native zawiera tylko pliki bibliotek w moim rodzimym sysroot, ale nie pliki binarne.

Jeśli użyłem tego w moim przepisie:

DEPENDS = "libcap-bin"

Mam ten błąd:

ERROR: Nothing PROVIDES "libcap-bin"

Widziałem także ten wątek mówiący o tym samym temacie: Możliwości systemu Linux z yocto

Ale używa Yocto> 2.3 i używam Yocto 1.8, i nie mogę go teraz zaktualizować.

Jakaś pomoc?

PS: Już zaktualizowałem mój system budowania yocto, aby zachować listy ACL i rozszerzone atrybuty podczas tworzenia IPK, i to działa i jest zachowane wewnątrz IPK, wewnątrz rootfs i na celu po flashowaniu.

Odpowiedzi:

1 dla odpowiedzi № 1

Znalazłem rozwiązanie. Musiałem dodać to do przepisu libcap

PACKAGECONFIG_class-native = "attr"

Ponieważ wygenerowane pliki binarne (setcap i getcap) zależą od libattr, należy to skonfigurować ręcznie.

Odkryłem, że jest już skonfigurowany dla pakietu docelowego

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

Przepraszam, że przeszkadzam.


0 dla odpowiedzi nr 2

Nie mogę jeszcze komentować, więc komentarz tutaj.

Polecenie setcap powinno być zapewnione przez libcap-native. I sprawdź dokładnie, czy istnieje w tmp / work / x86_64-linux / libcap-native / 2.25-r0 / image /:

$ znajdź 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

Możesz znaleźć setcap tutaj po usunięciu prefiksu:

$ 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