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/ref-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/ref-manual')
| -rw-r--r-- | documentation/ref-manual/classes.rst | 96 | ||||
| -rw-r--r-- | documentation/ref-manual/terms.rst | 28 | ||||
| -rw-r--r-- | documentation/ref-manual/variables.rst | 109 |
3 files changed, 229 insertions, 4 deletions
diff --git a/documentation/ref-manual/classes.rst b/documentation/ref-manual/classes.rst index a6dafe8f90..6e73c5d4fb 100644 --- a/documentation/ref-manual/classes.rst +++ b/documentation/ref-manual/classes.rst | |||
| @@ -361,6 +361,32 @@ authors used. | |||
| 361 | Both build methods inherit the ``cpan-base`` class for basic Perl | 361 | Both build methods inherit the ``cpan-base`` class for basic Perl |
| 362 | support. | 362 | support. |
| 363 | 363 | ||
| 364 | .. _ref-classes-create-spdx: | ||
| 365 | |||
| 366 | ``create-spdx.bbclass`` | ||
| 367 | ======================= | ||
| 368 | |||
| 369 | The :ref:`create-spdx <ref-classes-create-spdx>` class provides support for | ||
| 370 | automatically creating :term:`SPDX` :term:`SBOM` documents based upon image | ||
| 371 | and SDK contents. | ||
| 372 | |||
| 373 | This class is meant to be inherited globally from a configuration file:: | ||
| 374 | |||
| 375 | INHERIT += "create-spdx" | ||
| 376 | |||
| 377 | The toplevel :term:`SPDX` output file is generated in JSON format as a | ||
| 378 | ``IMAGE-MACHINE.spdx.json`` file in ``tmp/deploy/images/MACHINE/`` inside the | ||
| 379 | :term:`Build Directory`. There are other related files in the same directory, | ||
| 380 | as well as in ``tmp/deploy/spdx``. | ||
| 381 | |||
| 382 | The exact behaviour of this class, and the amount of output can be controlled | ||
| 383 | by the :term:`SPDX_ARCHIVE_PACKAGED`, :term:`SPDX_ARCHIVE_SOURCES` and | ||
| 384 | :term:`SPDX_INCLUDE_SOURCES` variables. | ||
| 385 | |||
| 386 | See the description of these variables and the | ||
| 387 | ":ref:`dev-manual/common-tasks:creating a software bill of materials`" | ||
| 388 | section in the Yocto Project Development Manual for more details. | ||
| 389 | |||
| 364 | .. _ref-classes-cross: | 390 | .. _ref-classes-cross: |
| 365 | 391 | ||
| 366 | ``cross.bbclass`` | 392 | ``cross.bbclass`` |
| @@ -396,14 +422,62 @@ discussion on these cross-compilation tools. | |||
| 396 | ``cve-check.bbclass`` | 422 | ``cve-check.bbclass`` |
| 397 | ===================== | 423 | ===================== |
| 398 | 424 | ||
| 399 | The ``cve-check`` class looks for known CVEs (Common Vulnerabilities | 425 | The :ref:`cve-check <ref-classes-cve-check>` class looks for known CVEs (Common Vulnerabilities |
| 400 | and Exposures) while building an image. This class is meant to be | 426 | and Exposures) while building with BitBake. This class is meant to be |
| 401 | inherited globally from a configuration file:: | 427 | inherited globally from a configuration file:: |
| 402 | 428 | ||
| 403 | INHERIT += "cve-check" | 429 | INHERIT += "cve-check" |
| 404 | 430 | ||
| 431 | To filter out obsolete CVE database entries which are known not to impact software from Poky and OE-Core, | ||
| 432 | add following line to the build configuration file:: | ||
| 433 | |||
| 434 | include cve-extra-exclusions.inc | ||
| 435 | |||
| 405 | You can also look for vulnerabilities in specific packages by passing | 436 | You can also look for vulnerabilities in specific packages by passing |
| 406 | ``-c cve_check`` to BitBake. You will find details in the | 437 | ``-c cve_check`` to BitBake. |
| 438 | |||
| 439 | After building the software with Bitbake, CVE check output reports are available in ``tmp/deploy/cve`` | ||
| 440 | and image specific summaries in ``tmp/deploy/images/*.cve`` or ``tmp/deploy/images/*.json`` files. | ||
| 441 | |||
| 442 | When building, the CVE checker will emit build time warnings for any detected | ||
| 443 | issues which are in the state ``Unpatched``, meaning that CVE issue seems to affect the software component | ||
| 444 | and version being compiled and no patches to address the issue are applied. Other states | ||
| 445 | for detected CVE issues are: ``Patched`` meaning that a patch to address the issue is already | ||
| 446 | applied, and ``Ignored`` meaning that the issue can be ignored. | ||
| 447 | |||
| 448 | The ``Patched`` state of a CVE issue is detected from patch files with the format | ||
| 449 | ``CVE-ID.patch``, e.g. ``CVE-2019-20633.patch``, in the :term:`SRC_URI` and using | ||
| 450 | CVE metadata of format ``CVE: CVE-ID`` in the commit message of the patch file. | ||
| 451 | |||
| 452 | If the recipe lists the ``CVE-ID`` in :term:`CVE_CHECK_IGNORE` variable, then the CVE state is reported | ||
| 453 | as ``Ignored``. Multiple CVEs can be listed separated by spaces. Example:: | ||
| 454 | |||
| 455 | CVE_CHECK_IGNORE += "CVE-2020-29509 CVE-2020-29511" | ||
| 456 | |||
| 457 | If CVE check reports that a recipe contains false positives or false negatives, these may be | ||
| 458 | fixed in recipes by adjusting the CVE product name using :term:`CVE_PRODUCT` and :term:`CVE_VERSION` variables. | ||
| 459 | :term:`CVE_PRODUCT` defaults to the plain recipe name :term:`BPN` which can be adjusted to one or more CVE | ||
| 460 | database vendor and product pairs using the syntax:: | ||
| 461 | |||
| 462 | CVE_PRODUCT = "flex_project:flex" | ||
| 463 | |||
| 464 | where ``flex_project`` is the CVE database vendor name and ``flex`` is the product name. Similarly | ||
| 465 | if the default recipe version :term:`PV` does not match the version numbers of the software component | ||
| 466 | in upstream releases or the CVE database, then the :term:`CVE_VERSION` variable can be used to set the | ||
| 467 | CVE database compatible version number, for example:: | ||
| 468 | |||
| 469 | CVE_VERSION = "2.39" | ||
| 470 | |||
| 471 | Any bugs or missing or incomplete information in the CVE database entries should be fixed in the CVE database | ||
| 472 | via the `NVD feedback form <https://nvd.nist.gov/info/contact-form>`__. | ||
| 473 | |||
| 474 | Users should note that security is a process, not a product, and thus also CVE checking, analyzing results, | ||
| 475 | patching and updating the software should be done as a regular process. The data and assumptions | ||
| 476 | required for CVE checker to reliably detect issues are frequently broken in various ways. | ||
| 477 | These can only be detected by reviewing the details of the issues and iterating over the generated reports, | ||
| 478 | and following what happens in other Linux distributions and in the greater open source community. | ||
| 479 | |||
| 480 | You will find some more details in the | ||
| 407 | ":ref:`dev-manual/common-tasks:checking for vulnerabilities`" | 481 | ":ref:`dev-manual/common-tasks:checking for vulnerabilities`" |
| 408 | section in the Development Tasks Manual. | 482 | section in the Development Tasks Manual. |
| 409 | 483 | ||
| @@ -1975,6 +2049,22 @@ When inherited by a recipe, the ``perlnative`` class supports using the | |||
| 1975 | native version of Perl built by the build system rather than using the | 2049 | native version of Perl built by the build system rather than using the |
| 1976 | version provided by the build host. | 2050 | version provided by the build host. |
| 1977 | 2051 | ||
| 2052 | .. _ref-classes-pypi: | ||
| 2053 | |||
| 2054 | ``pypi.bbclass`` | ||
| 2055 | ================ | ||
| 2056 | |||
| 2057 | The :ref:`pypi <ref-classes-pypi>` class sets variables appropriately for recipes that build | ||
| 2058 | Python modules from `PyPI <https://pypi.org/>`__, the Python Package Index. | ||
| 2059 | By default it determines the PyPI package name based upon :term:`BPN` | ||
| 2060 | (stripping the "python-" or "python3-" prefix off if present), however in | ||
| 2061 | some cases you may need to set it manually in the recipe by setting | ||
| 2062 | :term:`PYPI_PACKAGE`. | ||
| 2063 | |||
| 2064 | Variables set by the :ref:`pypi <ref-classes-pypi>` class include :term:`SRC_URI`, :term:`SECTION`, | ||
| 2065 | :term:`HOMEPAGE`, :term:`UPSTREAM_CHECK_URI`, :term:`UPSTREAM_CHECK_REGEX` | ||
| 2066 | and :term:`CVE_PRODUCT`. | ||
| 2067 | |||
| 1978 | .. _ref-classes-python_flit_core: | 2068 | .. _ref-classes-python_flit_core: |
| 1979 | 2069 | ||
| 1980 | ``python_flit_core.bbclass`` | 2070 | ``python_flit_core.bbclass`` |
diff --git a/documentation/ref-manual/terms.rst b/documentation/ref-manual/terms.rst index cba514c345..a9c84fe3a5 100644 --- a/documentation/ref-manual/terms.rst +++ b/documentation/ref-manual/terms.rst | |||
| @@ -323,6 +323,23 @@ universal, the list includes them just in case: | |||
| 323 | :term:`build host<Build Host>` and other components, that can | 323 | :term:`build host<Build Host>` and other components, that can |
| 324 | work on specific hardware. | 324 | work on specific hardware. |
| 325 | 325 | ||
| 326 | :term:`SBOM` | ||
| 327 | This term means *Software Bill of Materials*. When you distribute | ||
| 328 | software, it offers a description of all the components you used, | ||
| 329 | their corresponding licenses, their dependencies, the changes that were | ||
| 330 | applied and the known vulnerabilities that were fixed. | ||
| 331 | |||
| 332 | This can be used by the recipients of the software to assess | ||
| 333 | their exposure to license compliance and security vulnerability issues. | ||
| 334 | |||
| 335 | See the :wikipedia:`Software Supply Chain <Software_supply_chain>` | ||
| 336 | article on Wikipedia for more details. | ||
| 337 | |||
| 338 | The OpenEmbedded Build System can generate such documentation for your | ||
| 339 | project, in :term:`SPDX` format, based on all the metadata it used to | ||
| 340 | build the software images. See the ":ref:`dev-manual/common-tasks:creating | ||
| 341 | a software bill of materials`" section of the Development Tasks manual. | ||
| 342 | |||
| 326 | :term:`Source Directory` | 343 | :term:`Source Directory` |
| 327 | This term refers to the directory structure | 344 | This term refers to the directory structure |
| 328 | created as a result of creating a local copy of the ``poky`` Git | 345 | created as a result of creating a local copy of the ``poky`` Git |
| @@ -383,6 +400,17 @@ universal, the list includes them just in case: | |||
| 383 | ":ref:`overview-manual/development-environment:repositories, tags, and branches`" | 400 | ":ref:`overview-manual/development-environment:repositories, tags, and branches`" |
| 384 | section in the Yocto Project Overview and Concepts Manual. | 401 | section in the Yocto Project Overview and Concepts Manual. |
| 385 | 402 | ||
| 403 | :term:`SPDX` | ||
| 404 | This term means *Software Package Data Exchange*, and is used as a open | ||
| 405 | standard for providing a *Software Bill of Materials* (:term:`SBOM`). | ||
| 406 | This standard is developed through a `Linux Foundation project | ||
| 407 | <https://spdx.dev/>`__ and is used by the OpenEmbedded Build System to | ||
| 408 | provide an :term:`SBOM` associated to each a software image. | ||
| 409 | |||
| 410 | For details, see Wikipedia's :wikipedia:`SPDX page <Software_Package_Data_Exchange>` | ||
| 411 | and the ":ref:`dev-manual/common-tasks:creating a software bill of materials`" | ||
| 412 | section of the Development Tasks manual. | ||
| 413 | |||
| 386 | :term:`Task` | 414 | :term:`Task` |
| 387 | A per-recipe unit of execution for BitBake (e.g. | 415 | A per-recipe unit of execution for BitBake (e.g. |
| 388 | :ref:`ref-tasks-compile`, | 416 | :ref:`ref-tasks-compile`, |
diff --git a/documentation/ref-manual/variables.rst b/documentation/ref-manual/variables.rst index 47462233c9..c182478a31 100644 --- a/documentation/ref-manual/variables.rst +++ b/documentation/ref-manual/variables.rst | |||
| @@ -1469,15 +1469,31 @@ system and gives an overview of their function and contents. | |||
| 1469 | # This is windows only issue. | 1469 | # This is windows only issue. |
| 1470 | CVE_CHECK_IGNORE += "CVE-2020-15523" | 1470 | CVE_CHECK_IGNORE += "CVE-2020-15523" |
| 1471 | 1471 | ||
| 1472 | :term:`CVE_CHECK_SHOW_WARNINGS` | ||
| 1473 | Specifies whether or not the :ref:`cve-check <ref-classes-cve-check>` | ||
| 1474 | class should generate warning messages on the console when unpatched | ||
| 1475 | CVEs are found. The default is "1", but you may wish to set it to "0" if | ||
| 1476 | you are already examining/processing the logs after the build has | ||
| 1477 | completed and thus do not need the warning messages. | ||
| 1478 | |||
| 1472 | :term:`CVE_CHECK_SKIP_RECIPE` | 1479 | :term:`CVE_CHECK_SKIP_RECIPE` |
| 1473 | The list of package names (:term:`PN`) for which | 1480 | The list of package names (:term:`PN`) for which |
| 1474 | CVEs (Common Vulnerabilities and Exposures) are ignored. | 1481 | CVEs (Common Vulnerabilities and Exposures) are ignored. |
| 1475 | 1482 | ||
| 1483 | :term:`CVE_DB_UPDATE_INTERVAL` | ||
| 1484 | Specifies the CVE database update interval in seconds, as used by | ||
| 1485 | ``cve-update-db-native``. The default value is "86400" i.e. once a day | ||
| 1486 | (24*60*60). If the value is set to "0" then the update will be forced | ||
| 1487 | every time. Alternatively, a negative value e.g. "-1" will disable | ||
| 1488 | updates entirely. | ||
| 1489 | |||
| 1476 | :term:`CVE_PRODUCT` | 1490 | :term:`CVE_PRODUCT` |
| 1477 | In a recipe, defines the name used to match the recipe name | 1491 | In a recipe, defines the name used to match the recipe name |
| 1478 | against the name in the upstream `NIST CVE database <https://nvd.nist.gov/>`__. | 1492 | against the name in the upstream `NIST CVE database <https://nvd.nist.gov/>`__. |
| 1479 | 1493 | ||
| 1480 | The default is ${:term:`BPN`}. If it does not match the name in the NIST CVE | 1494 | The default is ${:term:`BPN`} (except for recipes that inherit the |
| 1495 | :ref:`pypi <ref-classes-pypi>` class where it is set based upon | ||
| 1496 | :term:`PYPI_PACKAGE`). If it does not match the name in the NIST CVE | ||
| 1481 | database or matches with multiple entries in the database, the default | 1497 | database or matches with multiple entries in the database, the default |
| 1482 | value needs to be changed. | 1498 | value needs to be changed. |
| 1483 | 1499 | ||
| @@ -1492,6 +1508,18 @@ system and gives an overview of their function and contents. | |||
| 1492 | 1508 | ||
| 1493 | CVE_PRODUCT = "vendor:package" | 1509 | CVE_PRODUCT = "vendor:package" |
| 1494 | 1510 | ||
| 1511 | :term:`CVE_VERSION` | ||
| 1512 | In a recipe, defines the version used to match the recipe version | ||
| 1513 | against the version in the `NIST CVE database <https://nvd.nist.gov/>`__ | ||
| 1514 | when usign :ref:`cve-check <ref-classes-cve-check>`. | ||
| 1515 | |||
| 1516 | The default is ${:term:`PV`} but if recipes use custom version numbers | ||
| 1517 | which do not map to upstream software component release versions and the versions | ||
| 1518 | used in the CVE database, then this variable can be used to set the | ||
| 1519 | version number for :ref:`cve-check <ref-classes-cve-check>`. Example:: | ||
| 1520 | |||
| 1521 | CVE_VERSION = "2.39" | ||
| 1522 | |||
| 1495 | :term:`CVSDIR` | 1523 | :term:`CVSDIR` |
| 1496 | The directory in which files checked out under the CVS system are | 1524 | The directory in which files checked out under the CVS system are |
| 1497 | stored. | 1525 | stored. |
| @@ -6089,6 +6117,14 @@ system and gives an overview of their function and contents. | |||
| 6089 | 6117 | ||
| 6090 | :term:`PV` is the default value of the :term:`PKGV` variable. | 6118 | :term:`PV` is the default value of the :term:`PKGV` variable. |
| 6091 | 6119 | ||
| 6120 | :term:`PYPI_PACKAGE` | ||
| 6121 | When inheriting the :ref:`pypi <ref-classes-pypi>` class, specifies the | ||
| 6122 | `PyPI <https://pypi.org/>`__ package name to be built. The default value | ||
| 6123 | is set based upon :term:`BPN` (stripping any "python-" or "python3-" | ||
| 6124 | prefix off if present), however for some packages it will need to be set | ||
| 6125 | explicitly if that will not match the package name (e.g. where the | ||
| 6126 | package name has a prefix, underscores, uppercase letters etc.) | ||
| 6127 | |||
| 6092 | :term:`PYTHON_ABI` | 6128 | :term:`PYTHON_ABI` |
| 6093 | When used by recipes that inherit the | 6129 | When used by recipes that inherit the |
| 6094 | :ref:`setuptools3 <ref-classes-setuptools3>` class, denotes the | 6130 | :ref:`setuptools3 <ref-classes-setuptools3>` class, denotes the |
| @@ -7058,6 +7094,77 @@ system and gives an overview of their function and contents. | |||
| 7058 | 7094 | ||
| 7059 | You can specify only a single URL in :term:`SOURCE_MIRROR_URL`. | 7095 | You can specify only a single URL in :term:`SOURCE_MIRROR_URL`. |
| 7060 | 7096 | ||
| 7097 | :term:`SPDX_ARCHIVE_PACKAGED` | ||
| 7098 | This option allows to add to :term:`SPDX` output compressed archives | ||
| 7099 | of the files in the generated target packages. | ||
| 7100 | |||
| 7101 | Such archives are available in | ||
| 7102 | ``tmp/deploy/spdx/MACHINE/packages/packagename.tar.zst`` | ||
| 7103 | under the :term:`Build Directory`. | ||
| 7104 | |||
| 7105 | Enable this option as follows:: | ||
| 7106 | |||
| 7107 | SPDX_ARCHIVE_PACKAGED = "1" | ||
| 7108 | |||
| 7109 | According to our tests on release 4.1 "langdale", building | ||
| 7110 | ``core-image-minimal`` for the ``qemux86-64`` machine, enabling this | ||
| 7111 | option multiplied the size of the ``tmp/deploy/spdx`` directory by a | ||
| 7112 | factor of 13 (+1.6 GiB for this image), compared to just using the | ||
| 7113 | :ref:`create-spdx <ref-classes-create-spdx>` class with no option. | ||
| 7114 | |||
| 7115 | Note that this option doesn't increase the size of :term:`SPDX` | ||
| 7116 | files in ``tmp/deploy/images/MACHINE``. | ||
| 7117 | |||
| 7118 | :term:`SPDX_ARCHIVE_SOURCES` | ||
| 7119 | This option allows to add to :term:`SPDX` output compressed archives | ||
| 7120 | of the sources for packages installed on the target. It currently | ||
| 7121 | only works when :term:`SPDX_INCLUDE_SOURCES` is set. | ||
| 7122 | |||
| 7123 | This is one way of fulfilling "source code access" license | ||
| 7124 | requirements. | ||
| 7125 | |||
| 7126 | Such source archives are available in | ||
| 7127 | ``tmp/deploy/spdx/MACHINE/recipes/recipe-packagename.tar.zst`` | ||
| 7128 | under the :term:`Build Directory`. | ||
| 7129 | |||
| 7130 | Enable this option as follows:: | ||
| 7131 | |||
| 7132 | SPDX_INCLUDE_SOURCES = "1" | ||
| 7133 | SPDX_ARCHIVE_SOURCES = "1" | ||
| 7134 | |||
| 7135 | According to our tests on release 4.1 "langdale", building | ||
| 7136 | ``core-image-minimal`` for the ``qemux86-64`` machine, enabling | ||
| 7137 | these options multiplied the size of the ``tmp/deploy/spdx`` | ||
| 7138 | directory by a factor of 11 (+1.4 GiB for this image), | ||
| 7139 | compared to just using the :ref:`create-spdx <ref-classes-create-spdx>` | ||
| 7140 | class with no option. | ||
| 7141 | |||
| 7142 | Note that using this option only marginally increases the size | ||
| 7143 | of the :term:`SPDX` output in ``tmp/deploy/images/MACHINE/`` | ||
| 7144 | (+ 0.07\% with the tested image), compared to just enabling | ||
| 7145 | :term:`SPDX_INCLUDE_SOURCES`. | ||
| 7146 | |||
| 7147 | :term:`SPDX_INCLUDE_SOURCES` | ||
| 7148 | This option allows to add a description of the source files used to build | ||
| 7149 | the host tools and the target packages, to the ``spdx.json`` files in | ||
| 7150 | ``tmp/deploy/spdx/MACHINE/recipes/`` under the :term:`Build Directory`. | ||
| 7151 | As a consequence, the ``spdx.json`` files under the ``by-namespace`` and | ||
| 7152 | ``packages`` subdirectories in ``tmp/deploy/spdx/MACHINE`` are also | ||
| 7153 | modified to include references to such source file descriptions. | ||
| 7154 | |||
| 7155 | Enable this option as follows:: | ||
| 7156 | |||
| 7157 | SPDX_INCLUDE_SOURCES = "1" | ||
| 7158 | |||
| 7159 | According to our tests on release 4.1 "langdale", building | ||
| 7160 | ``core-image-minimal`` for the ``qemux86-64`` machine, enabling | ||
| 7161 | this option multiplied the total size of the ``tmp/deploy/spdx`` | ||
| 7162 | directory by a factor of 3 (+291 MiB for this image), | ||
| 7163 | and the size of the ``IMAGE-MACHINE.spdx.tar.zst`` in | ||
| 7164 | ``tmp/deploy/images/MACHINE`` by a factor of 130 (+15 MiB for this | ||
| 7165 | image), compared to just using the | ||
| 7166 | :ref:`create-spdx <ref-classes-create-spdx>` class with no option. | ||
| 7167 | |||
| 7061 | :term:`SPDXLICENSEMAP` | 7168 | :term:`SPDXLICENSEMAP` |
| 7062 | Maps commonly used license names to their SPDX counterparts found in | 7169 | Maps commonly used license names to their SPDX counterparts found in |
| 7063 | ``meta/files/common-licenses/``. For the default :term:`SPDXLICENSEMAP` | 7170 | ``meta/files/common-licenses/``. For the default :term:`SPDXLICENSEMAP` |
