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ı
| Anahtar | Dosya | Tür denetimi (dosyanın ilk baytları) | Uygulama nasıl kurar |
|---|---|---|---|
windows-msi | .msi | OLE: D0 CF 11 E0 A1 B1 1A E1 | msiexec /i; Windows Installer penceresi açılır |
windows-exe | .exe (x86_64) | MZ | Kurulum programı başlatılır |
windows-exe-arm64 | .exe (arm64) | MZ | Kurulum programı başlatılır |
windows-msix | .msix | ZIP: PK 03 04 | Uygulama Yükleyicisi açılır |
macos-dmg | .dmg | son 512 baytta koly | Disk görüntüsü açılır; kullanıcı uygulamayı Uygulamalar'a sürükler |
linux-appimage | .AppImage | ELF: 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>\n | Yetki penceresinden (polkit) sonra apt-get install |
linux-rpm | .rpm | ED AB EE DB | Yetki penceresinden sonra dnf install, dnf yoksa zypper install |
linux-pacman | .pkg.tar.zst | zstd: 28 B5 2F FD | Yetki penceresinden sonra pacman -U |
android-apk | .apk | ZIP: PK 03 04 | Android paket kurulumu |
- Tür denetimi hafiftir: yalnız dosya başını (dmg'de sonunu) okur. Uymayan dosya
400 bad_packageile 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_namedöner. pacman için uzantı.pkg.tar.zst'dir;.tar.zstkabul 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.msixUygulama-1.2.0.dmg,Uygulama-1.2.0-x86_64.AppImageuygulama_1.2.0_amd64.deb,uygulama-1.2.0-1.x86_64.rpm,uygulama-1.2.0-1-x86_64.pkg.tar.zstuygulama-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 veMajorUpgradetanımla. Makine geneli kurulum (ALLUSERS=1,InstallScope="perMachine") UAC penceresini kendisi açar. - EXE (NSIS, Inno Setup…):
windows-exex86_64,windows-exe-arm64arm64 içindir. Tek bir kurulum programı iki mimariyi de kuruyorsa onuwindows-exeolarak 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ş
.appile 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:
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=adminve[Run]/[UninstallRun]bölümleriyle yapılır. WiX/MSI'daServiceInstallveServiceControlöğ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
SMAppServiceile kaydet (macOS 13+). Kullanıcı başına ajan içinSMAppService.agent, sistem daemon'u içinSMAppService.daemonkullanılır. Sistem daemon'unu kullanıcı Sistem Ayarları'nda onaylar.
Nuvaka Apps API v1 · son güncelleme 2026-10-17