Créez automatiquement CyclonEdx Software Bills of Materials (SBOMS) pour les packages NIX!
Bombon génère Cyclonedx v1.5 SBOMS qui vise à être conforme à:
Si vous constatez qu'ils ne sont pas conformes en aucune façon, veuillez ouvrir un problème!
nix flake init -t github:nikstur/bombon Ou copiez manuellement ceci sur flake.nix dans votre référentiel:
# file: flake.nix
{
inputs = {
nixpkgs . url = "github:NixOS/nixpkgs/nixpkgs-unstable" ;
bombon . url = "github:nikstur/bombon" ;
bombon . inputs . nixpkgs . follows = "nixpkgs" ;
} ;
outputs = { self , nixpkgs , bombon } :
let
system = "x86_64-linux" ;
pkgs = import nixpkgs { inherit system ; } ;
in
{
packages . ${ system } . default = bombon . lib . ${ system } . buildBom pkgs . hello { } ;
} ;
}niv init
niv add nikstur/bombon # file: default.nix
let
sources = import ./nix/sources.nix { } ;
pkgs = import sources . nixpkgs { } ;
bombon = import sources . bombon { inherit pkgs ; } ;
in
bombon . buildBom pkgs . hello { } Certains écosystèmes linguistiques dans les dépendances des fournisseurs NIXPKGS (notamment rouiller et go). Cela signifie que toutes les dépendances ne sont pas sa propre dérivation et que Bombon ne peut donc pas enregistrer leurs informations comme elle le fait avec les dépendances "normales" NIX. Cependant, Bombon peut lire automatiquement SBOMS généré par d'autres outils (comme cargo-cyclonedx ) pour les dépendances vendues d'une dérivation de pasthru appelée bombonVendoredSbom .
Vous pouvez utiliser la fonction passthruVendoredSbom.rust bombonVendoredSbom
myPackageWithSbom = bombon . passthruVendoredSbom . rust myPackage { inherit pkgs ; } ;Ou en utilisant des flocons:
myPackageWithSbom = bombon . lib . ${ system } . passthruVendoredSbom . rust myPackage { inherit pkgs ; } ;Un SBOM construit à partir de cette nouvelle dérivation comprendra désormais les dépendances vendues.
buildBom accepte les options comme un ensemble d'attributs. Tous les attributs sont facultatifs:
extraPaths : une liste de chemins de magasin à considérer également pour le SBOM. Ceci est utile lorsque vous construisez des images qui rejettent leurs références (par exemple avec unsafeDiscardReferences mais vous voulez toujours que leur contenu apparaisse dans le SBOM. Les extraPaths apparaîtront comme des composants de la dérivation principale.includeBuildtimeDependencies : Flag booléen pour inclure les dépendances de construction dans la sortie.excludes : une liste des modèles regex de chemins de magasin pour exclure du SBOM final.Exemple:
bombon . lib . ${ system } . buildBom pkgs . hello {
extraPaths = [ pkgs . git ] ;
includeBuildtimeDependencies = true ;
excludes = [ "service" ] ;
} passthruVendoredSbom.rust accepte également includeBuildtimeDependencies en tant qu'attribut facultatif.
Exemple:
myPackageWithSbom = bombon . passthruVendoredSbom . rust myPackage { inherit pkgs ; includeBuildtimeDependencies = true ; } ; Pendant le développement, le NIX REP est un moyen pratique et rapide de tester les modifications. Démarrez le REP, chargeant votre version locale de NixPKGS.
nix repl < nixpkgs >À l'intérieur du REP, chargez le flocon de Bombon et construisez la nomenclature pour un colis qui vous intéresse.
:l .
:b lib.x86_64-linux.buildBom python3 { }
N'oubliez pas de recharger le flocon de Bombon chaque fois que vous apportez des modifications à l'un des code source.
La façon dont les dépendances sont récupérées à l'aide de NIX est fortement influencée par cet article de blog de Nicolas Mattia.