Запутался в установке -m и установке -d с помощью Yocto

Я взял на себя проект Yocto и внутри файла рецепта .bb вижу следующие строки для установки новых каталогов в образе:

do_install() {
install -m 0755 -d ${DEPLOY_DIR_IMAGE}/app
install -m 0755 -d ${DEPLOY_DIR_IMAGE}/app/apiary
install -m 0755 -d ${DEPLOY_DIR_IMAGE}/app/lib
install -m 0755 -d ${DEPLOY_DIR_IMAGE}/app/config
install -m 0755 -d ${DEPLOY_DIR_IMAGE}/app/scripts
install -m 0755 -d ${DEPLOY_DIR_IMAGE}/app/keys

Это работает, но я в замешательстве. Из моего чтения о Yocto и выполнения do_install я подумал, что опция предназначена только для установки файлов, а не каталогов.

Каков эффект выполнения установить -m 0755 -d , как параметров , так и с командой установки?

Кроме того, почему нет переменной ${D}, как в большинстве других установок каталогов, которые я вижу? Обычно я бы не прибегал к переполнению стека для такого вопроса, но в нем так много несоответствий, что я не понимаю, и мне трудно найти ответ.

install(1) справочная страница. -d как mkdir -p. -m устанавливает режим (разрешения). Обратите внимание, что install с такими опциями, как -d, нестандартны. Он будет недоступен в некоторых операционных системах, таких как AIX или Solaris install.
jww 30.05.2019 12:01

Другим интересным стандартом может быть Стандарт кодирования GNU и INSTALL командная переменная файла Makefile.

jww 30.05.2019 12:07

@jww Спасибо за это. Как это работает без переменной ${D}, вы знаете? Я думаю, это специфично для Yocto.

Engineer999 30.05.2019 12:39
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
3
7 759
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Рассматриваемая задача определяется как функция оболочки. Команда install, используемая внутри, является командой оболочки, а не чем-то специфичным для Yocto или BitBake, поэтому вам следует искать его документы для просветления, а не полагаться на документацию или примеры BitBake. Однако, в частности, в контексте Yocto вам следует ознакомиться с документацией для версии GNU coreutils программы install (см. ссылку выше), которую вы неизменно найдете в системах Linux.*

From my reading about Yocto and doing do_install, I thought that the -m option is only for installing files and not directories.

Я не уверен, что могло заставить вас так думать, кроме того, что вы раньше не видели, как это применялось к каталогам.

What is the effect of doing install -m 0755 -d, both the -m and -d options with the install command?

Параметр -m устанавливает режим (биты управления доступом) установленных объектов. Каталоги имеют режимы, как и обычные файлы, а параметр -m имеет то же значение для установки каталогов, что и для установки обычных файлов.

Параметр -d указывает, что имена, указанные для установки, следует использовать в качестве создаваемых каталогов вместе с любыми отсутствующими каталогами по указанному пути. Как заметил @jww в комментариях, эффект аналогичен эффекту mkdir -p.

Эти варианты ортогональны. При совместном использовании их эффекты объединяются естественным образом: создаются указанные каталоги с родительскими каталогами, если необходимо, и всем созданным каталогам назначается указанный режим. Однако явно устанавливать режимы на 0755 излишне, потому что это значение по умолчанию. Возможно, поэтому вы не привыкли видеть -m параметры, используемые для каталогов.

Also, why is there no ${D} variable like in the majority of other directory installations which I see?

Спецификации Yocto для do_install говорят, что он должен устанавливать файлы относительно ${D}, тогда как переменная DEPLOY_DIR_IMAGE относится к расположению готовых к установке образов. Кажется, что установка в ${DEPLOY_DIR_IMAGE} была бы неправильной, но это не обязательно означает, что она не даст желаемого конечного эффекта. Или, возможно, рецепт был просто написан для какой-то более старой версии BitBake, где он имел больше смысла. В любом случае, выяснение деталей было бы гораздо более глубоким и сложным анализом, чем я готов провести для вас.


*install не стандартизирован POSIX. Версия GNU была вдохновлена ​​одноименной программой BSD, и ее текущие версии имеют схожие параметры и поведение, в том числе конкретно в отношении параметров -m и -d.

Другие вопросы по теме