¡Construya automáticamente las facturas de software Cyclonedx de materiales (SBOMS) para paquetes NIX!
Bombon genera cyclonedx v1.5 sboms que apuntan a cumplir con:
Si encuentra que no cumplen de ninguna manera, ¡abra un problema!
nix flake init -t github:nikstur/bombon O copie manualmente esto a flake.nix en su repositorio:
# 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 { } Algunos ecosistemas de lenguaje en las dependencias de proveedores Nixpkg (especialmente Rust and Go). Esto significa que no todas las dependencias son su propia derivación y, por lo tanto, Bombon no puede registrar su información como lo hace con las dependencias de Nix "normales". Sin embargo, Bombon puede leer automáticamente SBOMS generados por otras herramientas (como cargo-cyclonedx ) para las dependencias vendidas de una derivación de passthru llamada bombonVendoredSbom .
Puede usar la función passthruVendoredSbom.rust bombonVendoredSbom
myPackageWithSbom = bombon . passthruVendoredSbom . rust myPackage { inherit pkgs ; } ;O usando copos:
myPackageWithSbom = bombon . lib . ${ system } . passthruVendoredSbom . rust myPackage { inherit pkgs ; } ;Una SBOM construida a partir de esta nueva derivación ahora incluirá las dependencias vendidas.
buildBom acepta opciones como un conjunto de atributos. Todos los atributos son opcionales:
extraPaths : una lista de rutas de las tiendas para considerar también para el SBOM. Esto es útil cuando construye imágenes que descargan sus referencias (por ejemplo, con unsafeDiscardReferences pero aún desea que su contenido aparezca en el SBOM. Las extraPaths aparecerán como componentes de la derivación principal.includeBuildtimeDependencies : Boolean Flag para incluir las dependencias de la producción de plano en la salida.excludes : una lista de patrones de regex de rutas de las tiendas para excluir del SBOM final.Ejemplo:
bombon . lib . ${ system } . buildBom pkgs . hello {
extraPaths = [ pkgs . git ] ;
includeBuildtimeDependencies = true ;
excludes = [ "service" ] ;
} passthruVendoredSbom.rust también acepta includeBuildtimeDependencies como un atributo opcional.
Ejemplo:
myPackageWithSbom = bombon . passthruVendoredSbom . rust myPackage { inherit pkgs ; includeBuildtimeDependencies = true ; } ; Durante el desarrollo, el NIX REPL es una forma conveniente y rápida de probar los cambios. Comience el replica, cargando su versión local de NIXPKGS.
nix repl < nixpkgs >Dentro de la replica, cargue el bosque de bombas y construya el BOM para un paquete que le interese.
:l .
:b lib.x86_64-linux.buildBom python3 { }
Recuerde volver a cargar el Bombon Flake cada vez que realiza cambios en cualquiera del código fuente.
La forma en que se recuperan las dependencias usando NIX está fuertemente influenciada por este artículo de blog de Nicolas Mattia.