Как читать авторский курс и нормативные материалы
Это учебные материалы, а не заключение о соответствии конкретного продукта. Организационные модели курса отделяйте от терминов стандарта: ППК в опубликованном проекте — машиночитаемый перечень, а живой реестр его версий является практикой сопровождения. Термин OSA в разных материалах имеет разный охват. Статус и обязательность нормативного документа проверяются отдельно; проект КАПО опубликован как проект первой редакции.
П21. Conan graph и package identity
Цель
Получить из Conan-проекта граф зависимостей в JSON и убедиться, что компоненты имеют устойчивую идентичность — name/version, из которой строится PURL pkg:conan/..., а не безымянный pkg:generic/.... Проверяемый результат: JSON-граф на диске и таблица «компонент → версия → PURL», где у каждой строки заполнены имя и версия.
Команда или действие
# 1. граф зависимостей всего проекта в машинном виде (Conan 2.x)
conan graph info . --format=json > conan-graph.json
# 2. список узлов графа: ref (name/version), package_type
# (jq показывает ключи nodes; ref содержит идентичность пакета)
jq '.graph.nodes | to_entries[] | {ref: .value.ref, type: .value.package_type}' conan-graph.json
# 3. для одного пакета — проверить идентичность напрямую
conan list "openssl/*" -r conancenter
Что Conan добавляет к C/C++ Без пакетного менеджера у C/C++ библиотеки нет устойчивого ключа — генератор фактов вынужден ставить
pkg:generic/opensslбез гарантии версии. Conan хранитname,version,user,channelиrecipe revision, поэтому из его графа выводится нормальныйpkg:conan/openssl@3.2.1. Это и есть «package identity», ради которой делается практика.
Что вы должны увидеть
В conan-graph.json — узлы с заполненным ref (фрагмент после jq):
[
{ "ref": "myapp/1.0", "type": "application" },
{ "ref": "openssl/3.2.1", "type": "shared-library" },
{ "ref": "zlib/1.3.1", "type": "static-library" }
]
Узел 0 всегда conanfile самого проекта; остальные — зависимости с name/version. Ориентир: число узлов с непустым ref равно числу записей в requires/tool_requires рецепта плюс их транзитивные зависимости (обычно 3–15 для тестового проекта).
Из ref строится PURL для SBOM:
| Компонент | ref в Conan | PURL |
|---|---|---|
| OpenSSL | openssl/3.2.1 |
pkg:conan/openssl@3.2.1 |
| zlib | zlib/1.3.1 |
pkg:conan/zlib@1.3.1 |
Где приватные qualifiers Если в
refестьuser/channel(напримерopenssl/3.2.1@mycorp/stable), PURL получит приватные qualifiers (?user=mycorp&channel=stable), которые ломают публичный матчинг. Это вход в П24. PURL нормализация и private qualifiers.
Если не получилось
ERROR: No such file or directory: conanfile. В каталоге нетconanfile.txt/conanfile.py— проект не использует Conan. Это не ошибка студента, а сигнал: идентичность придётся восстанавливать бинарным анализом (П22. ELF dynamic dependencies, П23. Статическая линковка как слепая зона).conan graph infoругается на профиль. Нужен профиль сборки:conan profile detectсоздаст дефолтный~/.conan2/profiles/default, после чего команда отработает.- Команды в стиле
conan info .не работают. Это синтаксис Conan 1.x. В Conan 2.x команда —conan graph info, формат —--format=json. Проверьте версию:conan --version. jq: command not found. JSON можно открыть как текст;jqлишь удобнее. При необходимости:apt-get install jq.- Узел приходит с
ref: null. Это самconanfileпроекта (узел 0) — у него нет внешней идентичности, и это нормально; учитывайте его как корень графа, а не как зависимость.
Критерий зачёта
Показать преподавателю: conan-graph.json и таблицу «компонент → version → PURL» минимум для трёх зависимостей, где видно, что Conan дал реальную версию и устойчивый pkg:conan/.... Отдельно отметить любой ref с user/channel как кандидата на нормализацию в П24. PURL нормализация и private qualifiers.
Нормативная связка
Устойчивая идентичность компонента (имя+версия+PURL) — это полнота идентификаторов SBOM по BSI TR-03183-2 v2.1.0 и базовый элемент SBOM по CISA Minimum Elements for SBOM. Без неё матчинг на уязвимости даёт false negative — см. модуль М04. Управляемость состава — требование ГОСТ Р 56939-2024. Смежные практики модуля М09: П20. CMake dependency graph, П22. ELF dynamic dependencies, П24. PURL нормализация и private qualifiers. Шаблон: Паспорт open source библиотеки.