Bangun Tagihan Perangkat Lunak Cyclonedx secara otomatis (SBOMS) untuk paket NIX!
Bombon menghasilkan cyclonedx v1.5 sboms yang bertujuan untuk mematuhi:
Jika Anda menemukan bahwa mereka tidak sesuai dengan cara apa pun, buka masalah!
nix flake init -t github:nikstur/bombon Atau salin secara manual ini ke flake.nix di repositori Anda:
# 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 { } Beberapa ekosistem bahasa di nixpkgs (terutama karat dan go) dependensi vendor. Ini berarti bahwa tidak setiap ketergantungan adalah derivasi sendiri dan dengan demikian Bombon tidak dapat mencatat informasi mereka seperti halnya dengan ketergantungan NIX "normal". Namun, Bombon dapat secara otomatis membaca SBOM yang dihasilkan oleh alat lain (seperti cargo-cyclonedx ) untuk dependensi vendore dari derivasi passthru yang disebut bombonVendoredSbom .
Anda dapat menggunakan fungsi passthruVendoredSbom.rust untuk menambahkan derivasi passthru bombonVendoredSbom ke paket karat:
myPackageWithSbom = bombon . passthruVendoredSbom . rust myPackage { inherit pkgs ; } ;Atau menggunakan serpihan:
myPackageWithSbom = bombon . lib . ${ system } . passthruVendoredSbom . rust myPackage { inherit pkgs ; } ;SBOM yang dibangun dari derivasi baru ini sekarang akan mencakup dependensi vendor.
buildBom menerima opsi sebagai set atribut. Semua atribut opsional:
extraPaths : Daftar jalur toko untuk juga dipertimbangkan untuk SBOM. Ini berguna ketika Anda membangun gambar yang membuang referensi mereka (misalnya dengan unsafeDiscardReferences tetapi Anda masih ingin isinya muncul di SBOM. extraPaths akan muncul sebagai komponen dari derivasi utama.includeBuildtimeDependencies : Boolean Flag untuk memasukkan dependensi waktu dalam output.excludes : Daftar Pola Regex jalur toko untuk dikecualikan dari SBOM akhir.Contoh:
bombon . lib . ${ system } . buildBom pkgs . hello {
extraPaths = [ pkgs . git ] ;
includeBuildtimeDependencies = true ;
excludes = [ "service" ] ;
} passthruVendoredSbom.rust juga menerima includeBuildtimeDependencies sebagai atribut opsional.
Contoh:
myPackageWithSbom = bombon . passthruVendoredSbom . rust myPackage { inherit pkgs ; includeBuildtimeDependencies = true ; } ; Selama pengembangan, NIX REPL adalah cara yang nyaman dan cepat untuk menguji perubahan. Mulailah repl, muat NIXPKGS versi lokal Anda.
nix repl < nixpkgs >Di dalam rept, muat serpihan bombon dan bangun bom untuk paket yang Anda minati.
:l .
:b lib.x86_64-linux.buildBom python3 { }
Ingatlah untuk memuat ulang serpihan Bombon setiap kali Anda membuat perubahan pada salah satu kode sumber.
Cara dependensi diambil menggunakan Nix sangat dipengaruhi oleh artikel blog ini dari Nicolas Mattia.