Nuvaka › Geliştirici belgeleri › Program paketleme

Program paketleme: platform anahtarları, dosyalar ve servisler

Programın her platform için ayrı bir paketle yayınlanır. Bu sayfada 10 platform anahtarını, dosya adı kurallarını, sunucunun tür denetimini ve Nuvaka General App'in her paketi nasıl kurduğunu bulursun. Programın bir sistem servisi kuruyorsa bunu kullanıcıya terminal adımı yaptırmadan nasıl yapacağın da burada. Yayın akışının tamamı için bkz. Programlar.

Platform anahtarları

AnahtarDosyaTür denetimi (dosyanın ilk baytları)Uygulama nasıl kurar
windows-msi.msiOLE: D0 CF 11 E0 A1 B1 1A E1msiexec /i; Windows Installer penceresi açılır
windows-exe.exe (x86_64)MZKurulum programı başlatılır
windows-exe-arm64.exe (arm64)MZKurulum programı başlatılır
windows-msix.msixZIP: PK 03 04Uygulama Yükleyicisi açılır
macos-dmg.dmgson 512 baytta kolyDisk görüntüsü açılır; kullanıcı uygulamayı Uygulamalar'a sürükler
linux-appimage.AppImageELF: 7F 45 4C 46~/Applications'a kopyalanır, çalıştırılabilir yapılır ve başlatılır; yetki istemez
linux-deb.deb!<arch>\nYetki penceresinden (polkit) sonra apt-get install
linux-rpm.rpmED AB EE DBYetki penceresinden sonra dnf install, dnf yoksa zypper install
linux-pacman.pkg.tar.zstzstd: 28 B5 2F FDYetki penceresinden sonra pacman -U
android-apk.apkZIP: PK 03 04Android paket kurulumu
  • Tür denetimi hafiftir: yalnız dosya başını (dmg'de sonunu) okur. Uymayan dosya 400 bad_package ile reddedilir. Paketin içeriğini inceleme ekibi denetler.
  • Mağaza listesi ve güncelleme denetimi tam anahtarı (linux-deb) ya da işletim sistemini (linux) süzgeç olarak alır.
  • Aynı sürümde birden çok anahtar olabilir. Ör. windows-msi + windows-exe-arm64 + linux-deb + linux-rpm + linux-appimage. Uygulama cihaza en uygun olanı seçer (eşleştirme).

Dosya adları

  • Dosya adı bir harf ya da rakamla başlar. Yalnız harf, rakam, . _ + - ve boşluk içerir, en çok 151 karakter olur.
  • Dosya adı anahtarın uzantısıyla biter (büyük/küçük harf fark etmez). Değilse 400 bad_file_name döner. pacman için uzantı .pkg.tar.zst'dir; .tar.zst kabul edilmez.
  • Önerilen biçimler, her ekosistemin kendi alışkanlığına göre:
    • Uygulama-1.2.0-x64.msi, Uygulama-1.2.0-Setup.exe, Uygulama-1.2.0-arm64-Setup.exe, Uygulama-1.2.0.msix
    • Uygulama-1.2.0.dmg, Uygulama-1.2.0-x86_64.AppImage
    • uygulama_1.2.0_amd64.deb, uygulama-1.2.0-1.x86_64.rpm, uygulama-1.2.0-1-x86_64.pkg.tar.zst
    • uygulama-1.2.0.apk
  • Paketin içindeki sürüm Nuvaka'daki sürümle aynı olmalı. Güncelleme denetimi Nuvaka sürümünü kullanır; paketin kendi sürümü farklıysa işletim sistemi güncellemeyi "eski sürüm" sanıp reddedebilir.

Platform notları

Windows

  • MSI (WiX, Advanced Installer…): güncellemeler için her sürümde aynı UpgradeCode'u kullan ve MajorUpgrade tanımla. Makine geneli kurulum (ALLUSERS=1, InstallScope="perMachine") UAC penceresini kendisi açar.
  • EXE (NSIS, Inno Setup…): windows-exe x86_64, windows-exe-arm64 arm64 içindir. Tek bir kurulum programı iki mimariyi de kuruyorsa onu windows-exe olarak yükle; Windows 11 ARM onu öykünmeyle çalıştırır.
  • MSIX: imzasız MSIX kurulamaz. İmza sertifikası kullanıcının cihazında güvenilir olmalı.
  • Kurulum programını Authenticode ile imzalaman önerilir. İmzasız programda SmartScreen uyarısı çıkar.

macOS

  • DMG'nin içinde imzalı ve notarize edilmiş .app ile Uygulamalar klasörüne kısayol bulunsun. Apple Silicon ve Intel için tek bir universal yapı (lipo) en kolayıdır; compat'ta "arch":"universal" yaz.

Linux

  • deb, rpm, pacman dağıtımın paket yöneticisiyle kurulur. Sistem kütüphanelerini paketin kendi bağımlılık alanında bildir (Depends:, Requires:, depends=()); paket yöneticisi onları depodan kurar. Nuvaka'daki dependencies listesi paket yöneticisinin kuramayacağı şeyler içindir: sürücü, donanım, başka bir Nuvaka programı.
  • rpm paketlerinin GPG imzası gerekmez. Uygulama, dosyanın doğrulanmış özetini root tarafında yeniden denetleyip yalnız o yerel dosya için GPG denetimini kapatır.
  • AppImage root istemez ve her dağıtımda çalışır; tek koşul, compat'ta bildirdiğin glibc sürümüdür. AppImage sistem servisi kuramaz. Sistem servisi gerekiyorsa deb, rpm ya da pacman paketi yayınla.

Android

  • Evrensel (tüm ABI'ları içeren) bir APK önerilir; compat'ta "arch":"universal" yaz. Güncellemeler aynı paket adı ve aynı imza anahtarıyla imzalanmalı.

Sistem servisi kurmak

Bazı programların arka planda çalışan bir servise ihtiyacı vardır, ör. bir donanım daemon'u ya da ağ ajanı. Temel kural:

Kullanıcı yalnız işletim sisteminin yetki penceresini görür

Kurulum asla kullanıcıdan terminal açmasını, sudo komutu yazmasını, dosya kopyalamasını ya da servisi elle başlatmasını istemez. Servisi paketin kendisi kurar, etkinleştirir, başlatır; kaldırmada da durdurup siler. Uygulama Linux paketlerini polkit (pkexec) üzerinden kurar, yani kullanıcı tek bir yönetici şifresi penceresi görür. Paket betikleri soru sormamalı ve etkileşimsiz çalışmalı.

deb: postinst + systemd

Servis dosyasını /lib/systemd/system/uygulama.service olarak paketle. debhelper kullanıyorsan dh_installsystemd aşağıdaki betikleri kendisi üretir. Elle yazıyorsan:

# debian/postinst
#!/bin/sh
set -e
if [ "$1" = configure ]; then
  systemctl daemon-reload
  systemctl enable uygulama.service
  systemctl restart uygulama.service
fi

# debian/prerm
#!/bin/sh
set -e
if [ "$1" = remove ]; then
  systemctl disable --now uygulama.service || true
fi

# debian/postrm
#!/bin/sh
set -e
[ "$1" = purge ] && rm -rf /var/lib/uygulama
systemctl daemon-reload || true

rpm: %post ve systemd makroları

# uygulama.spec
%{?systemd_requires}
BuildRequires: systemd-rpm-macros

%files
%{_unitdir}/uygulama.service

%post
%systemd_post uygulama.service
# Fedora'da hazır ayar (preset) servisi kapalı tutabilir; programın servis olmadan çalışmıyorsa:
systemctl enable --now uygulama.service >/dev/null 2>&1 || :

%preun
%systemd_preun uygulama.service

%postun
%systemd_postun_with_restart uygulama.service

pacman: .install dosyası

# PKGBUILD
install=uygulama.install
package() {
  install -Dm644 uygulama.service "$pkgdir/usr/lib/systemd/system/uygulama.service"
}

# uygulama.install
post_install() {
  systemctl daemon-reload
  systemctl enable --now uygulama.service
}
post_upgrade() {
  systemctl daemon-reload
  systemctl try-restart uygulama.service
}
pre_remove() {
  systemctl disable --now uygulama.service
}

Windows: NSIS ile yönetici kurulumu

Kurulum programı yönetici yetkisi isterse Windows UAC penceresini kendisi gösterir. Servisi kurulum programı kaydeder ve kaldırma programı siler:

; uygulama.nsi
RequestExecutionLevel admin
InstallDir "$PROGRAMFILES64\Uygulama"

Section "Install"
  SetOutPath "$INSTDIR"
  File "uygulama-servis.exe"
  nsExec::ExecToLog 'sc.exe create UygulamaSvc binPath= "\"$INSTDIR\uygulama-servis.exe\"" start= auto DisplayName= "Uygulama"'
  nsExec::ExecToLog 'sc.exe start UygulamaSvc'
  WriteUninstaller "$INSTDIR\uninstall.exe"
SectionEnd

Section "Uninstall"
  nsExec::ExecToLog 'sc.exe stop UygulamaSvc'
  nsExec::ExecToLog 'sc.exe delete UygulamaSvc'
  RMDir /r "$INSTDIR"
SectionEnd
  • Inno Setup'ta aynı iş PrivilegesRequired=admin ve [Run] / [UninstallRun] bölümleriyle yapılır. WiX/MSI'da ServiceInstall ve ServiceControl öğelerini kullan.
  • Servis gerektirmeyen programı kullanıcı başına kur (yönetici istemeden). Böylece UAC penceresi hiç çıkmaz.

macOS

  • Arka plan işini uygulamanın içinden SMAppService ile kaydet (macOS 13+). Kullanıcı başına ajan için SMAppService.agent, sistem daemon'u için SMAppService.daemon kullanılır. Sistem daemon'unu kullanıcı Sistem Ayarları'nda onaylar.

Nuvaka Apps API v1 · son güncelleme 2026-10-17