Create ConnectCore Security Services .bbclass
This .bbclass allows to generate a .zip file per image, each containing all of the necessary information to run a CVE scan using the Digi ConnectCore Security Services' CVE analysis tool. https://onedigi.atlassian.net/browse/DEL-9632 Signed-off-by: Gabriel Valcazar <gabriel.valcazar@digi.com> (cherry picked from commit fabce3a881454c8a7346538127da5f22862654b6)
This commit is contained in:
parent
6ace4e38f8
commit
fc41a76853
|
|
@ -0,0 +1,76 @@
|
|||
###########################################################
|
||||
#
|
||||
# classes/ccss.bbclass - ConnectCore Security Services
|
||||
#
|
||||
# Generates an SBOM for the CCSS CVE analysis tool
|
||||
#
|
||||
# Copyright (C) 2025 Digi International
|
||||
#
|
||||
#
|
||||
# This source is released under the MIT License.
|
||||
#
|
||||
###########################################################
|
||||
|
||||
inherit vigiles
|
||||
|
||||
CCSS_API_VERSION = "0.1"
|
||||
CCSS_IMAGE_TYPE ?= "dev"
|
||||
CCSS_ENABLE ?= "0"
|
||||
|
||||
python do_ccss_generate_sbom() {
|
||||
import json
|
||||
import os
|
||||
import shutil
|
||||
import tempfile
|
||||
|
||||
# Temporary dir to store all files in the SBOM
|
||||
ccss_tmp_dir = tempfile.mkdtemp(dir=d.getVar('TOPDIR'))
|
||||
|
||||
try:
|
||||
manifest_file = os.path.join(d.getVar('VIGILES_DIR'), d.getVar('VIGILES_MANIFEST_NAME') + d.getVar('VIGILES_MANIFEST_SUFFIX'))
|
||||
ccss_kconfig = os.path.join(d.getVar('VIGILES_DIR'),'.'.join([_get_kernel_pf(d), 'config']))
|
||||
ccss_uconfig = os.path.join(d.getVar('VIGILES_DIR'),'.'.join([_get_uboot_pf(d), 'config']))
|
||||
|
||||
# Copy Vigiles manifest and kernel/uboot configs if they're available
|
||||
if os.path.exists(manifest_file):
|
||||
shutil.copy(manifest_file, os.path.join(ccss_tmp_dir, 'manifest.json'), follow_symlinks=True)
|
||||
if os.path.exists(ccss_kconfig):
|
||||
shutil.copy(ccss_kconfig, os.path.join(ccss_tmp_dir, 'kernel.config'), follow_symlinks=True)
|
||||
if os.path.exists(ccss_uconfig):
|
||||
shutil.copy(ccss_uconfig, os.path.join(ccss_tmp_dir, 'uboot.config'), follow_symlinks=True)
|
||||
|
||||
dict_out = dict(
|
||||
api_version = d.getVar('CCSS_API_VERSION'),
|
||||
date = d.getVar('DATETIME'),
|
||||
has_ccss_patches = bb.utils.contains('BBFILE_COLLECTIONS', 'digi-security', 'y', 'n', d),
|
||||
image_type = d.getVar('CCSS_IMAGE_TYPE'),
|
||||
som = d.getVar('DIGI_SOM'),
|
||||
yocto_codename = d.getVar('DISTRO_CODENAME')
|
||||
)
|
||||
|
||||
with open(os.path.join(ccss_tmp_dir, 'config.json'), 'w') as f_out:
|
||||
s = json.dumps(dict_out, indent=2, sort_keys=True)
|
||||
f_out.write(s)
|
||||
|
||||
# Create .zip file
|
||||
shutil.make_archive(os.path.join(d.getVar('TOPDIR'), 'CCSS_' + d.getVar('IMAGE_BASENAME') + '-' + d.getVar('DATETIME')), 'zip', ccss_tmp_dir)
|
||||
finally:
|
||||
# Remove temporary dir
|
||||
bb.utils.remove(ccss_tmp_dir, recurse=True)
|
||||
}
|
||||
|
||||
# Don't execute do_ccss_generate_sbom() unless explicitly enabled for a given
|
||||
# image
|
||||
python __anonymous() {
|
||||
if d.getVar('CCSS_ENABLE') != '1':
|
||||
d.setVarFlag('do_ccss_generate_sbom', 'noexec', '1')
|
||||
}
|
||||
|
||||
addtask do_ccss_generate_sbom after do_image before do_image_complete
|
||||
|
||||
# Since do_ccss_generate_sbom() uses the DATETIME variable to create the
|
||||
# metadata JSON, said variable will expand to different values when the
|
||||
# function is parsed in different stages of the build (first by the bitbake
|
||||
# cooker, and then by a worker). This causes metadata/hash mismatch errors due
|
||||
# to non-deterministic content, so exclude DATETIME from the hash calculation.
|
||||
do_ccss_generate_sbom[vardepsexclude]="DATETIME"
|
||||
Loading…
Reference in New Issue