Skip to Content
Building OsBaşlangıç komut dosyaları

Başlangıç komut dosyaları

os.startup_scripts ortaya çıkan görüntü için sınırlı sistem ve tek seferlik çalışma oluşturur. Her giriş bir kabuk komutunu, gerekli paketleri, yürütme kullanıcısını ve sipariş birimini bildirir.

Başlangıç ​​komut dosyaları, run_as aksi belirtilmediği sürece root özellikli kodlardır. Herhangi bir kurulum komut dosyasıyla aynı incelemeyi almaları gerekir.

Kanonik şekil

{ "os": { "startup_scripts": [ { "name": "write-build-marker", "description": "Create a local readiness marker after networking is available.", "command": "set -Eeuo pipefail\ninstall -d -m 0755 /var/lib/example\nprintf '%s\\n' ready > /var/lib/example/build-ready", "packages": [], "run_as": "root", "after": "network-online.target" } ] } }

Alanlar description ve command’tir, eski script alanı değildir. run_as ve after de Snake_case’i kullanır. after bir dizi değil, tek bir sistem birimi dizisidir.

Şema en fazla 32 girişi ve sınırlı bir komut boyutunu kabul eder. Doğrulama, boş komutları ve NUL baytlarını reddeder, ancak kabuk içeriğini güvenli veya önemsiz yapmaz.

Yeniden denemeler ve kısmi başarısızlıklar için tasarım

Bazı yan etkiler ortaya çıktıktan sonra önyükleme kesintiye uğrayabilir. Başka bir çağrının güvenli bir şekilde tamamlanması veya net, denetlenebilir bir durumla çıkması için komut dosyaları yazın.

İyi modeller şunları içerir:

  • geçici bir dosyaya yazın, doğrulayın ve ardından atomik olarak yeniden adlandırın;
  • kullanıcıların, dizinlerin veya konfigürasyon girişlerinin zaten mevcut olup olmadığını kontrol edin;
  • açık sahip ve mod için install kullanın;
  • set -Eeuo pipefail’i uygulayın ve sıfırdan farklı beklenen sonuçları bilinçli olarak ele alın;
  • sınırlı ağ zaman aşımlarını ve sınırlı bir yeniden deneme sayısını kullanın; ve
  • yalnızca gerekli tüm adımlar başarılı olduktan sonra bir hazırlık işaretçisi yazın.

Hazırlık kontrolü olarak sleep’ye güvenmeyin. Gerçek bağımlılığı araştırın.

Harici indirmeler

curl ... | sh’den kaçının. İlk önyüklemenin bir yapıt getirmesi gerekiyorsa:

  1. Sertifika doğrulamasıyla HTTPS kullanın;
  2. beklenen yapıyı veya kaynak sürümünü sabitleyin;
  3. yürütmeden önce kriptografik özeti veya onaylanmış imzayı doğrulayın;
  4. bağlantı ve toplam zaman aşımlarını ayarlayın;
  5. Doğrulama başarısız olursa başarısız olunması; ve
  6. Kimlik bilgilerini veya imzalı URL’leri günlüğe kaydetmekten kaçının.

Gerçekten çevrimdışı veya tekrarlanabilir bir davranış için, incelenen içeriği ilk açılışta indirmek yerine görüntüye veya onaylı bir paket deposuna ekleyin.

Sırlar

Düz metin kimlik bilgilerini asla tarife, komuta, URL’ye veya oluşturulan işaretçiye yerleştirmeyin. Tarif JSON’u ve derleme günlükleri, tutulan kanıtlardır ve operatörler tarafından görülebilir. Onaylanmış bir dağıtım süresi kaydı veya gizli dağıtım mekanizması kullanın ve elde edilen kimlik bilgilerinin kapsamını hedefe göre ayarlayın.

Yürütme kimliği

Ayrıcalıksız bir hizmet hesabını tercih edin. Kök gerekiyorsa, komutu en küçük ayrıcalıklı adıma düşürün ve açık dosya sahipliğini ayarlayın. Ünite başlatılmadan önce oluşturulan hesaba run_as adının verildiğini doğrulayın.

Doğrulama

Yalnızca ünitenin çıkış durumu yerine test sonuçları:

{ "type": "file_contains", "description": "The startup unit wrote its readiness marker.", "params": { "path": "/var/lib/example/build-ready", "content": "ready" } }

Ayrıca ikinci bir önyüklemeyi, kullanılamayan bir bağımlılığı ve kesintiye uğrayan bir ilk çalıştırmadan kurtarmayı test edin. Arıza durumunda systemctl status ve ünite günlüğünü inceleyin.