Я взял на себя проект 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}, как в большинстве других установок каталогов, которые я вижу? Обычно я бы не прибегал к переполнению стека для такого вопроса, но в нем так много несоответствий, что я не понимаю, и мне трудно найти ответ.
Другим интересным стандартом может быть Стандарт кодирования GNU и INSTALL
командная переменная файла Makefile.
@jww Спасибо за это. Как это работает без переменной ${D}, вы знаете? Я думаю, это специфично для Yocto.
Рассматриваемая задача определяется как функция оболочки. Команда 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
.
install(1)
справочная страница.-d
какmkdir -p
.-m
устанавливает режим (разрешения). Обратите внимание, чтоinstall
с такими опциями, как-d
, нестандартны. Он будет недоступен в некоторых операционных системах, таких как AIX или Solarisinstall
.