Настройка возможностей Linux в образе Yocto ext4

Я намерен установить некоторые возможности для двоичных файлов, включенных в образ Yocto, с помощью «setcap». По какой-то причине упомянутые здесь решения не сработали для меня: возможности Linux с yocto . Я проверил это, запустив «getcap» в моем двоичном файле в каталоге создания rootfs:

getcap ${IMAGE_ROOTFS}/usr/bin/mybinary

ничего не возвращает. Я также не нахожу возможности в окончательном рабочем образе SD-карты.

Затем я попробовал подход с использованием IMAGE_PREPROCESS_COMMAND. Я завернул команды setcap в небольшие функции оболочки, такие как:

my_setcap_function() {
    sudo setcap cap_ipc_owner+ep ${IMAGE_ROOTFS}/usr/bin/mybinary
}

и добавьте имена функций к IMAGE_PREPROCESS_COMMAND. Это работает в той степени, в которой теперь запуск getcap для моего двоичного файла в каталоге {IMAGE_ROOTFS} показывает правильный набор заглавных букв. Однако я до сих пор не получаю возможности в окончательном рабочем образе SD-карты.

Кроме того, если я монтирую rootfs ext4 (который используется для создания окончательного образа SD-карты) в каталоге с помощью цикла -o, я не вижу возможности моего двоичного файла. Мне кажется, возможности как-то теряются при создании ext4 с помощью mkfs.ext4.

Мне пришлось подключить sudo к setcap, потому что в противном случае он жалуется, что «невозможно установить эффективную возможность CAP_SETFCAP: операция не разрешена». Хотя я понимаю, что команды IMAGE_PREPROCESS_COMMAND запускаются с использованием fakeroot, поэтому этот sudo не требуется.

Итак, резюмируя мой вопрос:

  1. Как я могу получить возможности образа SD-карты, созданного с использованием образа ext4 rootfs?
  2. Я хочу использовать способ, который не требует использования «sudo».

Я использую Yocto Krogoth и в настоящее время не могу его обновить.


person Rogue    schedule 16.05.2018    source источник
comment
Когда вы монтируете образ ext4, возможно, вам нужно добавить -o user_xattr?   -  person Nayfe    schedule 16.05.2018
comment
@Nayfe Спасибо за комментарий. Я только что попробовал это, но, к сожалению, ничего не изменилось.   -  person Rogue    schedule 17.05.2018
comment
Есть ли причина оставаться на Кроготе? Может быть, попробовать то же самое на Rocko на плате qemu, чтобы потом проверить, исправлено ли это? Вы также можете присоединиться к каналу #yocto на freenode irc для получения дополнительной помощи.   -  person Nayfe    schedule 17.05.2018
comment
Обновление Yocto от @Nayfe может помочь решить проблему с поддельным корневым setcap, так как здесь есть патч для исправления: ссылка   -  person Rogue    schedule 17.05.2018
comment
Основная проблема по-прежнему заключается в том, что вызов mkfs.ext4 в poky/meta/classes/image_types.bbclass сбрасывает возможности при копировании из каталога {IMAGE_ROOTFS} в образ ext4. И это неизменно даже в сумо, насколько мне известно.   -  person Rogue    schedule 17.05.2018
comment
Может быть, вы можете сбросить e2fsprogs до последней фиксации, в журнале git есть много модификаций xattr, например здесь.   -  person Nayfe    schedule 17.05.2018
comment
@Nayfe Спасибо за предложение. Я пытался использовать e2fsprogs 1.43.8, но мне не повезло.   -  person Rogue    schedule 29.05.2018
comment
Пока у меня работало только одно: добавление задачи после do_image_ext4 и перед do_image_sdcard; в задаче я монтирую только что созданный ext4 img по циклу, применяю возможности в смонтированном ext4, непосредственно перед его использованием для создания образа sdcard. Это очень уродливо и непоследовательно, и я хотел бы найти лучший способ.   -  person Rogue    schedule 29.05.2018


Ответы (1)


Вы действительно тестировали его на финальном образе или в папке rootfs из сборки yocto?

Запускаю getcap на файлы в папке rootfs, а там ни куда ничего не ставил.

Поскольку yocto использует псевдо-библиотеку для перехвата вызовов chown, chmod, отслеживайте их в sqlite db (использует LD_PRELOAD для перехвата).

Таким образом, эти атрибуты не устанавливаются для файлов в папке «rootfs», однако добавляются при создании образа/rootfs.

вы можете использовать setcap в рецепте, вы должны добавить

DEPENDS = "libcap-native"

в вашем рецепте.

person xeniter    schedule 14.02.2020