Автоматически построить CycloneDx Software Shalls of Materials (SBOMS) для пакетов NIX!
Бомкон генерирует CYLONEDX V1.5 SBOMS, которые стремятся соответствовать:
Если вы обнаружите, что они не совместимы в любом случае, пожалуйста, откройте проблему!
nix flake init -t github:nikstur/bombon Или вручную скопируйте это, чтобы flake.nix в вашем репозитории:
# 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 { } Некоторые языковые экосистемы в Nixpkgs (в частности, ржавчина и Go) зависимости поставщика. Это означает, что не каждая зависимость является его собственным деривацией, и, следовательно, Бомкон не может записать свою информацию, как это происходит с «нормальными» зависимостями NIX. Тем не менее, Bombon может автоматически читать SBOMS, генерируемые другими инструментами (например, cargo-cyclonedx ) для поставленных зависимостей из вывода Passthru под названием bombonVendoredSbom .
Вы можете использовать функцию passthruVendoredSbom.rust , чтобы добавить вывод bombonVendoredSbom Passthru в пакет ржавчины:
myPackageWithSbom = bombon . passthruVendoredSbom . rust myPackage { inherit pkgs ; } ;Или используя хлопья:
myPackageWithSbom = bombon . lib . ${ system } . passthruVendoredSbom . rust myPackage { inherit pkgs ; } ;SBOM, построенный из этого нового вывода, теперь будет включать в себя зависимости от поставщиков.
buildBom принимает параметры в качестве набора атрибутов. Все атрибуты необязательны:
extraPaths : список путей магазина, которые также рассмотреть для SBOM. Это полезно, когда вы создаете изображения, которые отказываются от их ссылок (например, с помощью unsafeDiscardReferences но вы все еще хотите, чтобы их содержимое появилось в SBOM. extraPaths появятся в качестве компонентов основного вывода.includeBuildtimeDependencies : Boolean Flag, чтобы включить зависимости времени настройки в выходе.excludes : список режима режима тракта, чтобы исключить из окончательного SBOM.Пример:
bombon . lib . ${ system } . buildBom pkgs . hello {
extraPaths = [ pkgs . git ] ;
includeBuildtimeDependencies = true ;
excludes = [ "service" ] ;
} passthruVendoredSbom.rust также принимает includeBuildtimeDependencies в качестве дополнительного атрибута.
Пример:
myPackageWithSbom = bombon . passthruVendoredSbom . rust myPackage { inherit pkgs ; includeBuildtimeDependencies = true ; } ; Во время разработки NIX Repl - это удобный и быстрый способ проверить изменения. Начните реплику, загрузив локальную версию Nixpkgs.
nix repl < nixpkgs >Внутри реплики загрузите хлопья Бомкон и построите долю для пакета, который вас интересует.
:l .
:b lib.x86_64-linux.buildBom python3 { }
Не забудьте перезагрузить хлопья Bombon каждый раз, когда вы вносили изменения в любой из исходного кода.
На то, как на зависимости от него можно найти зависимости с использованием NIX, сильно влияет статья в блоге от Николаса Маттии.