man/files
man · Dosyalar

$ pkgbuild

Bölüm 1 · Dosyalar

diskteki dosyalardan macOS Yükleyici (Installer) bileşen paketleri oluşturur

Özet

pkgbuild [seçenekler] --root kök-yolu [--component-plist plist-yolu] paket-çıktı-yolu
pkgbuild --analyze --root kök-yolu plist-çıktı-yolu
pkgbuild [seçenekler] {--component bileşen-yolu} paket-çıktı-yolu

Açıklama

pkgbuild yardımcı programı, macOS Yükleyici (Installer) tarafından hedef sisteme yüklenecek olan bileşen paketlerini (component packages) oluşturur.

Bir bileşen paketi tek başına doğrudan kurulabilse de, genellikle productbuild(1) kullanılarak bir dağıtım (distribution) dosyası ve yerelleştirilmiş kaynaklarla birleştirilip daha kapsamlı bir ürün arşivine (product archive) dönüştürülür.

[!IMPORTANT] Mac App Store'a göndermek üzere son ürün arşivi oluştururken pkgbuild kullanmayın. Bunun yerine doğrudan productbuild(1) aracını kullanın.

pkgbuild üç farklı modda çalışabilir:

  1. Eksiksiz Hedef Kök Dizinini Paketleme: --root seçeneği kullanılarak, belirtilen kök dizin altındaki tüm dizin ağacı pakete dahil edilir.
  2. Analiz Modu (Şablon Üretimi): --analyze seçeneği ile hedef kök dizin taranır ve paket üretilmeden önce bundle davranışlarını yönetebilmeniz için bir bileşen özellik listesi (plist) şablonu oluşturulur.
  3. Bağımsız Bundle Paketleme: Hedef kök dizini olmaksızın, doğrudan bir veya daha fazla bağımsız bundle (örneğin .app, .plugin) --component seçeneğiyle paketlenir.

Seçenekler

Aşağıdaki seçenekler mevcuttur:

  • --root kök-yolu: xcodebuild(1) veya benzeri derleme araçları tarafından oluşturulan ve paketlenecek olan hedef kök dizininin yolunu belirtir.
  • --component bileşen-yolu: Belirtilen bundle dosyasını pakete dahil eder. Yalnızca --root kullanılmadığı durumlarda geçerlidir.
  • --component-plist plist-yolu: --root paketleme modunda, hedef kök dizin altındaki bundle'ların davranışlarını özelleştirmek için kullanılacak olan özellik listesi dosyasını (plist-yolu) tanımlar.
  • --scripts betikler-yolu: Belirtilen dizin altındaki tüm betikleri paket içerisine arşivler. Bu dizinde preinstall ve/veya postinstall adında betikler varsa, bunlar kurulum aşamalarında en üst düzey paket betikleri olarak çalıştırılır.
  • --nopayload: Paketin herhangi bir dosya yükü (payload) içermeyeceğini, yalnızca betiklerden oluşacağını belirtir.
  • --identifier paket-tanımlayıcı: Paket için benzersiz bir kimlik (örneğin com.sirket.pkg.uygulama) tanımlar. Yükleyici, paket güncellemelerini ve sürüm denetimlerini bu tanımlayıcı üzerinden gerçekleştirir.
  • --version paket-sürümü: Paket için bir sürüm dizesi belirtir. Atlanırsa varsayılan olarak 0 kabul edilir.
  • --install-location yükleme-konumu: Paket içeriğinin kurulacağı varsayılan hedef dizini tanımlar (örneğin /Applications veya /Library/Frameworks).
  • --analyze: Paket oluşturmak yerine, --root ile verilen dizini tarayarak özelleştirilebilir bir bileşen özellik listesi (plist) şablonu yazar.
  • --prior önceki-paket-yolu: Aynı paketin önceki bir sürümünü referans alarak yeni paketin tanımlayıcısını, sürümünü (önceki sürüm + 1) ve yükleme konumunu otomatik olarak yapılandırır.
  • --filter filtre-ifadesi: Paketleme sırasında hariç tutulacak dosyaları saptamak için re_format(7) standardında bir genişletilmiş düzenli ifade tanımlar. Varsayılan olarak .svn, CVS ve .DS_Store hariç tutulur.
  • --ownership (recommended | preserve | preserve-other): Paketlenmiş dosyaların sahiplik izinlerini yapılandırır:
    • recommended: Dosyalara önerilen sistem sahipliğini (root:wheel gibi) uygular.
    • preserve: Disk üzerindeki kaynak dosyaların gerçek sahipliğini aynen korur.
    • preserve-other: Yalnızca pkgbuild'i çalıştıran kullanıcı dışındaki dosya sahiplerini korur, diğerlerine recommended değerini uygular.
  • --large-payload: 8 GiB veya daha büyük boyuttaki dosyaların paketlenmesini destekleyen yeni biçimde bir paket üretir.

    [!WARNING] --large-payload ile üretilen paketler yalnızca macOS Monterey (12.0) ve üzeri sürümlerle uyumludur. Bu seçeneğin belirtilmesi durumunda --min-os-version 12.0 parametresinin de iletilmesi zorunludur.

  • --compression sıkıştırma-modu: Yük için sıkıştırma modunu belirler:
    • legacy: Mac OS X 10.5 ile uyumlu eski sıkıştırma algoritmasını zorlar.
    • latest: Belirtilen --min-os-version değerine göre en yeni ve verimli sıkıştırma algoritmasını otomatik seçer.
  • --min-os-version sürüm: Paketin çalışabileceği minimum macOS işletim sistemi sürümünü belirtir.
  • --sign kimlik-adı: Sonuç paketini belirtilen dijital sertifika kimliğiyle imzalar.
  • --keychain anahtar-zinciri-yolu: İmza kimliğini aramak için özel bir anahtar zinciri (keychain) dosyası belirtir.
  • --cert sertifika-adı: Pakete gömülecek ara sertifikanın Ortak Adını (Common Name) belirtir.
  • --timestamp / --timestamp=none: İmzayla birlikte güvenilir zaman damgasını etkinleştirir veya devre dışı bırakır.
  • --quiet: Standart çıktıdaki (stdout) durum iletilerini gizler. Hata mesajları standart hataya (stderr) basılmaya devam eder.

