Erstellen Sie automatisch Cyclonedx -Software -Materialrechnungen (SBOMs) für NIX -Pakete!
Bombon erzeugt Cyclonedx V1.5 SBOMs, die sich mit entsprechen sollen:
Wenn Sie feststellen, dass sie in keiner Weise konform sind, öffnen Sie bitte ein Problem!
nix flake init -t github:nikstur/bombon Oder kopieren Sie dies manuell in flake.nix in Ihrem Repository:
# 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 { } Einige Sprachökosysteme in Nixpkgs (vor allem rosten und go) Herstellerabhängigkeiten. Dies bedeutet, dass nicht jede Abhängigkeit eine eigene Ableitung ist und Bombon ihre Informationen nicht so aufzeichnen kann, wie sie es bei "normalen" Nix -Abhängigkeiten tun. Bombon kann jedoch automatisch SBOMs lesen, die von anderen Werkzeugen (z. B. cargo-cyclonedx ) für die gehaltenen Abhängigkeiten von einer Passing-Derivation namens bombonVendoredSbom generiert werden.
Sie können die Funktion passthruVendoredSbom.rust verwenden, um die bombonVendoredSbom Passing -Derivation zu einem Rostpaket hinzuzufügen:
myPackageWithSbom = bombon . passthruVendoredSbom . rust myPackage { inherit pkgs ; } ;Oder mit Flocken:
myPackageWithSbom = bombon . lib . ${ system } . passthruVendoredSbom . rust myPackage { inherit pkgs ; } ;Ein aus dieser neuer Ableitung erstellter SBOM wird nun die verwendeten Abhängigkeiten enthalten.
buildBom akzeptiert Optionen als Attributsatz. Alle Attribute sind optional:
extraPaths : Eine Liste von Speicherpfaden, die auch für das SBOM in Betracht gezogen werden sollen. Dies ist nützlich, wenn Sie Bilder erstellen, die ihre Referenzen verwerfen (z. B. mit unsafeDiscardReferences aber Sie möchten immer noch, dass ihre Inhalte im SBOM erscheinen. Die extraPaths werden als Komponenten der Hauptableitung erscheinen.includeBuildtimeDependencies : boolesche Flagge, um BuildTime -Abhängigkeiten in die Ausgabe einzubeziehen.excludes : Eine Liste der Regex -Muster von Speicherpfaden, die von der endgültigen SBOM ausgeschlossen werden können.Beispiel:
bombon . lib . ${ system } . buildBom pkgs . hello {
extraPaths = [ pkgs . git ] ;
includeBuildtimeDependencies = true ;
excludes = [ "service" ] ;
} passthruVendoredSbom.rust akzeptiert auch includeBuildtimeDependencies als optionales Attribut.
Beispiel:
myPackageWithSbom = bombon . passthruVendoredSbom . rust myPackage { inherit pkgs ; includeBuildtimeDependencies = true ; } ; Während der Entwicklung ist die NIX Reply eine bequeme und schnelle Möglichkeit, Änderungen zu testen. Starten Sie die Reply und laden Sie Ihre lokale Version von NIXPKGS.
nix repl < nixpkgs >Laden Sie im Rahmen der Wiederholung die Bombenflocken und bauen Sie die BOM für ein Paket, an dem Sie interessiert sind.
:l .
:b lib.x86_64-linux.buildBom python3 { }
Denken Sie daran, die Bombon-Flocken jedes Mal erneut zu laden, wenn Sie Änderungen an einem der Quellcode vorgenommen haben.
Die Art und Weise, wie Abhängigkeiten mit Nix abgerufen werden, wird stark von diesem Blog -Artikel von Nicolas Mattia beeinflusst.