Web Analytics

oci2git

⭐ 401 stars Turkish by Virviil

🌐 Dil

OCI2Git

[Dokümantasyon][documentation] Crates.io Lisans İndirmeler

[//]: # (mock for future test.yaml) [//]: # ([![Test Durumu](https://img.shields.io/github/actions/workflow/status/Virviil/oci2git/rust.yml?branch=master&event=push&label=Test)](https://github.com/Virviil/oci2git/actions))

Konteyner imajlarını (Docker, vb.) Git depolarına dönüştüren ve YAML formatında dosya sistemi malzeme listesi (fsbom) oluşturan bir Rust uygulamasıdır. Her konteyner katmanı, orijinal imajın geçmişini ve yapısını koruyarak bir Git commit'i olarak temsil edilir.

OCI2Git'in nginx imajını dönüştürme demosu

Özellikler

Kullanım Senaryoları

Katman Karşılaştırması (Layer Diffing)

Konteyner sorunlarını giderirken, Git'in güçlü karşılaştırma (diff) yetenekleriyle herhangi iki katman arasındaki değişiklikleri tam olarak belirleyebilirsiniz. Commit'ler arasında git diff çalıştırarak mühendisler hangi dosyaların eklendiğini, değiştirildiğini veya silindiğini kesin olarak görebilir, böylece her Dockerfile talimatının etkisini anlamak ve sorunlu değişiklikleri tespit etmek çok daha kolay olur. Katman diff örneği

Kaynak Takibi (Origin Tracking)

git blame kullanarak geliştiriciler, belirli bir dosya veya kod satırının hangi katmanda eklendiğini hızlıca tespit edebilir. Bu, özellikle yapılandırma dosyaları veya bağımlılıklarla ilgili sorunları çözerken çok değerlidir. Her katmanı manuel olarak incelemek yerine, herhangi bir dosyanın kaynağını ve ilgili Dockerfile talimatını anında takip edebilirsiniz.

Dosya Yaşam Döngüsü Takibi (File Lifecycle Tracking)

OCI2Git, belirli bir dosyanın konteyner imajının geçmişindeki yolculuğunu izlemenizi sağlar. Bir dosyanın ilk ne zaman oluşturulduğunu, katmanlar boyunca nasıl değiştirildiğini ve ne zaman/varsa silindiğini görebilirsiniz. Bu kapsamlı görünüm, potansiyel olarak onlarca katman arasında değişiklikleri manuel olarak takip etmek zorunda kalmadan dosya evrimini anlamanıza yardımcı olur.

Konteyner imajınızdaki bir dosyanın geçmişini — ilk ne zaman göründüğü, değiştirildiği veya silindiği dahil — takip etmek için, dönüşümden sonra şu Git komutlarını kullanabilirsiniz:

# Full history of a file (including renames)
git log --follow -- /rootfs/my/file/path

First appearance (i.e. creation) - see which layer introduced the file

git log --diff-filter=A -- /rootfs/my/file/path

All changes made to the file (with diffs)

git log -p --follow -- /rootfs/my/file/path

When the file was deleted

git log --diff-filter=D -- /rootfs/my/file/path

Show short commit info (concise layer history)

git log --follow --oneline -- /rootfs/my/file/path

Bu komutlar, katman arşivlerini manuel olarak çıkartıp karşılaştırmanın karmaşıklığı olmadan, herhangi bir dosyanın konteyner katmanları arasındaki tam geçmişini izlemeyi kolaylaştırır.

Çok Katmanlı Analiz

Bazen en anlamlı karşılaştırmalar, ardışık olmayan birden fazla katmandaki değişiklikleri inceleyerek elde edilir. OCI2Git ile, bileşenlerin birden fazla derleme aşamasında nasıl evrildiğini analiz etmek için Git’in karşılaştırma araçlarını kullanabilir, yalnızca bitişik katmanlara bakıldığında fark edilmeyen desenleri tespit edebilirsiniz.

Katman Keşfi

Herhangi bir belirli commite geçmek için git checkout komutunu kullanarak, konteyner dosya sistemini o katmanda olduğu gibi inceleyebilirsiniz. Bu, geliştiricilere, imajın oluşturulma sürecinin herhangi bir noktasında dosyaların ve dizinlerin kesin durumunu inceleme olanağı sağlar, hata ayıklarken veya konteyner davranışını incelerken paha biçilmez bir bağlam sunar. Önceki commite geçiş

Çoklu İmaj Analizi

Ortak bir soya sahip birden fazla konteyner imajı ile çalışırken, OCI2Git yalnızca imajlar gerçekten ayrıştığında akıllıca dallar oluşturur. Böylece, ortak geçmişlerini korurken, tek bir depoda birden fazla ilgili imajı analiz edebilirsiniz.

# Convert first image to create the base repository
oci2git postgres:16.9-alpine3.21 -o alp

Convert second image to the same output folder

oci2git nginx:1.28.0-alpine-slim -o alp

OCI2Git, görüntüler arasındaki paylaşılan katmanları otomatik olarak algılar ve ortak tabanlarını yansıtan bir dallanma yapısı oluşturur. Git geçmişi şunları gösterir:

Bu yaklaşım özellikle şu durumlarda değerlidir: Paylaşılan taban ve ayrılan dalları gösteren çoklu-görüntü depo yapısı

Ek Kullanım Durumları

Kurulum

Paket Yöneticileri

#### macOS / Linux (Homebrew)

brew tap virviil/oci2git
brew install oci2git

#### Debian / Ubuntu

En son sürümden .deb paketini indirip kurun:

# For amd64 (x86_64)
wget https://github.com/virviil/oci2git/releases/latest/download/oci2git_VERSION_amd64.deb
sudo dpkg -i oci2git_VERSION_amd64.deb

For arm64

wget https://github.com/virviil/oci2git/releases/latest/download/oci2git_VERSION_arm64.deb sudo dpkg -i oci2git_VERSION_arm64.deb

#### Arch Linux (AUR)

# Using yay
yay -S oci2git-bin

Using paru

paru -S oci2git-bin

Manual installation

git clone https://aur.archlinux.org/oci2git-bin.git cd oci2git-bin makepkg -si

Önceden Derlenmiş İkili Dosyalar

Platformunuza uygun ikili dosyayı en son sürümden indirin:

# 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/oci2git

macOS (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'dan

cargo install oci2git

Kaynak

# Clone the repository
git clone https://github.com/virviil/oci2git.git
cd oci2git

Install locally

cargo install --path .

Kullanım

oci2git [OPTIONS] 
oci2git convert [OPTIONS] 
oci2git fsbom [OPTIONS] 

convert — OCI imajı → Git deposu

oci2git convert [OPTIONS] 

or simply:

oci2git

Seçenekler: -o, --output Git deposu için çıktı dizini [varsayılan: ./container_repo] -e, --engine Kullanılacak konteyner motoru (docker, nerdctl, tar) [varsayılan: docker] -v, --verbose Ayrıntılı mod (-v bilgi için, -vv hata ayıklama için, -vvv izleme için)

fsbom — Dosya sistemi bileşen listesi

oci2git fsbom [OPTIONS] 

Seçenekler: -o, --output YAML BOM dosyası için çıktı yolu [varsayılan: ./fsbom.yml] -e, --engine Kullanılacak konteyner motoru (docker, nerdctl, tar) [varsayılan: docker] -v, --verbose Ayrıntılı mod (-v bilgi için, -vv hata ayıklama için, -vvv izleme için)

Ortam Değişkenleri: TMPDIR Varsayılan olarak ara veri işlemesi için kullanılan konumu değiştirmek için bu ortam değişkenini ayarlayın. Bu platforma bağlıdır (örneğin, Unix/macOS için TMPDIR, Windows için TEMP veya TMP).

Örnekler

Dönüştür

Docker motoru kullanılarak (varsayılan):

oci2git ubuntu:latest

or explicitly:

oci2git convert ubuntu:latest -o ./ubuntu-repo

Zaten indirilmiş bir imaj tarball'ını kullanmak:

oci2git convert -e tar -o ./ubuntu-repo /path/to/ubuntu-latest.tar

Tar motoru, genellikle docker save ile oluşturulan geçerli bir OCI formatında tarball bekler:

# Create a tarball from a local Docker image
docker save -o ubuntu-latest.tar ubuntu:latest

Convert the tarball to a Git repository

oci2git convert -e tar -o ./ubuntu-repo ubuntu-latest.tar

Bu, ./ubuntu-repo dizininde aşağıdakileri içeren bir Git deposu oluşturacaktır:

Git geçmişi, konteynerin katman geçmişini yansıtır:

Dosya Sistemi Malzeme Faturası (fsbom)

Her katmanda eklenen veya değiştirilen tüm dosyaların YAML listesi oluşturulur:

oci2git fsbom ubuntu:latest -o ubuntu.yml

Bir tarball kullanarak:

oci2git fsbom -e tar image.tar -o image-bom.yml

Çıktı YAML, her katmanı girdileri türüne göre etiketlenmiş olarak (file, hardlink, symlink, directory) ve durumu ile birlikte (n:uid:gid yeni için, m:uid:gid değiştirilmiş için) listeler. Silinen dosyalar (OCI whiteout'ları) hariç tutulmuştur.

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"

Depo Yapısı

repository/
├── .git/
├── Image.md     # Complete image metadata
└── rootfs/      # Filesystem content from the container

Gereksinimler

Lisans

MIT

[dokümantasyon]: https://docs.rs/oci2git/

--- Tranlated By Open Ai Tx | Last indexed: 2026-04-02 ---