Skip to Content
Building OsKaynak depolarından özel yazılım

Kaynak depolarından özel yazılım

OpenFactory tarifleri, desteklenen görüntü oluşturucularda özel paket girişi olarak bir Git deposuna başvurabilir. Bu, tedarik zinciri açısından hassas bir yoldur: depo, çözülmüş revizyon, paketleme talimatları, derleme bağımlılıkları ve üretilen paketin tamamının incelenmesi gerekir.

Destek hedefe özeldir. Mevcut Raspberry Pi ve Proxmox yolları da dahil olmak üzere bazı geliştiriciler için kaynak paketi yapıları reddedilir. Bir paketin üretileceğine söz vermeden önce normalleştirilmiş tarifte ve yapı planında kullanılabilirliği doğrulayın.

Tarif şekli

Özel paket girişleri os.custom_packages altında geçerlidir:

{ "os": { "custom_packages": [ { "name": "my-agent", "git_url": "https://github.com/example/my-agent.git", "branch": "release-1.x" } ] } }

Şema, değişmez bir taahhüt alanı değil, bir dal adını kabul eder. Kontrollü bir sürüm için, derleme tarafından çözümlenen kesin taahhüdü kaydedin ve bu taahhüdün, tutulan kaynağın bir parçası olmasını sağlayın. Hareketli bir dal tek başına tekrarlanabilir bir girdi değildir.

Depoyu hazırlayın

Geçerli paket yolu, hedefe uygun yerel paketleme meta verilerini bekliyor. Yaygın örnekler Debian 4 dizini veya RPM spesifikasyonudur. Tam oluşturucu davranışı ve desteklenen hedef sürümler değişebilir; bu nedenle, statik bir uyumluluk tablosuna güvenmek yerine, dağıtılan ortamda minimum paketi doğrulayın.

Debian paketlemesi için en azından şunları inceleyin:

  • debian/control kaynak/ikili kimlik ve bağımlılıklar için;
  • debian/changelog paket versiyonu için;
  • debian/rules ve diğer çalıştırılabilir bakım komut dosyaları;
  • bildirimleri ve sistem birimlerini yükleyin; ve
  • lisanslama ve paketlenmiş üçüncü taraf materyaller.

RPM paketleme için spesifikasyonun kaynaklarını, derleme gereksinimlerini, komut dosyalarını, dosya listesini ve lisans meta verilerini inceleyin.

Hiçbir zaman depo sahipliğinin derleme komut dosyalarını güvenli hale getirdiğini varsaymayın. Paket yapıları, yapı altyapısının yalıtım sınırı içinde güvenilmeyen kaynak ve paketleme mantığını yürütür.

Diğer paket kontrolleri

Yerel paketler

Seçilen dağıtım veya açıkça yapılandırılmış bir depo tarafından halihazırda sağlanan paketler için os.packages kullanın:

{ "os": { "packages": ["curl", "jq"] } }

Paket geçersiz kılmaları

os.package_overrides add, remove veya replace niyetini beyan edebilir:

{ "os": { "package_overrides": [ {"name": "nano", "action": "replace", "replacement": "neovim"}, {"name": "telnet", "action": "remove"} ] } }

Geçersiz kılma, bağımlılık çözümünün bunu onurlandırdığının kanıtı değildir. Nihai paket envanterini ve yokluk/varlık iddialarını doğrulayın.

Ek depolar

os.extra_repos gelişmiş bir giriştir. Eski örneklerde gösterildiği gibi imzasız bir HTTP deposu eklemeyin. Onaylanmış bir depo entegrasyonu, HTTPS aktarımına, sabitlenmiş bir imzalama anahtarına, imza uygulamasına, paket yöneticisine uygun meta verileri yayınlamaya ve belgelenmiş sahiplik ve güncelleme politikasına ihtiyaç duyar. Bu güven kontrolleri mevcut oluşturucu tarafından temsil edilemiyorsa depoyu kullanmayın.

Kabul kanıtı

Her özel paket için şunları koruyun:

  • depo URL’si ve çözümlenmiş taahhüt;
  • kaynak ve beyan edilen lisans incelemesi;
  • ortam ve bağımlılık anlık görüntüsünü oluşturun;
  • günlükler oluşturun ve sonuçta ortaya çıkan paket adı/versiyonu/mimarisi;
  • uygun olduğu yerde paket özeti ve arşiv-imza kanıtı;
  • kurulu paketi gösteren son görüntü envanteri;
  • servis veya yürütülebilir duman testleri; ve
  • kaldırma ve yükseltme davranışı.

Başarılı bir kaynak paketi aşaması yeterli değildir. Görüntü derlemesi daha sonra paketi tüketemeyebilir ve kurulu bir paket hâlâ kullanılamaz durumda olabilir.

Sorun Giderme

  • Paketleme meta verileri reddedildi: Yerel paketi aynı dağıtım sürümü ve mimariyle yerel olarak doğrulayın.
  • Derleme bağımlılığı eksik: söz konusu hedef için onaylı depolarda bulunan bağımlılıkları kullanın; bakımcı betiğinde rastgele ikili dosyaları sessizce getirmeyin.
  • Görüntüde paket yok: Üretilen ikili paket adını normalleştirilmiş yükleme isteği ve son envanterle karşılaştırın.
  • Sürüm değişmedi: yerel sürüm meta verilerini güncelleyin ve yeni kaynak işlemenin çözümlendiğini doğrulayın.
  • Hizmet başarısız oldu: birimini, çalışma zamanı bağımlılıklarını, izinlerini ve konuk günlüklerini inceleyin; yeniden oluşturmadan önce davranış düzeyinde bir iddia ekleyin.