#embedded-linux #yocto #bitbake
#встроенный-linux #yocto #bitbake
Вопрос:
Учитывая рецепт для серверной программы, написанной для использования SSL, если в образе системы указана пара сертификат / ключ — каков «правильный» способ обработки установки этих сертификатов с точки зрения bitbake? Особенно это касается «во время разработки» серверного программного обеспечения, когда мне нужно предоставлять самозаверяющие сертификаты, пока мы тестируем вещи.
У меня есть решение, но я не уверен, что оно оптимально, и мне казалось, что я слишком много борюсь с инструментами, чтобы сделать это. Итак, пришло время спросить.
Вот что у меня есть.
Если вы настраиваете переменные среды белого списка для:
SERVER_RECIPE_NAME_CERT = '/absolute/path/to/cert.pem'
SERVER_RECIPE_NAME_CERT_KEY = '/absolute/path/to/key.pem'
Затем в рецепте сервера, который я исказил в следующем SRC_URI
, где я обычно просто создаю функцию python, которая расширяется в SRC_URI, если заданы переменные сертификата.
def certfile_src(d):
files = ''
if d.getVar('SERVER_RECIPE_NAME_CERT') is not None:
files = files 'file://' d.getVar('SERVER_RECIPE_NAME_CERT', True)
if d.getVar('SERVER_RECIPE_NAME_CERT_KEY') is not None:
files = files ' ' 'file://' d.getVar('SERVER_RECIPE_NAME_CERT_KEY', True)
return files
SRC_URI = "
git://${GO_IMPORT}
${@certfile_src(d)}
"
У меня были проблемы с использованием синтаксиса функции python вместо синтаксиса def, но, оглядываясь назад, это могло быть связано с тем, что у меня была функция python ниже назначения SRC_URI. Вероятно, мне следует попробовать сделать это таким образом еще раз, поскольку я предпочитаю этот синтаксис.
Итак, чтобы обобщить вопросы:
- Не изобрел ли я велосипед менее эффективным способом? Есть ли «правильный способ» или «лучший способ» сделать это с помощью существующих инструментов?
- Вероятно, мне следовало использовать ${PN} в getVar, чтобы это можно было скопировать / вставить в перекрестный рецепт, поскольку это общий шаблон для некоторых вещей, с которыми я работаю.
- Вероятно, я должен сделать это «классом»… что заставляет меня задуматься, есть ли уже тот, который я пропустил, но я не уверен, может ли класс изменять SRC_URI … нужно ли им вообще? Мог ли я просто сделать все это в a
do_install_append()
и скопировать сертификаты из источника абсолютного пути${D}${sysconfdir}/...
, не заставляя проверки качества завершаться неудачей, как сумасшедшие?
Ответ №1:
Вы должны убедиться, что ваши переменные среды перечислены в экспортируемой вашим хостом переменной среды с именем BB_ENV_EXTRAWHITE
(c.f. https://docs.yoctoproject.org/bitbake/bitbake-user-manual/bitbake-user-manual-ref-variables.html#term-BB_ENV_EXTRAWHITE). Это необходимо, иначе изменение в ваших переменных среды не будет учтено сборкой.
Вы хотите использовать SRC_URI
, потому что у него есть механизм проверки контрольной суммы файлов между сборками, чтобы, если путь к вашим сертификатам тот же, но сертификаты разные, рецепт все равно перестраивается.
Комментарии:
1. Спасибо за отзыв! У меня BB_ENV_EXTRAWHITE работает так, как ожидалось, и мне потребовалось время, чтобы перенести все это в класс, поскольку это обычная модель / проблема, с которой я сталкивался в нескольких проектах. 🙂