|
<< İçindekileri Görüntülemek İçin Tıklayın >> Yer: Teknik Kılavuzlar > Netsim System Agent İstemci Protokolü Referansı > 3. Diğer HTTP uçları (/ClientREST/...) > 3.3 3.2a Dağıtım işlemcisi Distribution (dağıtım aktarım planı Faz 2) |
Kök: <sürüm>-<ek>/manifest.json + dosyalar (manifest'siz / withdrawn klasör yok sayılır; klasör adı
^\d+(\.\d+){3}-\d+$). Bir dosya önce manifest'in yanında, yoksa içerik adresli depoda <kök>/store/<sha256>
(manifest'teki sha256, küçük harf) aranır; Netsim'in dağıtım sunucusu dosyaları yalnız depoda tutar (değişmeyen dosya
sürümler arasında tek kopya). İstemci için fark yoktur: uçlar ve yanıtlar aynıdır. physicalRoot verilmezse öndeğer
${APPDIR}/distribution (Linux'ta /var/lib/netsim/distribution). Hata sözleşmesi ClientREST'teki gibi 202 + {result:false, message}, bilinmeyen uç 400.
| Uç | Yanıt |
|---|---|
GET VERSIONS[?product=] |
{result, versions:[{folder, product, version, suffix, released, minUpgradeVersion, catalogVersion, releaseNotes, agentReleaseNotes}]}, yeniden eskiye; releaseNotes ürünün notu (audience: product, yoksa ilk not), agentReleaseNotes ajanınki |
GET MANIFEST?version=<v>-<ek> |
manifest.json'un kendisi |
GET FILE?version=&name= |
dosya; name yalnız manifest'teki adlardan biri; ETag = "<sha256>", Last-Modified, Accept-Ranges: bytes, Range → 206 + Content-Range, If-Range (ETag ya da tarih); boyutu manifest'ten farklı dosya 202 |
Netsim'in dağıtım sunucusu: FILE başlıkta X-Netsim-System, X-Netsim-Owner, X-Netsim-Activation ister;
lisans doğrulanamazsa genel ileti (Lisans doğrulanamadı), lisansın güncelleme aboneliği yayın gününden önce
bitmişse abonelik iletisi.
Netsim'in dağıtım sunucusunda ayrıca POST VALIDATE (anonim, veritabanına yazmaz) lisansı doğrular. Gövde
{system, owner, activation, licenseKey?, released?} ya da aynı üç X-Netsim-* başlığı; üçünden biri eksikse 400.
Aksi halde her durumda 200 + {result, valid, reason, owner, dealer, licenses: [{key, parentKey, product, name, class,
status, orgUnit, validUntil, subscriptionEnd, coversVersion, systems: {registered, max, thisSystem}}], checkedAt}.
reason: null (geçerli), NO_LICENSE, MEMBER_INACTIVE, LICENSE_EXPIRED, SYSTEM_NOT_REGISTERED,
SUBSCRIPTION_EXPIRED (yalnız released verildiyse; coversVersion da yalnız o zaman dolu). Yalnız üye + aktivasyon
kodunun ikisi birden tuttuğu lisanslar döner; eşleşme yoksa owner ve dealer null. IP başına dakikadaki istek
sınırlıdır (aşan 429 + Retry-After); yanıt Cache-Control: no-store.
Ajan tarafı (Faz 3, AdminREST, SYSADMIN): GET DISTRIBUTION?what=versions (sunucunun VERSIONS'ı + her sürüme
cached / partial dosya adları ve cacheDir), ?what=manifest&version= (sunucunun manifest'i, önbelleğe de yazılır),
?what=status (downloads: [{version, name, bytes, total, startedAt, active}], .part.json'lardan), ?what=latest
(Faz 4: {result, version, released, checkedAt, error, newer, current} - latest.json; &check=1 önce sunucuya sorar
(web arayüzü girişten sonra bir kez çağırır, conf checkOnLogin); current bu ajanın
sürümü; STATUS aynı bilgiden latestVersion ve newerVersion verir). POST EXECCOMMAND
DISTDOWNLOAD {version, files: [ad, ...] | purpose: {action: SETUP|UPGRADE, engine, security, platform}} indirmeyi istek
içinde koşar; yanıt {result, message, version, files: [{name, kind, path, size, sha256, status: DOWNLOADED|PRESENT|ERROR,
detail}]}, bir dosya hatalıysa 202. DISTCLEAN {version} önbellek klasörünü siler (süren indirme varsa reddeder).
Sunucu hatası (202 + ileti) olduğu gibi aktarılır.
Kurulum bilgisi (installSchema: 1, ajanın kendini güncellemesi): ajan ne kuracağını ve nereye kuracağını yalnız
manifest'ten okur; paket türünü (kind) bilmez. Manifest kökte "installSchema": 1 taşır; install bloğu olan ve
platform'u ajanınki (windows / linux), any ya da boş olan her files[] girdisi bir pakettir:
| Alan | Anlamı |
|---|---|
target |
"{AD}" ya da "{AD}/göreli/yol". {APPDIR} ajanın dizini; öteki adlar yalnız ajanın conf'undan (distribution/installTargets/<AD>, ad [A-Z0-9_]+) çözülür - manifest başka bir yola yazamaz. Göreli kısım .., : ve baştaki / taşıyamaz |
order |
açılış sırası (küçükten büyüğe; öndeğer 0) |
required |
öndeğer true: hedef çözülemezse güncelleme başlamaz; false: paket atlanır (skip) |
stripTop |
zip'in bütün girdileri tek bir üst klasördeyse o soyulur (öndeğer false) |
skipIf |
{file, equals}: hedefteki file'ın ilk satırı equals ise paket atlanır ve indirilmez (ör. kurulu kütüphane sürümü) |
prune + pruneKeep |
hedefin bu alt dizininde hiçbir paketin getirmediği dosyalar yedeğe taşınır; pruneKeep desenlerine (* joker, dosya adına) uyanlar kalır |
executable |
Linux'ta çalıştırılabilir yapılacak dosya adı desenleri (zip'in kendi +x bitine ek) |
Tanımadığı şema sürümü ya da alan, iki pakette aynı hedef dosya, eksik / manifest'le uyuşmayan kurulacak paket
güncellemeyi durdurur. Ajanın dizinine açılan pakette NetsimSystemAgent.conf.json ve güncelleyicinin kendisi atlanır.
POST EXECCOMMAND AGENTUPDATE {version, plan: true} (yalnız SYSDBA) planı verir: {result, message, packages: [{name,
action: install|skip, target, downloaded, required, detail}]}; plan'sız çağrı güncellemeyi başlatır (kurulacak
paketlerin hepsi önbellekte tam olmalı). Ajan dizini dışındaki hedeflerin eski dosyaları yedekte _<AD>/ altına alınır.