Crie automaticamente as notas de materiais de software CyclonedX (SBOMS) para pacotes NIX!
Bombon gera ciclonedx v1.5 sboms que pretendem estar em conformidade com:
Se você achar que eles não são compatíveis de alguma forma, abra um problema!
nix flake init -t github:nikstur/bombon Ou copie manualmente isso para flake.nix em seu repositório:
# 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 { } Alguns ecossistemas de idiomas em dependências de fornecedores nixpkgs (principalmente ferrugem e ir). Isso significa que nem toda dependência é sua própria derivação e, portanto, a Bombon não pode registrar suas informações como as dependências "normais". No entanto, o BOMBON pode ler automaticamente SBOMs gerados por outras ferramentas (como cargo-cyclonedx ) para as dependências vendidas de uma derivação de Passthru chamada bombonVendoredSbom .
Você pode usar a função passthruVendoredSbom.rust para adicionar a derivação bombonVendoredSbom Passthru a um pacote de ferrugem:
myPackageWithSbom = bombon . passthruVendoredSbom . rust myPackage { inherit pkgs ; } ;Ou usando flocos:
myPackageWithSbom = bombon . lib . ${ system } . passthruVendoredSbom . rust myPackage { inherit pkgs ; } ;Um SBOM construído a partir desta nova derivação agora incluirá as dependências de vender.
buildBom aceita opções como um conjunto de atributos. Todos os atributos são opcionais:
extraPaths : uma lista de caminhos de loja a serem considerados também para o SBOM. Isso é útil quando você constrói imagens que descartam suas referências (por exemplo, com unsafeDiscardReferences mas você ainda deseja que o conteúdo deles apareça no SBOM. Os extraPaths aparecerão como componentes da derivação principal.includeBuildtimeDependencies : Bandeira booleana para incluir dependências de construção de construção na saída.excludes : uma lista de padrões regex de caminhos de loja a serem excluídos do SBOM final.Exemplo:
bombon . lib . ${ system } . buildBom pkgs . hello {
extraPaths = [ pkgs . git ] ;
includeBuildtimeDependencies = true ;
excludes = [ "service" ] ;
} passthruVendoredSbom.rust também aceita includeBuildtimeDependencies como um atributo opcional.
Exemplo:
myPackageWithSbom = bombon . passthruVendoredSbom . rust myPackage { inherit pkgs ; includeBuildtimeDependencies = true ; } ; Durante o desenvolvimento, o Nix Repl é uma maneira conveniente e rápida de testar as alterações. Inicie o REPL, carregando sua versão local do NIXPKGS.
nix repl < nixpkgs >Dentro do REPL, carregue o Bombon Flake e construa o nascido para um pacote em que você está interessado.
:l .
:b lib.x86_64-linux.buildBom python3 { }
Lembre-se de recarregar o Bombon Flake toda vez que fizer alterações em qualquer código-fonte.
A maneira como as dependências são recuperadas usando o NIX é fortemente influenciada por este artigo do Blog de Nicolas Mattia.