Bileşen Özellik Listesi (Component plist)

Bir hedef kök dizinini paketlerken, içerideki bundle'ların macOS Yükleyici tarafından nasıl ele alınacağını belirtmek için bir bileşen özellik listesi kullanabilirsiniz.

Desteklenen plist Anahtarları

Anahtar Kelime Tür Açıklama
RootRelativeBundlePath Dize Hedef kök dizinine göre bundle yolu.
BundleIsRelocatable Boole Kullanıcı bundle'ı başka bir yere taşımışsa önceki sürümün üzerine mi yüklensin?
BundleIsVersionChecked Boole Diskte daha yeni bir sürüm varsa bundle yüklenmesin mi?
BundleHasStrictIdentifier Boole Yükleme yolunda birebir aynı bundle tanımlayıcıları zorunlu kılınsın mı?
BundleOverwriteAction Dize Diskteki mevcut sürüme nasıl davranılacağı (upgrade veya update).
BundlePreInstallScriptPath Dize Bundle'a özel preinstall betiğinin göreceli yolu.
BundlePostInstallScriptPath Dize Bundle'a özel postinstall betiğinin göreceli yolu.
BundleInstallScriptTimeout Tam Sayı Betiğin sonlandırılmadan önce çalışabileceği süre (saniye).
ChildBundles Dizi Bundle altındaki diğer alt bundle tanımları.
  • BundleOverwriteAction değerleri:
    • upgrade: Paketteki bundle, diskteki tüm sürümleri atomik olarak değiştirir (yeni sürümde olmayan eski dosyalar silinir).
    • update: Paketteki bundle, diskteki sürümün üzerine yazar ancak pakette olmayan eski dosyalar olduğu gibi bırakılır. Diskte zaten bir sürüm yoksa bundle hiç yüklenmez.

İmzalı Paketler

Bir paket oluştururken, isteğe bağlı olarak pakete dijital bir imza ekleyebilirsiniz. Anahtar zincirlerinizden birinde geçerli bir sertifika ve özel anahtar (kimlik) bulunmalıdır. Bir imza eklemek için --sign seçeneğini kullanarak kimliğin Ortak Adını (Common Name) belirtmeniz gerekir.

İmzalama sertifikasını ve anahtar zincirinde bulunan tüm ara sertifikaları pkgbuild otomatik olarak pakete gömecektir. Ek sertifikalar gömmek istiyorsanız --cert seçeneğini kullanabilirsiniz.

Örnekler

Aşağıdaki örnekler kabukta (shell) çalıştırılabilecek şekilde gösterilmiştir:

  1. /tmp/Sample.dst hedef kök dizinindeki tüm dosyaları kullanarak Sample.pkg paketini oluşturma:

    pkgbuild --identifier com.sample.pkg.app --root /tmp/Sample.dst Sample.pkg
  2. Hedef kök dizini analiz ederek components.plist adında şablon özellik listesi oluşturma:

    pkgbuild --analyze --root /tmp/Sample.dst components.plist
  3. Düzenlenmiş components-edited.plist dosyasındaki özel kuralları uygulayarak paket oluşturma:

    pkgbuild --identifier com.sample.pkg.app --root /tmp/Sample.dst --component-plist components-edited.plist Sample.pkg
  4. Bileşen paketini oluşturup dijital olarak imzalama:

    pkgbuild --identifier com.sample.pkg.app --root /tmp/Sample.dst --sign "Developer ID Installer: Sirket Adi (ABC123XYZ)" Sample.pkg

Ayrıca Bakınız

productbuild(1), xcodebuild(1)