هذا المستودع هو موطن لأدوات سطر الأوامر المختلفة ومكتبات Python التي تهدف إلى المساعدة في تحديات سلسلة التوريد البرمجيات:
sbomnix هي أداة توليد SBOMS مع إعطاء اشتقاق NIX أو مسار خارج.nixgraph في الاستعلام وتصور الرسوم البيانية للاعتماد على اشتقاق NIX أو مسار خارج.nixmeta nixpkgs meta-attributes من إصدار nixpkgs المعطى.vulnxscan هو ماسح ضوئي للضعف يوضح استخدام SBOMs في عمليات مسح الثغرة الأمنية.repology_cli و repology_cve هي عملاء سطر الأوامر إلى repology.org.nix_outdated هي أداة تجد تبعيات NIX التي عفا عليها الزمن للمسار المحدد ، وتسرد الحزم القديمة بترتيب الأولوية بناءً على عدد الحزم الأخرى التي تعتمد على الحزمة القديمة المعطاة.provenance هي أداة سطر الأوامر لإنشاء ملفات شاهد SLSA V1.0 المتوافقة مع تنسيق JSON لأي اشتقاق NIX أو الاشتقاق.للحصول على مثال على كيفية استخدام الأدوات المتوفرة في هذا المستودع لأتمتة فحوصات الضعف اليومية لمشروع Nix Flake ، انظر: Ghafscan.
يتوفر SBOMs Cyclonedx و SPDX لكل إصدار من أدوات SBOMNIX في أصول الإصدار.
جميع الأدوات في هذا المستودع تنشأ من إطار GHAF.
يتطلب sbomnix أدوات NIX شائعة مثل nix و nix-store . من المتوقع أن تكون هذه الأدوات في $PATH .
يمكن تشغيل sbomnix كقشرات nix من مستودع tiiuae/sbomnix :
# '--' signifies the end of argument list for `nix`.
# '--help' is the first argument to `sbomnix`
$ nix run github:tiiuae/sbomnix#sbomnix -- --helpأو من مستودع محلي:
$ git clone https://github.com/tiiuae/sbomnix
$ cd sbomnix
$ nix run . # sbomnix -- --help راجع القائمة الكاملة لأهداف Flake المدعومة عن طريق تشغيل nix flake show .
إذا تم تمكين Nix Flakes ، ابدأ قذيفة تطوير:
$ git clone https://github.com/tiiuae/sbomnix
$ cd sbomnix
$ nix develop يمكنك أيضًا استخدام nix-shell للدخول إلى قشرة التطوير:
$ git clone https://github.com/tiiuae/sbomnix
$ cd sbomnix
$ nix-shell ضع في اعتبارك أن هذا لا يضيف ثنائيات نقطة الدخول المختلفة إلى PATH مباشرة. يتم إنتاجها خلال بناء setuptools.
أثناء تواجدك في DevShell ، يمكنك تشغيل أدوات سطر الأوامر المختلفة عبر ملفات Entploint مباشرة:
# sbomnix:
$ src/sbomnix/main.py --help
# nixgraph:
$ src/nixgraph/main.py --help
# nixmeta:
$ src/nixmeta/main.py --help
# vulnxscan:
$ src/vulnxscan/vulnxscan_cli.py --help
# repology_cli:
$ src/repology/repology_cli.py --help
# repology_cve:
$ src/repology/repology_cve.py --help
# nix_outdated:
$ src/nixupdate/nix_outdated.py --help
# provenance:
$ src/provenance/main.py --helpإغلاق مسار متجر NIX هو قائمة بجميع مسارات المتجر التابعة ، بشكل متكرر ، المشار إليها في مسار المتجر المستهدف. للحصول على حزمة ، يسرد إغلاق اشتقاقها جميع تبعيات BuildTime. على سبيل المثال ، بالنسبة لبرنامج C بسيط C ، تتضمن تبعيات BuildTime حزمًا لتمهيد GCC و StdenV و GLIBC و Bash وما إلى ذلك على الهندسة المعمارية المستهدفة. حتى برنامج Hello-World C البسيط يتضمن عادة أكثر من 150 حزمة في قائمة تبعيات BuildTime. من المهم أن نلاحظ أن توليد تبعيات وقت البناء في NIX لا يتطلب بناء الهدف.
للرجوع إليها ، فإن ما يلي رابط إلى الرسم البياني من مثال على برنامج Hello-World C يتضمن أول طبقتين من تبعيات BuildTime: التبعيات المباشرة والمستوى الأول من التبعيات المتعدية: C Hello-World Buildtime ، Depth = 2.
تبعيات وقت التشغيل هي مجموعة فرعية من تبعيات وقت الإنشاء. يحدد NIX تلقائيًا تبعيات وقت التشغيل عن طريق مسح مسارات الإخراج التي تم إنشاؤها (أي إخراج البناء) لمسارات متجر التبعيات في BuildTime. هذا يعني أن NIX يحتاج إلى إنشاء الإخراج المستهدف أولاً ، قبل تحديد تبعيات وقت التشغيل. للرجوع إليها ، فيما يلي رسم بياني تبعي كامل وقت التشغيل لمثال على برنامج Hello-World C:
بشكل افتراضي ، عند الاقتضاء ، تفترض الأدوات في هذا المستودع تبعيات وقت التشغيل. هذا يعني ، على سبيل المثال ، أنه ما لم ينص على خلاف ذلك ، فإن sbomnix ستخرج SBOM بما في ذلك تبعيات وقت التشغيل فقط ، ويخرج nixgraph الرسم البياني للوقت ، وتبائم وقت تشغيل vulnxscan و nix_outdated . نظرًا لأن NIX بحاجة إلى إنشاء المخرجات المستهدفة لتحديد تبعيات وقت التشغيل ، فإن جميع الأدوات في هذا المستودع ستقوم أيضًا ببناء (حقوق القوة) الإخراج المستهدف كجزء من استدعاء كل أداة عند تحديد تبعيات وقت التشغيل. تدعم جميع الأدوات المذكورة في هذا المستودع العمل أيضًا مع تبعيات BuildTime بدلاً من تبعيات وقت التشغيل بمساعدة -وسيطة سطر الأوامر --buildtime . كما ذكرنا سابقًا ، لا يتطلب توليد تبعيات BuildTime في NIX بناء الهدف. وبالمثل ، عندما يتم تحديد --buildtime ، لا تحتاج الأدوات الموجودة في هذا المستودع إلى إنشاء الهدف المحدد.
تعمل أمثلة الاستخدام لكل من الحزمة المبنية ، وكذلك داخل DevShell.
ضع في اعتبارك داخل DevShell ، يجب استبدال المكالمات إلى sbomnix بـ src/sbomnix/main.py (وتشبه نقاط الدخول الأخرى).
في الأمثلة أدناه ، نستخدم NIX Package wget كهدف مثال. لطباعة wget Outpath على نظامك المحلي ، حاول:
$ nix eval -f ' <nixpkgs> ' ' wget.outPath '
" /nix/store/8nbv1drmvh588pwiwsxa47iprzlgwx6j-wget-1.21.3 " بشكل افتراضي ، يقوم sbomnix بمسح الهدف المعطى ويولد SBOM بما في ذلك تبعيات وقت التشغيل. إشعار: يتطلب تحديد تبعيات وقت التشغيل المستهدف في NIX بناء الهدف.
# Target can be specified with flakeref too, e.g.:
# sbomnix .
# sbomnix github:tiiuae/sbomnix
# sbomnix nixpkgs#wget
# Ref: https://nixos.org/manual/nix/stable/command-ref/new-cli/nix3-flake.html#flake-references
$ sbomnix /nix/store/8nbv1drmvh588pwiwsxa47iprzlgwx6j-wget-1.21.3
...
INFO Wrote: sbom.cdx.json
INFO Wrote: sbom.spdx.json
INFO Wrote: sbom.csvالمخرجات الرئيسية هي ملفات SBOM JSON SBOM.CDX.JSON و SBOM.SPDX.JSON في تنسيقات Cyclonedx و SPDX.
بشكل افتراضي ، يقوم sbomnix بمسح الهدف المعطى لتبعيات وقت التشغيل. يمكنك إخبار Sbomnix بتحديد تبعيات وقت البناء باستخدام وسيطة --buildtime . مثال أدناه يولد SBOM بما في ذلك التبعيات في وقت الإنشاء. إشعار: على عكس تبعيات وقت التشغيل ، فإن تحديد تبعيات وقت الإنشاء لا يتطلب بناء الهدف.
$ sbomnix /nix/store/8nbv1drmvh588pwiwsxa47iprzlgwx6j-wget-1.21.3 --buildtime يمكن استخدام sbomnix مع مسارات الإخراج أيضًا (مثل أي شيء ينتج عنه ارتباط نماذج):
$ sbomnix /path/to/result يدعم sbomnix أيضًا مراجع المسح الضوئي:
$ sbomnix github:NixOS/nixpkgs ? ref=nixos-unstable#wget --buildtime يجد sbomnix تبعيات الحزمة باستخدام nixgraph . علاوة على ذلك ، يمكن أيضًا استخدام nixgraph كأداة مستقلة لتصور تبعيات الحزمة. أدناه ، نعرض مثالًا على تصور تبعيات وقت wget الحزمة:
$ nixgraph /nix/store/8nbv1drmvh588pwiwsxa47iprzlgwx6j-wget-1.21.3 --depth=2الذي يخرج الرسم البياني التبعية كصورة (مع الحد الأقصى 2):
لمزيد من الأمثلة على الاستعلام وتصور تبعيات الحزمة ، راجع: Nixgraph.
أي طلبات سحب وأسئلة وتقارير الأخطاء مرحب بها. لبدء التطوير ، نوصي باستخدام قذيفة تطوير Nix Flakes:
$ git clone https://github.com/tiiuae/sbomnix
$ cd sbomnix/
# Optionally, install git hooks to check the git commit message
$ ./githooks/install-git-hooks.sh
$ nix develop Run make help على رؤية قائمة الأهداف المدعومة. قبل إرسال أي طلبات سحب ، تأكد من تشغيل make pre-push على الأقل دون إخفاقات.
لإلغاء تنشيط Nix Devshell ، قم بتشغيل exit في قذيتك. لرؤية أهداف Nix Flake الأخرى ، قم بتشغيل nix flake show .
تم ترخيص هذا المشروع بموجب ترخيص Apache-2.0-راجع ملف Apache-2.0.txt للحصول على التفاصيل.
يستخدم sbomnix ماسحة اشتقاق Nix Store (nix.py و derivive.py) في الأصل من Vulnix.