NIX 패키지 용 CyclonEdx 소프트웨어 재료 청구서 (SBOM)를 자동으로 구축하십시오!
Bombon은 Cyclonedx v1.5 SBOM을 생성하여 다음을 준수하는 것을 목표로합니다.
어떤 식 으로든 준수하지 않는다면 문제를 열어주십시오!
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) 공급 업체 의존성. 이는 모든 의존성이 자체 파생이 아니므로 Bombon은 "정상적인"NIX 의존성과 마찬가지로 정보를 기록 할 수 없음을 의미합니다. 그러나 Bombon은 bombonVendoredSbom 이라는 패스 스루 파생에서 공급 된 종속성을 위해 다른 도구 ( cargo-cyclonedx 와 같은)에 의해 생성 된 SBOM을 자동으로 읽을 수 있습니다.
passthruVendoredSbom.rust 함수를 사용하여 bombonVendoredSbom Passthru 파생물을 Rust 패키지에 추가 할 수 있습니다.
myPackageWithSbom = bombon . passthruVendoredSbom . rust myPackage { inherit pkgs ; } ;또는 플레이크 사용 :
myPackageWithSbom = bombon . lib . ${ system } . passthruVendoredSbom . rust myPackage { inherit pkgs ; } ;이 새로운 파생으로 구축 된 SBOM에는 이제 벤더링 된 종속성이 포함됩니다.
buildBom 옵션을 속성 세트로 수락합니다. 모든 속성은 선택 사항입니다.
extraPaths : SBOM에 대해 고려할 상점 경로 목록. 이것은 참조를 unsafeDiscardReferences 하는 이미지를 작성할 때 유용합니다 (예 : SBOM에 내용이 나타나기를 원합니다. extraPaths 기본 파생의 구성 요소로 나타납니다.includeBuildtimeDependencies : 출력에 빌드 타임 종속성을 포함하는 부울 플래그.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은 변경 사항을 테스트하는 편리하고 빠른 방법입니다. Repl을 시작하여 로컬 버전의 nixpkgs를로드하십시오.
nix repl < nixpkgs >대체 내부에 Bombon Flake를로드하고 관심있는 패키지의 BOM을 만듭니다.
:l .
:b lib.x86_64-linux.buildBom python3 { }
소스 코드를 변경할 때마다 Bombon 플레이크를 다시로드해야합니다.
Nix를 사용하여 의존성을 검색하는 방식은 Nicolas Mattia 의이 블로그 기사에 크게 영향을받습니다.