Bu sayfada, hermetiklik, hermetik derlemeler kullanmanın avantajları ve derlemelerinizdeki hermetik olmayan davranışları belirleme stratejileri ele alınmaktadır.
Genel Bakış
Aynı giriş kaynak kodu ve ürün yapılandırması verildiğinde, hermetik bir derleme sistemi, derlemeyi ana sistemdeki değişikliklerden izole ederek her zaman aynı çıkışı döndürür.
Derlemeyi izole etmek için hermetik derlemeler, yerel veya uzak ana makineye yüklenen kitaplıklara ve diğer yazılımlara duyarsızdır. Derleyiciler gibi derleme araçlarının belirli sürümlerine ve kitaplıklar gibi bağımlılıklara bağlıdır. Bu sayede, derleme ortamının dışındaki hizmetlere bağlı olmadığından derleme süreci bağımsız hale gelir.
Sızdırmazlığın iki önemli yönü vardır:
- İzolasyon: Hermetik derleme sistemleri, araçları kaynak kodu olarak ele alır. Araçların kopyalarını indirir, depolama alanlarını ve kullanımlarını yönetilen dosya ağaçlarında yönetirler. Bu, ana makine ile yerel kullanıcı arasında, yüklü dil sürümleri de dahil olmak üzere izolasyon oluşturur.
- Kaynak kimliği: Hermetik derleme sistemleri, girişlerin aynı olmasını sağlamaya çalışır. Git gibi kod depoları, benzersiz bir karma koduyla kod mutasyonları kümelerini tanımlar. Hermetik derleme sistemleri, derlemenin girişindeki değişiklikleri belirlemek için bu karma değeri kullanır.
Avantajları
Hermetik derlemelerin başlıca avantajları şunlardır:
- Hız: Bir işlemin çıkışı önbelleğe alınabilir ve girişler değişmediği sürece işlemin tekrar çalıştırılması gerekmez.
- Paralel yürütme: Belirli bir giriş ve çıkış için derleme sistemi, verimli ve paralel yürütmeyi hesaplamak üzere tüm işlemlerin grafiğini oluşturabilir. Derleme sistemi, kuralları yükler ve bir işlem grafiği hesaplar. Ayrıca, önbellekte aramak için girişleri karma olarak oluşturur.
- Birden fazla derleme: Aynı makinede birden fazla hermetik derleme oluşturabilirsiniz. Her derleme farklı araçlar ve sürümler kullanır.
- Yeniden üretilebilirlik: Hermetik derlemeler, derlemeyi oluşturan koşulları tam olarak bildiğiniz için sorun giderme açısından faydalıdır.
Sızdırmazlık sorunlarını belirleme
Bazel'e geçiş yapmaya hazırlanıyorsanız mevcut derlemelerinizin hermetikliğini önceden iyileştirmeniz taşıma işlemini kolaylaştırır. Derlemelerde hermetik olmayan bazı yaygın kaynaklar şunlardır:
.mk
dosyada rastgele işleme- Genellikle derleme kimlikleri veya zaman damgaları içeren, dosyaları deterministik olmayan bir şekilde oluşturan işlemler veya araçlar
- Ana makineler arasında farklılık gösteren sistem ikilileri (ör.
/usr/bin
ikilileri, mutlak yollar, yerel C++ kurallarının otomatik yapılandırması için sistem C++ derleyicileri) - Derleme sırasında kaynak ağacına yazma Bu, aynı kaynak ağacının başka bir hedef için kullanılmasını engeller. İlk derleme, kaynak ağaca yazarak hedef A için kaynak ağacı düzeltir. Bu durumda, B hedefi oluşturulmaya çalışıldığında işlem başarısız olabilir.
Sızdırmaz olmayan derlemelerle ilgili sorunları giderme
Yerel yürütmeyle başlayarak, yerel önbellek isabetlerini etkileyen sorunlar, hermetik olmayan işlemleri ortaya çıkarır.
- Boş sıralı derlemelerden emin olun:
make
komutunu çalıştırıp başarılı bir derleme elde ederseniz derlemeyi tekrar çalıştırmak herhangi bir hedefi yeniden derlememelidir. Her derleme adımını iki kez veya farklı sistemlerde çalıştırırsanız, dosya içeriklerinin karma değerini karşılaştırıp farklı sonuçlar elde ederseniz derleme yeniden üretilemez. - Çeşitli potansiyel istemci makinelerinden yerel önbellek isabetlerinde hata ayıklama adımlarını çalıştırarak istemci ortamının işlemlere sızdığı durumları yakaladığınızdan emin olun.
- Yalnızca kaynak ağacını ve ana makine araçlarının açık listesini içeren bir Docker container'da derleme yürütün. Derleme hataları ve hata mesajları, örtülü sistem bağımlılıklarını yakalar.
- Uzaktan yürütme kurallarını kullanarak hermetiklik sorunlarını keşfedip düzeltin.
- Bir derlemedeki işlemler durum bilgili olabileceğinden ve derlemeyi ya da çıkışı etkileyebileceğinden, işlem düzeyinde sıkı korumalı alan özelliğini etkinleştirin.
- Workspace kuralları, geliştiricilerin harici çalışma alanlarına bağımlılıklar eklemesine olanak tanır ancak bu kurallar, süreçte rastgele işleme yapılmasını sağlayacak kadar kapsamlıdır. Bazel çalışma alanı kurallarında, Bazel komutunuza
--experimental_workspace_rules_log_file=PATH
işaretini ekleyerek hermetik olmayan bazı işlemlerin günlüğünü alabilirsiniz.
Bazel ile hermetiklik
Diğer projelerin Bazel ile hermetik derlemeler kullanarak nasıl başarı elde ettiği hakkında daha fazla bilgi için şu BazelCon konuşmalarına göz atın:
- Building Real-time Systems with Bazel (SpaceX)
- Bazel Uzaktan Yürütme ve Uzaktan Önbelleğe Alma (Uber ve TwoSigma)
- Uzaktan yürütme ve önbelleğe alma ile daha hızlı derlemeler
- Fusing Bazel: Daha Hızlı Artımlı Derlemeler
- Uzaktan Yürütme ve Yerel Yürütme
- Uzaktan Önbelleğe Almanın Kullanılabilirliğini İyileştirme (IBM)
- Bazel ile Kendi Kendine Giden Arabalar Üretme (BMW)
- Bazel ile Kendi Kendine Giden Arabalar Geliştirme + Soru-Cevap (GM Cruise)