Запутался в установке -m и установке -d с помощью Yocto - PullRequest
0 голосов
/ 30 мая 2019

Я взял на себя проект 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 предназначена только для установки файлов, а не каталогов.

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

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

1 Ответ

1 голос
/ 30 мая 2019

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

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

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

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

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

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

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

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

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


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

...