Я использую Yocto 1.8 для сборки Linux-системы.
Мне нужно использовать команду «setcap» для установки возможностей файлов во время сборки, которая вводится через рецепт пакета libcap: http://cgit.openembedded.org/openembedded-core/tree/meta/recipes-support/libcap/libcap_2.25.bb?h=master
Проблема в том, что рецепт предоставляет пакет libcap, который является только библиотекой, и другой подпакет, называемый libcap-bin, который содержит двоичные файлы, которые мне нужно использовать. Но я не мог собрать или использовать пакет libcap-bin-native внутри своего рецепта в качестве зависимости (с использованием переменной DEPENDS). поэтому каждый раз, когда я вызываю двоичный файл "setcap", Yocto использует двоичные файлы хоста (64-разрядная версия Ubuntu 14.04), а не системные файлы сборки (поскольку их там нет).
Мне нужно знать, как включить собственные двоичные файлы, созданные из пакета 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
Этот рецепт работает нормально, за исключением того, что он использует команду setcap из моей хост-системы (64-разрядная версия Ubuntu 14.04), которая находится в "/ sbin / setcap".
Пакет зависимостей libcap-native включает только файлы библиотеки внутри моего собственного sysroot, но не двоичные файлы.
Если бы я использовал это в своем рецепте:
DEPENDS = "libcap-bin"
У меня такая ошибка:
ERROR: Nothing PROVIDES 'libcap-bin'
Я также видел эту ветку, посвященную той же теме: Возможности Linux с yocto
Но он использует Yocto> 2.3, а я использую Yocto 1.8, и я не могу его обновить прямо сейчас.
Любая помощь?
PS: Я уже обновил свою систему сборки yocto, чтобы сохранить списки управления доступом и расширенные атрибуты во время создания IPK, и она работает и сохраняется внутри IPK, внутри rootfs и на целевой машине после перепрошивки.