สร้างค่าใช้จ่ายซอฟต์แวร์ CyclonedX โดยอัตโนมัติ (SBOMs) สำหรับแพ็คเกจ NIX!
Bombon สร้าง Cyclonedx 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 (ที่โดดเด่นที่สุด) ซึ่งหมายความว่าไม่ใช่การพึ่งพาทุกครั้งที่ได้มาจากตัวเองและทำให้ Bombon ไม่สามารถบันทึกข้อมูลของพวกเขาเช่นเดียวกับการพึ่งพา "ปกติ" 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 : ธงบูลีนเพื่อรวมการพึ่งพาการสร้างในเอาต์พุตexcludes : รายการรูปแบบ regex ของเส้นทางร้านค้าเพื่อแยกออกจาก 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 >ภายใน REPL โหลด Bombon Flake และสร้าง BOM สำหรับแพ็คเกจที่คุณสนใจ
:l .
:b lib.x86_64-linux.buildBom python3 { }
อย่าลืมโหลดเกล็ด Bombon อีกครั้งทุกครั้งที่คุณเปลี่ยนแปลงซอร์สโค้ดใด ๆ
วิธีการพึ่งพาการพึ่งพาโดยใช้ Nix ได้รับอิทธิพลอย่างมากจากบทความบล็อกนี้จาก Nicolas Mattia