Каков «правильный» способ создания дополнительных сертификатов сервера для рецепта bitbake?

#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. Вероятно, мне следует попробовать сделать это таким образом еще раз, поскольку я предпочитаю этот синтаксис.

Итак, чтобы обобщить вопросы:

  1. Не изобрел ли я велосипед менее эффективным способом? Есть ли «правильный способ» или «лучший способ» сделать это с помощью существующих инструментов?
  2. Вероятно, мне следовало использовать ${PN} в getVar, чтобы это можно было скопировать / вставить в перекрестный рецепт, поскольку это общий шаблон для некоторых вещей, с которыми я работаю.
  3. Вероятно, я должен сделать это «классом»… что заставляет меня задуматься, есть ли уже тот, который я пропустил, но я не уверен, может ли класс изменять 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 работает так, как ожидалось, и мне потребовалось время, чтобы перенести все это в класс, поскольку это обычная модель / проблема, с которой я сталкивался в нескольких проектах. 🙂