بناء تلقائيا بناء فواتير البرامج Cyclonedx للمواد (SBOMS) لحزم NIX!
بومبون يولد 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 ) للتبعيات المزايدة من اشتقاق Passhru يسمى 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 وسيلة مريحة وسريعة لاختبار التغييرات. ابدأ الاستبدال ، وقم بتحميل الإصدار المحلي من NixPKGs.
nix repl < nixpkgs >داخل REPL ، قم بتحميل Flake Bombon وقم ببناء BOM لحزمة تهتم بها.
:l .
:b lib.x86_64-linux.buildBom python3 { }
تذكر إعادة تحميل Flake Bombon في كل مرة تقوم فيها بإجراء تغييرات على أي رمز المصدر.
تتأثر الطريقة التي يتم بها استرداد التبعيات باستخدام NIX بشدة بمقال المدونة من نيكولاس ماتيا.