Mağazaya yayınlama
Modüller ve temalar mağazaya imzalı bir katalog ile yayınlanır. Bu sayfa hem yayıncının hem de siteyi yöneten kişinin ne olduğunu bilmesi için iki tarafı da anlatır: paket nasıl hazırlanır ve kullanıcının sitesinde "Kur"a basılınca neler olur.
Katalog ve paketler
Sunucuda üç şey durur:
| Dosya | Anlamı |
|---|---|
extensions/index.json |
Tüm modül ve temaların kataloğu: ad, başlık, özet, kategori, ücretsiz mi, her sürümün zip adresi ve SHA-256 özeti, uyumluluk aralığı |
extensions/index.sig |
Kataloğun Ed25519 imzası |
modules/<Ad>/<Ad>-<sürüm>.zip, themes/<Ad>/… |
Paketler |
Çekirdek kataloğu indirdiğinde önce imzayı genel anahtarla doğrular. İmzası geçersiz ya da süresi dolmuş bir katalog hiç gösterilmez; mağaza boş görünür ve kurulum yapılamaz.
Yayın akışı
module.jsoniçindekiversiondeğerini yükseltin. Sürümü yükseltmezseniz mağaza yeni bir sürüm görmez ve sitelerde "güncelle" düğmesi çıkmaz.- Modül yeni bir çekirdek özelliğine dayanıyorsa
core_versionalt sınırını o çekirdek sürümüne çekin (örn.">=2.2.53 <3"). - Katalog metnini güncelleyin (
eklenti-katalogu.json): başlık, özet, kategori, özellik listesi,free(panelden kurulabilir mi),bundled(kurulum paketinin içinde mi gelir). - Çekirdeğe ihtiyaç duyuyorsa önce çekirdeği yayınlayın.
bash yayinla-eklenti.sh hepsi Adpaketi üretir, indeksi imzalar ve yükler.
Betiğin modları:
| Mod | Ne yapar |
|---|---|
derle [Ad …] |
Zip'leri ve imzalı indeksi yerelde üretir; ad verilmezse tüm modül ve temalar |
yukle |
Yalnızca değişen ya da sunucuda olmayan paketleri yükler; indeksi en son yükler |
hepsi [Ad …] |
derle + yukle |
imzala |
Yalnızca indeks imzasını tazeler |
İndeksin en son yüklenmesi önemlidir: indeks yeni sürümü gösterdiği anda paket zaten yerinde olmalıdır. Yoksa kullanıcı, olmayan bir dosyayı indirmeye çalışırdı.
Uyumluluk denetimi
Her katalog sürümü, modülün core_version aralığını ve requires bağımlılıklarını taşır. İki yerde denetlenir:
- Kurarken: kullanıcının çekirdeği aralığın dışındaysa kurulum "Bu kurulumla uyumlu değil" diyerek durur; neden listelenir.
- Çekirdek güncellerken: güncelleme, kurulu bir modülün aralığını bozacaksa engellenir.
Bu yüzden sıra her zaman şudur: önce çekirdek, sonra çekirdeğe dayanan eklenti. Notlar modülü bunun örneğidir: studio.body.end hook'u çekirdek 2.2.53 ile geldi, modül >=2.2.53 <3 ister ve çekirdekten sonra yayınlandı.
Kullanıcı "Kur"a basınca
Çekirdeğin ExtensionInstaller sınıfı şunları sırayla yapar:
- Ad doğrulanır (
[A-Za-z][A-Za-z0-9_-]*) ve katalogda aranır. Katalogda olmayan ya da ücretsiz işaretli olmayan eklenti panelden kurulmaz. - Uyumluluk denetlenir.
- Zip adresi sunucunun kendi alanı altında olmalıdır;
..içeren ya da başka bir yere işaret eden adres reddedilir. - Paket indirilir (en çok 32 MB, 120 saniye zaman aşımı).
- İndirilenin SHA-256 özeti, imzalı katalogdaki özetle karşılaştırılır. Uyuşmazsa kurulum durur: paket, imzalı kataloğun anlattığı şey değildir.
- Zip güvenli biçimde açılır ve içeriği yan yana bir klasöre hazırlanır.
- Mevcut dosyaların yedeği alınır; yeni dosyalar bir seferde yerine konur. Yeni sürümün artık göndermediği eski dosyalar silinir, modül klasöründe eski kalıntı kalmaz.
- Modül etkinse ve bu bir güncellemeyse, aynı korumalı akış çalışır: bakım kilidi, veritabanı anlık görüntüsü, modülün migration'ları. Hata olursa dosyalar ve veritabanı birlikte geri alınır.
- Önbellek temizlenir.
Etkin olmayan bir modülün ilk kurulumu yalnızca dosya indirir; veritabanı değişikliği, modülü etkinleştirdiğiniz anda yapılır.
Yayın öncesi kontrol listesi
-
module.jsonsürümü yükseltildi. -
core_versiondoğru; yeni çekirdek özelliği gerekiyorsa çekirdek yayınlandı. - Yeni migration'lar yeni numaralı ve tekrar çalıştırılabilir (Veritabanı ve migration).
- Katalog metni güncel.
- Yayın sonrası "sunucudaki indeks imzalı ve geçerli" doğrulaması geçti.
- Bir test sitesinde temiz kurulum ve bir önceki sürümden güncelleme denendi.
İmza
İmza anahtarı yalnızca yayıncıdadır ve asla paylaşılmaz; genel anahtar çekirdeğe gömülüdür. Katalog 45 gün geçerlidir. Yeni yayın çıkmayacaksa süre dolmadan imzala modunu çalıştırın; aksi halde tüm siteler mağazayı boş görür.
Sonraki: Kontrol listesi.