Дата и время публикации:
Проблема и решение
1. Cуть проблемы
При получении исходного кода пакета ПО из репозитория, во время выполнения задачи do_fetch(), необходимо знать насколько оно актуально для Вас и наиболее подходит Вам из всего, чтобы обновлялось, наслаивалось в виде обновлений выбранной ветви репозитария, именуемых Commit.
Таким образом репозитарий пакета программ исходного кода представляет собой некоторое веточку дерева, как показано на структурной схеме 1.1 и которую рассмотрим на примере проекта procps_ptree, опубликованного на GitHub в виде отдельного репозитария rjaan/procps_ptree .
Структурная схема 1.1
Х
| ---------------
|----| coverirty_scan|-[+]-\
| --------------- |
| |--|Commit b8d4e82...
| |
| |--|Commit 5195f18...
|
| |
|
| |--|Commit 86d5819...
|
|
|
Как показано на схеме 1.1, в интересующей нас ветви coverty_scan, отображены несколько сделанных обновлений репозитария rjaan/procps_ptree, которые начинаются с английского слова Commit и представляют собой "листочки веточки". Соответственно, это слово породило уже принятый англицизм — "коммит" в среде компьютершиков, который, на мой взгляд, правильнее будет называть ревизия исходного кода, определенной версии или ветви репозитария.
К тому же, если взглянуть на их статистику исправлений,то выясним, что есть ревизии одной и той же ветви, которые прошли верификацию сканера статического анализа исходного кода Covirity Scan, такие как "Commit b8d4e82..." и "Commit 86d5819...", и не прошедших, такие как "Commit 5195f18..." . При этом, как можно догадаться не обязательно последний, прошедший верификацию "Commit" будет нас устраивать, например в силу неотработанной до конца функциональности, хотя исправляет некоторые ошибки безопасности CWE .
Поэтому в Yocto/poky предусмотрена возможность получения нужной ревизии исходного кода из репозитария автоматически (для последней сделанной) или указывать в ручную самим наиболее подходящую Вам.
2. Решение
2.1 Автоматический выбор последней ревизии
Когда исходный код запрашивается скрипт сборки BitBake из репозитария исходного кода пакета, он может учитывать по мимо адреса источника, указанного в переменной SRC_URI, например файла procps_ptree.bb, переменную SRCREV, определяющую ревизию загружаемого исходного кода пакета и как показано в листинге 2.1.1
Листинг 2.1.1. Фрагмент файла procps_ptree.bb
… PV = "1.4+git${SRCPV}" … SRCREV = "${AUTOREV}" RBRANCH = "coverirty_scan" SRC_URI = "git://github.com/rjaan/procps_ptree.git.git;protocol=git;branch=${RBRANCH}" …
Кроме того, переменная SRCREV устанавливается в AUTOREV, что неминуемо заставит собирать последнюю ревизию исходного кода, помеченной "Commit b8d4e82..." . Также необходимо указать автоматическое обновление версии, учитывающей ревизию исходного кода, с использованием SRCPV в переменной PV .
2.2 Собственноручный выбор последней ревизии
Как уже упоминалось выше, не всегда последняя ревизия оправдывает нужные ожидания, особенно если это касается урезания функциональности в угоду требований безопасности, которые не всегда бывают адекватны, а порой излишне завышены.
Поэтому в переменной SRCREV можно указать нужную ревизию исходного кода, например "Commit 86d5819...", реализующий нужную функциональность, как показано в листинге 2.2.1
Листинг 2.2.1. Фрагмент файла procps_ptree.bb
… PV = "1.4+git${SRCPV}" … SRCREV = "86d581932c79b0651927e2d0089fda7fe9e5f47d" RBRANCH = "coverirty_scan" SRC_URI = "git://github.com/rjaan/procps_ptree.git.git;protocol=git;branch=${RBRANCH}" …
3. Библиография
3.1 Yoctoproject.org. Development Task Manual
3.2 Yoctoproject.org. Reference Manual