diff options
| author | Michael Opdenacker <michael.opdenacker@bootlin.com> | 2022-12-02 15:50:48 +0100 |
|---|---|---|
| committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2022-12-07 15:04:15 +0000 |
| commit | c8839099506ee9c694f5b9da3ef6cc7cf0b2c142 (patch) | |
| tree | 2ec7cac1be39f8765f1ebca1e19c1cdbe21af205 /documentation/dev-manual | |
| parent | be95d5f93abf2bce807f33fa0d9ae38e49fdbcce (diff) | |
| download | poky-c8839099506ee9c694f5b9da3ef6cc7cf0b2c142.tar.gz | |
SPDX and CVE documentation updates
Backporting from master the ones that are applicable to kirkstone.
(From yocto-docs rev: c10d65ef3bbdf4fe3abc03e3aef3d4ca8c2ad87f)
Signed-off-by: Michael Opdenacker <michael.opdenacker@bootlin.com>
Signed-off-by: Mikko Rapeli <mikko.rapeli@linaro.org>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'documentation/dev-manual')
| -rw-r--r-- | documentation/dev-manual/common-tasks.rst | 291 |
1 files changed, 212 insertions, 79 deletions
diff --git a/documentation/dev-manual/common-tasks.rst b/documentation/dev-manual/common-tasks.rst index 65f94432ab..1b91ada0a1 100644 --- a/documentation/dev-manual/common-tasks.rst +++ b/documentation/dev-manual/common-tasks.rst | |||
| @@ -11426,39 +11426,6 @@ layers (recipes, configuration files, and so forth) enables you to meet | |||
| 11426 | your requirements to include the scripts to control compilation as well | 11426 | your requirements to include the scripts to control compilation as well |
| 11427 | as any modifications to the original source. | 11427 | as any modifications to the original source. |
| 11428 | 11428 | ||
| 11429 | Providing spdx files | ||
| 11430 | ~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
| 11431 | |||
| 11432 | The spdx module has been integrated to a layer named meta-spdxscanner. | ||
| 11433 | meta-spdxscanner provides several kinds of scanner. If you want to enable | ||
| 11434 | this function, you have to follow the following steps: | ||
| 11435 | |||
| 11436 | 1. Add meta-spdxscanner layer into ``bblayers.conf``. | ||
| 11437 | |||
| 11438 | 2. Refer to the README in meta-spdxscanner to setup the environment (e.g, | ||
| 11439 | setup a fossology server) needed for the scanner. | ||
| 11440 | |||
| 11441 | 3. Meta-spdxscanner provides several methods within the bbclass to create spdx files. | ||
| 11442 | Please choose one that you want to use and enable the spdx task. You have to | ||
| 11443 | add some config options in ``local.conf`` file in your :term:`Build | ||
| 11444 | Directory`. Here is an example showing how to generate spdx files | ||
| 11445 | during bitbake using the fossology-python.bbclass:: | ||
| 11446 | |||
| 11447 | # Select fossology-python.bbclass. | ||
| 11448 | INHERIT += "fossology-python" | ||
| 11449 | # For fossology-python.bbclass, TOKEN is necessary, so, after setup a | ||
| 11450 | # Fossology server, you have to create a token. | ||
| 11451 | TOKEN = "eyJ0eXAiO..." | ||
| 11452 | # The fossology server is necessary for fossology-python.bbclass. | ||
| 11453 | FOSSOLOGY_SERVER = "http://xx.xx.xx.xx:8081/repo" | ||
| 11454 | # If you want to upload the source code to a special folder: | ||
| 11455 | FOLDER_NAME = "xxxx" //Optional | ||
| 11456 | # If you don't want to put spdx files in tmp/deploy/spdx, you can enable: | ||
| 11457 | SPDX_DEPLOY_DIR = "${DEPLOY_DIR}" //Optional | ||
| 11458 | |||
| 11459 | For more usage information refer to :yocto_git:`the meta-spdxscanner repository | ||
| 11460 | </meta-spdxscanner/>`. | ||
| 11461 | |||
| 11462 | Compliance Limitations with Executables Built from Static Libraries | 11429 | Compliance Limitations with Executables Built from Static Libraries |
| 11463 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | 11430 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| 11464 | 11431 | ||
| @@ -11499,21 +11466,92 @@ the license from the fetched source:: | |||
| 11499 | Checking for Vulnerabilities | 11466 | Checking for Vulnerabilities |
| 11500 | ============================ | 11467 | ============================ |
| 11501 | 11468 | ||
| 11502 | Vulnerabilities in images | 11469 | Vulnerabilities in Poky and OE-Core |
| 11503 | ------------------------- | 11470 | ----------------------------------- |
| 11504 | 11471 | ||
| 11505 | The Yocto Project has an infrastructure to track and address unfixed | 11472 | The Yocto Project has an infrastructure to track and address unfixed |
| 11506 | known security vulnerabilities, as tracked by the public | 11473 | known security vulnerabilities, as tracked by the public |
| 11507 | `Common Vulnerabilities and Exposures (CVE) <https://en.wikipedia.org/wiki/Common_Vulnerabilities_and_Exposures>`__ | 11474 | :wikipedia:`Common Vulnerabilities and Exposures (CVE) <Common_Vulnerabilities_and_Exposures>` |
| 11508 | database. | 11475 | database. |
| 11509 | 11476 | ||
| 11510 | To know which packages are vulnerable to known security vulnerabilities, | 11477 | The Yocto Project maintains a `list of known vulnerabilities |
| 11511 | add the following setting to your configuration:: | 11478 | <https://autobuilder.yocto.io/pub/non-release/patchmetrics/>`__ |
| 11479 | for packages in Poky and OE-Core, tracking the evolution of the number of | ||
| 11480 | unpatched CVEs and the status of patches. Such information is available for | ||
| 11481 | the current development version and for each supported release. | ||
| 11482 | |||
| 11483 | Security is a process, not a product, and thus at any time, a number of security | ||
| 11484 | issues may be impacting Poky and OE-Core. It is up to the maintainers, users, | ||
| 11485 | contributors and anyone interested in the issues to investigate and possibly fix them by | ||
| 11486 | updating software components to newer versions or by applying patches to address them. | ||
| 11487 | It is recommended to work with Poky and OE-Core upstream maintainers and submit | ||
| 11488 | patches to fix them, see ":ref:`dev-manual/common-tasks:submitting a change to the yocto project`" for details. | ||
| 11489 | |||
| 11490 | Vulnerability check at build time | ||
| 11491 | --------------------------------- | ||
| 11492 | |||
| 11493 | To enable a check for CVE security vulnerabilities using :ref:`cve-check <ref-classes-cve-check>` in the specific image | ||
| 11494 | or target you are building, add the following setting to your configuration:: | ||
| 11512 | 11495 | ||
| 11513 | INHERIT += "cve-check" | 11496 | INHERIT += "cve-check" |
| 11514 | 11497 | ||
| 11515 | This way, at build time, BitBake will warn you about known CVEs | 11498 | The CVE database contains some old incomplete entries which have been |
| 11516 | as in the example below:: | 11499 | deemed not to impact Poky or OE-Core. These CVE entries can be excluded from the |
| 11500 | check using build configuration:: | ||
| 11501 | |||
| 11502 | include conf/distro/include/cve-extra-exclusions.inc | ||
| 11503 | |||
| 11504 | With this CVE check enabled, BitBake build will try to map each compiled software component | ||
| 11505 | recipe name and version information to the CVE database and generate recipe and | ||
| 11506 | image specific reports. These reports will contain: | ||
| 11507 | |||
| 11508 | - metadata about the software component like names and versions | ||
| 11509 | |||
| 11510 | - metadata about the CVE issue such as description and NVD link | ||
| 11511 | |||
| 11512 | - for each software component, a list of CVEs which are possibly impacting this version | ||
| 11513 | |||
| 11514 | - status of each CVE: ``Patched``, ``Unpatched`` or ``Ignored`` | ||
| 11515 | |||
| 11516 | The status ``Patched`` means that a patch file to address the security issue has been | ||
| 11517 | applied. ``Unpatched`` status means that no patches to address the issue have been | ||
| 11518 | applied and that the issue needs to be investigated. ``Ignored`` means that after | ||
| 11519 | analysis, it has been deemed to ignore the issue as it for example affects | ||
| 11520 | the software component on a different operating system platform. | ||
| 11521 | |||
| 11522 | After a build with CVE check enabled, reports for each compiled source recipe will be | ||
| 11523 | found in ``build/tmp/deploy/cve``. | ||
| 11524 | |||
| 11525 | For example the CVE check report for the ``flex-native`` recipe looks like:: | ||
| 11526 | |||
| 11527 | $ cat poky/build/tmp/deploy/cve/flex-native | ||
| 11528 | LAYER: meta | ||
| 11529 | PACKAGE NAME: flex-native | ||
| 11530 | PACKAGE VERSION: 2.6.4 | ||
| 11531 | CVE: CVE-2016-6354 | ||
| 11532 | CVE STATUS: Patched | ||
| 11533 | CVE SUMMARY: Heap-based buffer overflow in the yy_get_next_buffer function in Flex before 2.6.1 might allow context-dependent attackers to cause a denial of service or possibly execute arbitrary code via vectors involving num_to_read. | ||
| 11534 | CVSS v2 BASE SCORE: 7.5 | ||
| 11535 | CVSS v3 BASE SCORE: 9.8 | ||
| 11536 | VECTOR: NETWORK | ||
| 11537 | MORE INFORMATION: https://nvd.nist.gov/vuln/detail/CVE-2016-6354 | ||
| 11538 | |||
| 11539 | LAYER: meta | ||
| 11540 | PACKAGE NAME: flex-native | ||
| 11541 | PACKAGE VERSION: 2.6.4 | ||
| 11542 | CVE: CVE-2019-6293 | ||
| 11543 | CVE STATUS: Ignored | ||
| 11544 | CVE SUMMARY: An issue was discovered in the function mark_beginning_as_normal in nfa.c in flex 2.6.4. There is a stack exhaustion problem caused by the mark_beginning_as_normal function making recursive calls to itself in certain scenarios involving lots of '*' characters. Remote attackers could leverage this vulnerability to cause a denial-of-service. | ||
| 11545 | CVSS v2 BASE SCORE: 4.3 | ||
| 11546 | CVSS v3 BASE SCORE: 5.5 | ||
| 11547 | VECTOR: NETWORK | ||
| 11548 | MORE INFORMATION: https://nvd.nist.gov/vuln/detail/CVE-2019-6293 | ||
| 11549 | |||
| 11550 | For images, a summary of all recipes included in the image and their CVEs is also | ||
| 11551 | generated in textual and JSON formats. These ``.cve`` and ``.json`` reports can be found | ||
| 11552 | in the ``tmp/deploy/images`` directory for each compiled image. | ||
| 11553 | |||
| 11554 | At build time CVE check will also throw warnings about ``Unpatched`` CVEs:: | ||
| 11517 | 11555 | ||
| 11518 | WARNING: flex-2.6.4-r0 do_cve_check: Found unpatched CVE (CVE-2019-6293), for more information check /poky/build/tmp/work/core2-64-poky-linux/flex/2.6.4-r0/temp/cve.log | 11556 | WARNING: flex-2.6.4-r0 do_cve_check: Found unpatched CVE (CVE-2019-6293), for more information check /poky/build/tmp/work/core2-64-poky-linux/flex/2.6.4-r0/temp/cve.log |
| 11519 | WARNING: libarchive-3.5.1-r0 do_cve_check: Found unpatched CVE (CVE-2021-36976), for more information check /poky/build/tmp/work/core2-64-poky-linux/libarchive/3.5.1-r0/temp/cve.log | 11557 | WARNING: libarchive-3.5.1-r0 do_cve_check: Found unpatched CVE (CVE-2021-36976), for more information check /poky/build/tmp/work/core2-64-poky-linux/libarchive/3.5.1-r0/temp/cve.log |
| @@ -11522,21 +11560,46 @@ It is also possible to check the CVE status of individual packages as follows:: | |||
| 11522 | 11560 | ||
| 11523 | bitbake -c cve_check flex libarchive | 11561 | bitbake -c cve_check flex libarchive |
| 11524 | 11562 | ||
| 11525 | Note that OpenEmbedded-Core keeps a list of known unfixed CVE issues which can | 11563 | Fixing CVE product name and version mappings |
| 11526 | be ignored. You can pass this list to the check as follows:: | 11564 | -------------------------------------------- |
| 11565 | |||
| 11566 | By default, :ref:`cve-check <ref-classes-cve-check>` uses the recipe name :term:`BPN` as CVE | ||
| 11567 | product name when querying the CVE database. If this mapping contains false positives, e.g. | ||
| 11568 | some reported CVEs are not for the software component in question, or false negatives like | ||
| 11569 | some CVEs are not found to impact the recipe when they should, then the problems can be | ||
| 11570 | in the recipe name to CVE product mapping. These mapping issues can be fixed by setting | ||
| 11571 | the :term:`CVE_PRODUCT` variable inside the recipe. This defines the name of the software component in the | ||
| 11572 | upstream `NIST CVE database <https://nvd.nist.gov/>`__. | ||
| 11527 | 11573 | ||
| 11528 | bitbake -c cve_check libarchive -R conf/distro/include/cve-extra-exclusions.inc | 11574 | The variable supports using vendor and product names like this:: |
| 11529 | 11575 | ||
| 11530 | Enabling vulnerabily tracking in recipes | 11576 | CVE_PRODUCT = "flex_project:flex" |
| 11531 | ---------------------------------------- | ||
| 11532 | 11577 | ||
| 11533 | The :term:`CVE_PRODUCT` variable defines the name used to match the recipe name | 11578 | In this example the vendor name used in the CVE database is ``flex_project`` and the |
| 11534 | against the name in the upstream `NIST CVE database <https://nvd.nist.gov/>`__. | 11579 | product is ``flex``. With this setting the ``flex`` recipe only maps to this specific |
| 11580 | product and not products from other vendors with same name ``flex``. | ||
| 11535 | 11581 | ||
| 11536 | Editing recipes to fix vulnerabilities | 11582 | Similarly, when the recipe version :term:`PV` is not compatible with software versions used by |
| 11537 | -------------------------------------- | 11583 | the upstream software component releases and the CVE database, these can be fixed using |
| 11584 | the :term:`CVE_VERSION` variable. | ||
| 11585 | |||
| 11586 | Note that if the CVE entries in the NVD database contain bugs or have missing or incomplete | ||
| 11587 | information, it is recommended to fix the information there directly instead of working | ||
| 11588 | around the issues possibly for a long time in Poky and OE-Core side recipes. Feedback to | ||
| 11589 | NVD about CVE entries can be provided through the `NVD contact form <https://nvd.nist.gov/info/contact-form>`__. | ||
| 11590 | |||
| 11591 | Fixing vulnerabilities in recipes | ||
| 11592 | --------------------------------- | ||
| 11593 | |||
| 11594 | If a CVE security issue impacts a software component, it can be fixed by updating to a newer | ||
| 11595 | version of the software component or by applying a patch. For Poky and OE-Core master branches, updating | ||
| 11596 | to a newer software component release with fixes is the best option, but patches can be applied | ||
| 11597 | if releases are not yet available. | ||
| 11538 | 11598 | ||
| 11539 | To fix a given known vulnerability, you need to add a patch file to your recipe. Here's | 11599 | For stable branches, it is preferred to apply patches for the issues. For some software |
| 11600 | components minor version updates can also be applied if they are backwards compatible. | ||
| 11601 | |||
| 11602 | Here is an example of fixing CVE security issues with patch files, | ||
| 11540 | an example from the :oe_layerindex:`ffmpeg recipe</layerindex/recipe/47350>`:: | 11603 | an example from the :oe_layerindex:`ffmpeg recipe</layerindex/recipe/47350>`:: |
| 11541 | 11604 | ||
| 11542 | SRC_URI = "https://www.ffmpeg.org/releases/${BP}.tar.xz \ | 11605 | SRC_URI = "https://www.ffmpeg.org/releases/${BP}.tar.xz \ |
| @@ -11548,31 +11611,21 @@ an example from the :oe_layerindex:`ffmpeg recipe</layerindex/recipe/47350>`:: | |||
| 11548 | file://fix-CVE-2020-22033-CVE-2020-22019.patch \ | 11611 | file://fix-CVE-2020-22033-CVE-2020-22019.patch \ |
| 11549 | file://fix-CVE-2021-33815.patch \ | 11612 | file://fix-CVE-2021-33815.patch \ |
| 11550 | 11613 | ||
| 11551 | The :ref:`cve-check <ref-classes-cve-check>` class defines two ways of | 11614 | A good practice is to include the CVE identifier in both the patch file name |
| 11552 | supplying a patch for a given CVE. The first | 11615 | and inside the patch file commit message using the format:: |
| 11553 | way is to use a patch filename that matches the below pattern:: | ||
| 11554 | |||
| 11555 | cve_file_name_match = re.compile(".*([Cc][Vv][Ee]\-\d{4}\-\d+)") | ||
| 11556 | |||
| 11557 | As shown in the example above, multiple CVE IDs can appear in a patch filename, | ||
| 11558 | but the :ref:`cve-check <ref-classes-cve-check>` class will only consider | ||
| 11559 | the last CVE ID in the filename as patched. | ||
| 11560 | |||
| 11561 | The second way to recognize a patched CVE ID is when a line matching the | ||
| 11562 | below pattern is found in any patch file provided by the recipe:: | ||
| 11563 | 11616 | ||
| 11564 | cve_match = re.compile("CVE:( CVE\-\d{4}\-\d+)+") | 11617 | CVE: CVE-2020-22033 |
| 11565 | 11618 | ||
| 11566 | This allows a single patch file to address multiple CVE IDs at the same time. | 11619 | CVE checker will then capture this information and change the CVE status to ``Patched`` |
| 11620 | in the generated reports. | ||
| 11567 | 11621 | ||
| 11568 | Of course, another way to fix vulnerabilities is to upgrade to a version | 11622 | If analysis shows that the CVE issue does not impact the recipe due to configuration, platform, |
| 11569 | of the package which is not impacted, typically a more recent one. | 11623 | version or other reasons, the CVE can be marked as ``Ignored`` using the :term:`CVE_CHECK_IGNORE` variable. |
| 11570 | The NIST database knows which versions are vulnerable and which ones | 11624 | As mentioned previously, if data in the CVE database is wrong, it is recommend to fix those |
| 11571 | are not. | 11625 | issues in the CVE database directly. |
| 11572 | 11626 | ||
| 11573 | Last but not least, you can choose to ignore vulnerabilities through | 11627 | Recipes can be completely skipped by CVE check by including the recipe name in |
| 11574 | the :term:`CVE_CHECK_SKIP_RECIPE` and :term:`CVE_CHECK_IGNORE` | 11628 | the :term:`CVE_CHECK_SKIP_RECIPE` variable. |
| 11575 | variables. | ||
| 11576 | 11629 | ||
| 11577 | Implementation details | 11630 | Implementation details |
| 11578 | ---------------------- | 11631 | ---------------------- |
| @@ -11589,24 +11642,104 @@ file. The found CVE IDs are also considered as patched. | |||
| 11589 | Then, the code looks up all the CVE IDs in the NIST database for all the | 11642 | Then, the code looks up all the CVE IDs in the NIST database for all the |
| 11590 | products defined in :term:`CVE_PRODUCT`. Then, for each found CVE: | 11643 | products defined in :term:`CVE_PRODUCT`. Then, for each found CVE: |
| 11591 | 11644 | ||
| 11592 | - If the package name (:term:`PN`) is part of | 11645 | - If the package name (:term:`PN`) is part of |
| 11593 | :term:`CVE_CHECK_SKIP_RECIPE`, it is considered as patched. | 11646 | :term:`CVE_CHECK_SKIP_RECIPE`, it is considered as ``Patched``. |
| 11594 | 11647 | ||
| 11595 | - If the CVE ID is part of :term:`CVE_CHECK_IGNORE`, it is | 11648 | - If the CVE ID is part of :term:`CVE_CHECK_IGNORE`, it is |
| 11596 | considered as patched too. | 11649 | set as ``Ignored``. |
| 11597 | 11650 | ||
| 11598 | - If the CVE ID is part of the patched CVE for the recipe, it is | 11651 | - If the CVE ID is part of the patched CVE for the recipe, it is |
| 11599 | already considered as patched. | 11652 | already considered as ``Patched``. |
| 11600 | 11653 | ||
| 11601 | - Otherwise, the code checks whether the recipe version (:term:`PV`) | 11654 | - Otherwise, the code checks whether the recipe version (:term:`PV`) |
| 11602 | is within the range of versions impacted by the CVE. If so, the CVE | 11655 | is within the range of versions impacted by the CVE. If so, the CVE |
| 11603 | is considered as unpatched. | 11656 | is considered as ``Unpatched``. |
| 11604 | 11657 | ||
| 11605 | The CVE database is stored in :term:`DL_DIR` and can be inspected using | 11658 | The CVE database is stored in :term:`DL_DIR` and can be inspected using |
| 11606 | ``sqlite3`` command as follows:: | 11659 | ``sqlite3`` command as follows:: |
| 11607 | 11660 | ||
| 11608 | sqlite3 downloads/CVE_CHECK/nvdcve_1.1.db .dump | grep CVE-2021-37462 | 11661 | sqlite3 downloads/CVE_CHECK/nvdcve_1.1.db .dump | grep CVE-2021-37462 |
| 11609 | 11662 | ||
| 11663 | When analyzing CVEs, it is recommended to: | ||
| 11664 | |||
| 11665 | - study the latest information in `CVE database <https://nvd.nist.gov/vuln/search>`__. | ||
| 11666 | |||
| 11667 | - check how upstream developers of the software component addressed the issue, e.g. | ||
| 11668 | what patch was applied, which upstream release contains the fix. | ||
| 11669 | |||
| 11670 | - check what other Linux distributions like `Debian <https://security-tracker.debian.org/tracker/>`__ | ||
| 11671 | did to analyze and address the issue. | ||
| 11672 | |||
| 11673 | - follow security notices from other Linux distributions. | ||
| 11674 | |||
| 11675 | - follow public `open source security mailing lists <https://oss-security.openwall.org/wiki/mailing-lists>`__ for | ||
| 11676 | discussions and advance notifications of CVE bugs and software releases with fixes. | ||
| 11677 | |||
| 11678 | Creating a Software Bill of Materials | ||
| 11679 | ===================================== | ||
| 11680 | |||
| 11681 | Once you are able to build an image for your project, once the licenses for | ||
| 11682 | each software component are all identified (see | ||
| 11683 | ":ref:`dev-manual/common-tasks:working with licenses`") and once vulnerability | ||
| 11684 | fixes are applied (see ":ref:`dev-manual/common-tasks:checking | ||
| 11685 | for vulnerabilities`"), the OpenEmbedded build system can generate | ||
| 11686 | a description of all the components you used, their licenses, their dependencies, | ||
| 11687 | the changes that were applied and the known vulnerabilities that were fixed. | ||
| 11688 | |||
| 11689 | This description is generated in the form of a *Software Bill of Materials* | ||
| 11690 | (:term:`SBOM`), using the :term:`SPDX` standard. | ||
| 11691 | |||
| 11692 | When you release software, this is the most standard way to provide information | ||
| 11693 | about the Software Supply Chain of your software image and SDK. The | ||
| 11694 | :term:`SBOM` tooling is often used to ensure open source license compliance by | ||
| 11695 | providing the license texts used in the product which legal departments and end | ||
| 11696 | users can read in standardized format. | ||
| 11697 | |||
| 11698 | :term:`SBOM` information is also critical to performing vulnerability exposure | ||
| 11699 | assessments, as all the components used in the Software Supply Chain are listed. | ||
| 11700 | |||
| 11701 | The OpenEmbedded build system doesn't generate such information by default. | ||
| 11702 | To make this happen, you must inherit the | ||
| 11703 | :ref:`create-spdx <ref-classes-create-spdx>` class from a configuration file:: | ||
| 11704 | |||
| 11705 | INHERIT += "create-spdx" | ||
| 11706 | |||
| 11707 | You then get :term:`SPDX` output in JSON format as an | ||
| 11708 | ``IMAGE-MACHINE.spdx.json`` file in ``tmp/deploy/images/MACHINE/`` inside the | ||
| 11709 | :term:`Build Directory`. | ||
| 11710 | |||
| 11711 | This is a toplevel file accompanied by an ``IMAGE-MACHINE.spdx.index.json`` | ||
| 11712 | containing an index of JSON :term:`SPDX` files for individual recipes, together | ||
| 11713 | with an ``IMAGE-MACHINE.spdx.tar.zst`` compressed archive containing all such | ||
| 11714 | files. | ||
| 11715 | |||
| 11716 | The :ref:`create-spdx <ref-classes-create-spdx>` class offers options to include | ||
| 11717 | more information in the output :term:`SPDX` data, such as adding compressed | ||
| 11718 | archives of the files in the generated target packages | ||
| 11719 | (:term:`SPDX_ARCHIVE_PACKAGED`), adding a description of the source files | ||
| 11720 | handled by the target recipes (:term:`SPDX_INCLUDE_SOURCES`) and adding archives | ||
| 11721 | of these source files themselves (:term:`SPDX_ARCHIVE_SOURCES`). | ||
| 11722 | |||
| 11723 | Though the toplevel :term:`SPDX` output is available in | ||
| 11724 | ``tmp/deploy/images/MACHINE/`` inside the :term:`Build Directory`, ancillary | ||
| 11725 | generated files are available in ``tmp/deploy/spdx/MACHINE`` too, such as: | ||
| 11726 | |||
| 11727 | - The individual :term:`SPDX` JSON files in the ``IMAGE-MACHINE.spdx.tar.zst`` | ||
| 11728 | archive. | ||
| 11729 | |||
| 11730 | - Compressed archives of the files in the generated target packages, | ||
| 11731 | in ``packages/packagename.tar.zst`` (when :term:`SPDX_ARCHIVE_PACKAGED` | ||
| 11732 | is set). | ||
| 11733 | |||
| 11734 | - Compressed archives of the source files used to build the host tools | ||
| 11735 | and the target packages in ``recipes/recipe-packagename.tar.zst`` | ||
| 11736 | (when :term:`SPDX_ARCHIVE_SOURCES` is set). Those are needed to fulfill | ||
| 11737 | "source code access" license requirements. | ||
| 11738 | |||
| 11739 | See the `tools page <https://spdx.dev/resources/tools/>`__ on the :term:`SPDX` | ||
| 11740 | project website for a list of tools to consume and transform the :term:`SPDX` | ||
| 11741 | data generated by the OpenEmbedded build system. | ||
| 11742 | |||
| 11610 | Using the Error Reporting Tool | 11743 | Using the Error Reporting Tool |
| 11611 | ============================== | 11744 | ============================== |
| 11612 | 11745 | ||
