
OCI2Git
[//]: # (محاكاة لاختبار test.yaml مستقبلاً) [//]: # ([](https://github.com/Virviil/oci2git/actions))
تطبيق بلغة Rust يقوم بتحويل صور الحاويات (Docker، وغيرها) إلى مستودعات Git، وينتج فاتورة مواد نظام الملفات (fsbom) بصيغة YAML. كل طبقة من طبقات الحاوية تمثل كتزامن (commit) في Git، مع الحفاظ على تاريخ وهيكل الصورة الأصلية.

الميزات
- تحليل صور Docker واستخراج معلومات الطبقات
- إنشاء مستودع Git بحيث تمثل كل طبقة من الصورة تزامناً منفصلاً
- توليد فاتورة مواد نظام الملفات (fsbom) بصيغة YAML مع قائمة ملفات لكل طبقة
- دعم الطبقات الفارغة (ENV, WORKDIR, وغيرها) كعمليات تزامن فارغة
- استخراج بيانات التعريف بالكامل إلى صيغة Markdown
- بنية قابلة للتوسعة لدعم محركات الحاويات المختلفة
حالات الاستخدام
مقارنة الطبقات
عند استكشاف مشكلات الحاويات، يمكنك الاستفادة من قدرات مقارنة Git القوية لتحديد التغييرات بين أي طبقتين. عبر تنفيذ أمرgit diff بين التزامين، يمكن للمهندسين معرفة الملفات التي تمت إضافتها أو تعديلها أو حذفها بدقة، مما يسهل فهم تأثير كل تعليمة Dockerfile وتحديد التغييرات المسببة للمشاكل.

تتبع الأصل
باستخدام أمرgit blame، يمكن للمطورين بسرعة معرفة الطبقة التي أدخلت ملفاً أو سطراً معيناً من الشيفرة. هذا مفيد جداً عند تشخيص مشاكل ملفات الإعدادات أو الاعتمادات. بدلاً من فحص كل طبقة يدوياً، يمكنك تتبع أصل أي ملف مباشرةً إلى طبقته الأصلية وتعليمة Dockerfile المقابلة.تتبع دورة حياة الملفات
يتيح لك OCI2Git تتبع مسار ملف محدد خلال تاريخ صورة الحاوية. يمكنك ملاحظة متى تم إنشاء الملف لأول مرة، وكيف تم تعديله عبر الطبقات، وإذا/متى تمت إزالته في النهاية. هذه الرؤية الشاملة تساعد على فهم تطور الملف دون الحاجة لتتبع التغييرات يدوياً عبر العديد من الطبقات.لتتبع تاريخ ملف في صورة الحاوية الخاصة بك — بما في ذلك متى ظهر لأول مرة أو تم تعديله أو حذفه — يمكنك استخدام أوامر Git التالية بعد التحويل:
# Full history of a file (including renames)
git log --follow -- /rootfs/my/file/pathFirst appearance (i.e. creation) - see which layer introduced the file
git log --diff-filter=A -- /rootfs/my/file/pathAll changes made to the file (with diffs)
git log -p --follow -- /rootfs/my/file/pathWhen the file was deleted
git log --diff-filter=D -- /rootfs/my/file/pathShow short commit info (concise layer history)
git log --follow --oneline -- /rootfs/my/file/path
تجعل هذه الأوامر من السهل تتبع التاريخ الكامل لأي ملف عبر طبقات الحاوية دون تعقيد استخراج ومقارنة ملفات tar للطبقات يدويًا.التحليل متعدد الطبقات
في بعض الأحيان تأتي المقارنات الأكثر إفادة من فحص التغييرات عبر عدة طبقات غير متتالية. باستخدام OCI2Git، يمكنك الاستفادة من أدوات المقارنة في Git لتحليل كيفية تطور المكونات عبر مراحل بناء متعددة، واكتشاف الأنماط التي قد تكون غير مرئية عند النظر فقط إلى الطبقات المتجاورة.استكشاف الطبقات
من خلال استخدام أمرgit checkout للانتقال إلى أي التزام محدد، يمكنك فحص نظام ملفات الحاوية تمامًا كما كان موجودًا في تلك الطبقة. يتيح ذلك للمطورين استكشاف الحالة الدقيقة للملفات والمجلدات في أي نقطة من عملية إنشاء الصورة، مما يوفر سياقًا لا يقدر بثمن عند تصحيح الأخطاء أو فحص سلوك الحاوية.

التحليل متعدد الصور
عند العمل مع عدة صور حاوية تشترك في أصل مشترك، يقوم OCI2Git بإنشاء الفروع بشكل ذكي فقط عندما تتباعد الصور فعليًا. يتيح لك ذلك تحليل عدة صور ذات صلة في مستودع واحد مع الحفاظ على تاريخها المشترك.
# Convert first image to create the base repository
oci2git postgres:16.9-alpine3.21 -o alpConvert second image to the same output folder
oci2git nginx:1.28.0-alpine-slim -o alp
يقوم OCI2Git باكتشاف الطبقات المشتركة بين الصور تلقائيًا وينشئ بنية تفريع تعكس القاعدة المشتركة بينها. سيعرض سجل Git ما يلي:
- جذع مشترك يحتوي على جميع الطبقات المشتركة
- فروع منفصلة تتشعب فقط عندما تختلف الصور فعليًا
- تصور واضح لمواضيع اشتراك الصور في السلالة وأين تصبح فريدة
- معالجة ذكية للتكرار: إذا تمت معالجة نفس الصورة بالضبط مرتين، يكتشف الخوارزمية ذلك قبل الالتزام النهائي للبيانات الوصفية ويتجنب إنشاء فرع مكرر
- تحليل عائلة الصور: فهم كيفية ارتباط المتغيرات المختلفة من صورة (إصدارات مختلفة، معماريات، أو إعدادات) ببعضها البعض
- تأثير الصورة الأساسية: رؤية كيف تؤثر التغييرات على الصورة الأساسية بالضبط على صور مشتقة متعددة
- فرص التحسين: تحديد المكونات المشتركة التي يمكن الاستفادة منها بشكل أفضل عبر متغيرات الصور

حالات استخدام إضافية
- تدقيق الأمان: تحديد اللحظة التي أُدخلت فيها الحزم أو الإعدادات الضعيفة وتتبعها إلى أوامر البناء المحددة.
- تحسين الصور: تحليل بنية الطبقات لاكتشاف العمليات المتكررة أو الملفات الكبيرة التي يمكن دمجها، مما يساعد في تقليل حجم الصورة.
- إدارة التبعيات: مراقبة متى تمت إضافة التبعيات أو ترقيتها أو إزالتها عبر سجل الصورة.
- تحسين عملية البناء: فحص تكوين الطبقات لتحسين أوامر Dockerfile من أجل تخزين مؤقت أفضل وحجم صورة أصغر.
- المقارنة بين الصور: تحويل صور متعددة ذات صلة إلى مستودعات Git واستخدام أدوات المقارنة الخاصة بـ Git لتحليل اختلافاتها وقواسمها المشتركة.
التثبيت
مدراء الحزم
#### macOS / Linux (Homebrew)
brew tap virviil/oci2git
brew install oci2git#### ديبيان / أوبونتو
قم بتنزيل وتثبيت حزمة .deb من الإصدار الأخير:
# For amd64 (x86_64)
wget https://github.com/virviil/oci2git/releases/latest/download/oci2git_VERSION_amd64.deb
sudo dpkg -i oci2git_VERSION_amd64.debFor arm64
wget https://github.com/virviil/oci2git/releases/latest/download/oci2git_VERSION_arm64.deb
sudo dpkg -i oci2git_VERSION_arm64.deb#### آرش لينكس (AUR)
# Using yay
yay -S oci2git-binUsing paru
paru -S oci2git-binManual installation
git clone https://aur.archlinux.org/oci2git-bin.git
cd oci2git-bin
makepkg -siالثنائيات الجاهزة
قم بتنزيل الثنائي المناسب لمنصتك من الإصدار الأخير:
# Linux x86_64
wget https://github.com/virviil/oci2git/releases/latest/download/oci2git-linux-x86_64.tar.gz
tar xzf oci2git-linux-x86_64.tar.gz
sudo mv oci2git-linux-x86_64 /usr/local/bin/oci2git
chmod +x /usr/local/bin/oci2gitmacOS (Apple Silicon)
wget https://github.com/virviil/oci2git/releases/latest/download/oci2git-darwin-aarch64.tar.gz
tar xzf oci2git-darwin-aarch64.tar.gz
sudo mv oci2git-darwin-aarch64 /usr/local/bin/oci2git
chmod +x /usr/local/bin/oci2gitمن Crates.io
cargo install oci2gitمن المصدر
# Clone the repository
git clone https://github.com/virviil/oci2git.git
cd oci2gitInstall locally
cargo install --path .الاستخدام
oci2git [OPTIONS]
oci2git convert [OPTIONS]
oci2git fsbom [OPTIONS] convert — صورة OCI → مستودع Git
oci2git convert [OPTIONS]
or simply:
oci2git خيارات:
-o, --output دليل الإخراج لمستودع Git [الافتراضي: ./container_repo]
-e, --engine محرك الحاوية المراد استخدامه (docker، nerdctl، tar) [الافتراضي: docker]
-v, --verbose وضع الإيضاح (-v للمعلومات، -vv للتصحيح، -vvv للتتبع)
fsbom — قائمة المواد لنظام الملفات
oci2git fsbom [OPTIONS]
الخيارات:
-o, --output مسار إخراج ملف BOM بصيغة YAML [القيمة الافتراضية: ./fsbom.yml]
-e, --engine محرك الحاويات المستخدم (docker, nerdctl, tar) [القيمة الافتراضية: docker]
-v, --verbose وضع الإيضاح (-v للمعلومات، -vv للتنقيح، -vvv للتتبع)متغيرات البيئة:
TMPDIR ضبط متغير البيئة هذا لتغيير الموقع الافتراضي المستخدم لمعالجة البيانات الوسيطة. هذا يعتمد على النظام الأساسي (مثلاً، TMPDIR على Unix/macOS، وTEMP أو TMP على Windows).
أمثلة
التحويل
باستخدام محرك Docker (الافتراضي):
oci2git ubuntu:latest
or explicitly:
oci2git convert ubuntu:latest -o ./ubuntu-repoاستخدام أرشيف صورة تم تنزيله مسبقًا:
oci2git convert -e tar -o ./ubuntu-repo /path/to/ubuntu-latest.tar
يتوقع محرك tar ملف tarball صالح بتنسيق OCI، والذي يتم إنشاؤه عادةً باستخدام الأمر docker save:# Create a tarball from a local Docker image
docker save -o ubuntu-latest.tar ubuntu:latestConvert the tarball to a Git repository
oci2git convert -e tar -o ./ubuntu-repo ubuntu-latest.tarسيؤدي ذلك إلى إنشاء مستودع Git في ./ubuntu-repo يحتوي على:
Image.md- بيانات وصفية كاملة حول الصورة بتنسيق Markdownrootfs/- محتوى نظام الملفات من الحاوية
- تحتوي أول عملية إدخال على ملف
Image.mdفقط مع جميع البيانات الوصفية - تمثل كل عملية إدخال لاحقة طبقة من الصورة الأصلية
- تتضمن عمليات الإدخال أمر Dockerfile كرسالة الإدخال
قائمة مكونات نظام الملفات (fsbom)
توليد ملف YAML يسرد كل ملف تم إدخاله أو تعديله في كل طبقة:
oci2git fsbom ubuntu:latest -o ubuntu.ymlاستخدام ملف tarball:
oci2git fsbom -e tar image.tar -o image-bom.ymlيُدرج ملف YAML الناتج كل طبقة مع إدخالاتها المميزة حسب النوع (file، hardlink، symlink، directory) والحالة (n:uid:gid للجديدة، m:uid:gid للمعدلة). الملفات المحذوفة (OCI whiteouts) مستثناة.
layers:
- index: 0
command: "ADD rootfs.tar.gz / # buildkit"
digest: "sha256:45f3ea58..."
entries:
- type: file
path: "bin/busybox"
size: 919304
mode: 493
stat: "n:0:0"
- type: hardlink
path: "bin/sh"
target: "bin/busybox"
stat: "n:0:0"
- type: symlink
path: "lib64"
target: "lib"
stat: "n:0:0"
- index: 1
command: "RUN apk add --no-cache curl"
digest: "sha256:..."
entries:
- type: file
path: "usr/bin/curl"
size: 204800
mode: 493
stat: "n:0:0"
- type: file
path: "etc/apk/world"
size: 32
mode: 420
stat: "m:0:0"هيكل المستودع
repository/
├── .git/
├── Image.md # Complete image metadata
└── rootfs/ # Filesystem content from the container
المتطلبات
- إصدار Rust 2021
- واجهة أوامر Docker (لدعم محرك Docker)
- Git
الترخيص
MIT
[التوثيق]: https://docs.rs/oci2git/
--- Tranlated By Open Ai Tx | Last indexed: 2026-04-02 ---