Bu sayfada, hermetiklik, hermetik derlemeleri kullanmanın avantajları ve derlemelerinizdeki hermetik olmayan davranışları belirleme stratejileri ele alınmaktadır.
Genel Bakış
Hermetik derleme sistemi, aynı giriş kaynak kodu ve ürün yapılandırması verildiğinde 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 karşı 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 işlemi, derleme ortamının dışındaki hizmetlere ihtiyaç duymadığı için kendi kendine yeterli olur.
Mühürlü olmanın iki önemli yönü vardır:
- Tecrit: Hermetik derleme sistemleri, araçları kaynak kod olarak ele alır. Bu kullanıcılar, araçların kopyalarını indirir ve depolama alanlarını ve kullanımlarını yönetilen dosya ağaçlarında yönetir. Bu, ana makine ile yerel kullanıcı arasında, dillerin yüklü sürümleri de dahil olmak üzere yalıtım oluşturur.
- Kaynak kimliği: Hermetik derleme sistemleri, girişlerin aynı olmasını sağlamaya çalışır. Git gibi kod depoları, kod mutasyonlarını benzersiz bir karma oluşturma koduyla tanımlar. Hermetik derleme sistemleri, derlemenin girişindeki değişiklikleri belirlemek için bu karma oluşturma işlemini 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ına gerek yoktur.
- Paralel yürütme: Derleme sistemi, belirli bir giriş ve çıkış için verimli ve paralel yürütmeyi hesaplamak üzere tüm işlemlerin grafiğini oluşturabilir. Derleme sistemi kuralları yükler ve önbellekte aranacak bir işlem grafiği ile karma oluşturma girişleri hesaplar.
- Birden fazla derleme: Aynı makinede, her biri farklı araçlar ve sürümler kullanan birden fazla hermetik derleme oluşturabilirsiniz.
- Yinelenebilirlik: Hermetik derlemeler, derlemeyi oluşturan koşulları tam olarak bildiğiniz için sorun giderme için iyidir.
Hava geçirmez olmayan cihazları belirleme
Bazel'e geçmeye hazırlanıyorsanız mevcut derlemelerinizin mühürlülüğünü önceden iyileştirirseniz taşıma işlemi daha kolay olur. Derlemelerde sızdırmazlık sorunlarının yaygın nedenlerinden bazıları şunlardır:
.mk
dosyalarında keyfi işleme- Dosyaları genellikle yapı kimlikleri veya zaman damgaları içeren, rastgele olmayan bir şekilde oluşturan işlemler ya da araçlar
- Barındırıcılar arasında farklılık gösteren sistem ikili dosyaları (ör.
/usr/bin
ikili dosyaları, mutlak yollar, yerel C++ kuralları otomatik yapılandırması için sistem C++ derleyicileri) - Derleme sırasında kaynak ağaca yazma. Bu sayede aynı kaynak ağacının başka bir hedef için kullanılması engellenir. İlk derleme, kaynak ağaca yazarak kaynak ağacı A hedefi için düzeltir. Bu durumda, B hedefini oluşturma girişimi başarısız olabilir.
Hermetik olmayan derlemelerle ilgili sorunları giderme
Yerel yürütmeyle başlayan, yerel önbellek isabetlerini etkileyen sorunlar, hermetik olmayan işlemleri gösterir.
- Sıralamalı boş derlemeler oluşturduğunuzdan emin olun:
make
komutunu çalıştırır ve başarılı bir derleme alırsanız derlemeyi tekrar çalıştırdığınızda hiçbir hedef yeniden oluşturulmaz. Her derleme adımını iki kez veya farklı sistemlerde çalıştırır, dosya içeriklerinin karma değerini karşılaştırır ve farklı sonuçlar alırsanız derleme yeniden oluşturulamaz. - İşlemlere istemci ortamı sızıntısı olan tüm durumları yakaladığınızdan emin olmak için çeşitli potansiyel istemci makinelerinden yerel önbellek isabetlerini hata ayıklama adımlarını çalıştırın.
- Yalnızca kontrol edilen kaynak ağacını ve ana makine araçlarının açık listesini içeren bir Docker kapsayıcısında derleme çalıştırın. Derleme hataları ve hata mesajları, gizli sistem bağımlılıkları yakalar.
- Uzaktan yürütme kurallarını kullanarak hermetiklik sorunlarını tespit edip düzeltin.
- Derlemedeki işlemler duruma bağlı olabileceği ve derlemeyi ya da çıktıyı etkileyebileceği için işlem başına katı korumalı alan etkinleştirin.
- Çalışma alanı kuralları, geliştiricilerin harici çalışma alanlarına bağımlılık eklemesine olanak tanır ancak süreçte keyfi işleme yapılmasına izin verecek kadar zengindir. Bazel komutunuza
--experimental_workspace_rules_log_file=PATH
işaretini ekleyerek Bazel Workspace kurallarında hermetik olmayan bazı işlemlerin günlüğünü alabilirsiniz.
Bazel ile hermetiklik
Diğer projelerin Bazel ile hermetik derlemeleri kullanarak nasıl başarılı olduğu hakkında daha fazla bilgi için aşağıdaki BazelCon konuşmalarına göz atın:
- Bazel ile Gerçek Zamanlı Sistemler Oluşturma (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
- Bazel'i Birleştirme: Daha Hızlı Artımlı Derlemeler
- Uzaktan yürütme ve yerel yürütme
- Uzaktan Önbelleğe Alma'nın Kullanılabilirliğini İyileştirme (IBM)
- Bazel ile Kendi Kendini Sürücü Arabalar Oluşturma (BMW)
- Bazel ile Kendi Kendini Sürücü Olan Arabalar Geliştirme + Soru-Cevap (GM Cruise)