Linux için kendi kendine barındırıcı

Linux, Chrome kullanıcılarının Chrome Web Mağazası'nın dışında barındırılan uzantıları yükleyebileceği tek platformdur. Bu makalede genel amaçlı bir web sunucusundan crx dosyalarının nasıl paketleneceği, barındırılacağı ve güncelleneceği açıklanmaktadır. Bir uzantıyı veya temayı sadece Chrome Web Mağazası aracılığıyla dağıtıyorsanız Web mağazası barındırma ve güncelleme konusuna bakın.

Paket

Uzantılar ve temalar .crx dosyası olarak sunulur. Chrome Geliştirici Kontrol Paneli üzerinden yükleme yaparken, kontrol paneli crx dosyasını otomatik olarak oluşturur. Kişisel bir sunucuda yayınlanırsa crx dosyasının yerel olarak oluşturulması veya Chrome Web Mağazası'ndan indirilmesi gerekir.

Chrome Web Mağazası'ndan .crx dosyasını indirin

Bir uzantı Chrome Web Mağazası'nda barındırılıyorsa .crx dosyası Geliştirici Kontrol Paneli'nden indirilebilir. "Girişleriniz" altında uzantıyı bulun ve "Daha fazla bilgi"yi tıklayın. İndirmek için pop-up pencerede mavi main.crx bağlantısını tıklayın.

Geliştirici Kontrol Paneli'nden .crx dosyasını indirme

İndirilen dosya kişisel bir sunucuda barındırılabilir. Bu, bir uzantıyı yerel olarak barındırmanın en güvenli yoludur, çünkü uzantının içeriği Chrome Web Mağazası tarafından imzalanır. Bu, olası saldırıların ve izinsiz değişikliklerin tespit edilmesine yardımcı olur.

Yerel olarak .crx dosyası oluşturma

Uzantı dizinleri, Uzantı Yönetim Sayfası'nda .crx dosyasına dönüştürülür. Çok amaçlı adres çubuğunda chrome://extensions/ adresine gidin veya Chrome menüsünü tıklayın, işaretçiyi "Diğer Araçlar"ın üzerinde tutun ve ardından "Uzantılar"ı seçin.

Uzantı Yönetimi Sayfasında Geliştirici modu'nun yanındaki açma/kapatma düğmesini tıklayarak Geliştirici Modu'nu etkinleştirin. Ardından UZANTI PLANI düğmesini seçin.

Geliştirici Modu Kontrol Edilir, ardından Uzantıyı Paketle'yi tıklayın

Uzantı kök dizini alanında uzantının klasörünün yolunu belirtin ve ardından UZANTI PAKETİ düğmesini tıklayın. İlk kez paket için Özel anahtar alanını yoksayın.

Uzantı Yolunu Belirtin, ardından Uzantıyı Paketle'yi tıklayın

Chrome, bir .crx dosyası ve uzantının özel anahtarını içeren .pem dosyası olmak üzere iki dosya oluşturur.

Paketli Uzantı Dosyaları

Özel anahtarı kaybetmeyin. .pem dosyasını gizli ve güvenli bir yerde tutun. Uzantıyı güncellemek gerekir.

.crx paketi güncelleme

manifest.json ürününde sürüm numarasını artırarak bir uzantının .crx dosyasını güncelleyin.

{
  ...
  "version": "1.5",
  ...
  }
}
{
  ...
  "version": "1.6",
  ...
  }
}

Uzantı Yönetimi Sayfası'na dönün ve PAKET UZANTISI düğmesini tıklayın. Uzantı dizininin yolunu ve özel anahtarın konumunu belirtin.

Uzantı Dosyalarını Güncelleme

Sayfa, güncellenen paket uzantı için yol sağlayacaktır.

Uzantı Dosyalarını Güncelleme

Komut satırıyla paketleme

chrome.exe yöntemini çağırarak uzantıları komut satırında paketleyin. Uzantı klasörünün konumunu belirtmek için --pack-extension işaretini, uzantının özel anahtar dosyasının konumunu belirtmek için --pack-extension-key işaretini kullanın.

chrome.exe --pack-extension=C:\myext --pack-extension-key=C:\myext.pem

Düzenleyen

.crx dosyalarını barındıran sunucu, kullanıcıların bir bağlantıyı tıklayarak uzantıyı yüklemesine izin vermek için uygun HTTP üst bilgilerini kullanmalıdır.

Google Chrome, aşağıdakilerden biri geçerliyse bir dosyayı yüklenebilir olarak kabul eder:

  • Dosyanın içerik türü: application/x-chrome-extension
  • Dosya son eki .crx ve aşağıdakilerin her ikisi de doğrudur:
    • Dosya X-Content-Type-Options: nosniff HTTP başlığıyla sunulmaz
    • Dosya aşağıdaki içerik türlerinden biriyle yayınlanır:
    • boş dize
    • "text/plain"
    • "application/octet-stream"
    • "unknown/unknown"
    • "application/unknown"
    • "\*/\*"

Yüklenebilir bir dosyayı tanıyamamanın en yaygın nedeni, sunucunun X-Content-Type-Options: nosniff üst bilgisini göndermesidir. İkinci en yaygın neden, sunucunun bilinmeyen bir içerik türü (bir önceki listede olmayan) göndermesidir. HTTP üst bilgisi sorununu düzeltmek için sunucunun yapılandırmasını değiştirin veya .crx dosyasını başka bir sunucuda barındırmayı deneyin.

Güncelle

Tarayıcı, birkaç saatte bir yüklü uzantılarda güncelleme URL'si olup olmadığını kontrol eder. Her biri için bir güncelleme manifest XML dosyasını bulmak üzere söz konusu URL'ye bir istekte bulunur.

  • Güncelleme kontrolünün döndürdüğü içerik, bir uzantının en son sürümünü listeleyen bir güncelleme manifesti XML dokümanıdır.

Güncelleme manifestinde yüklü olandan daha yeni bir sürümden bahsediliyorsa tarayıcı yeni sürümü indirip yükler. Manuel güncellemelerde olduğu gibi yeni .crx dosyası da şu anda yüklü sürümle aynı özel anahtar kullanılarak imzalanmalıdır.

Not: Google Chrome, kullanıcı gizliliğini korumak için otomatik güncelleme manifest istekleri içeren Çerez üstbilgilerini göndermez ve bu isteklere verilen yanıtlardaki Set-Cookie üstbilgilerini yoksayar.

URL'yi güncelle

Chrome Web Mağazası'nın dışındaki sunucularda barındırılan uzantıların manifest.json dosyasına update_url alanını içermesi gerekir.

{
  "name": "My extension",
  ...
  "update_url": "https://myhost.com/mytestextension/updates.xml",
  ...
}

Manifesti güncelle

Sunucu tarafından döndürülen güncelleme manifesti bir XML dokümanı olmalıdır.

<?xml version='1.0' encoding='UTF-8'?>
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
  <app appid='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'>
    <updatecheck codebase='https://myhost.com/mytestextension/mte_v2.crx' version='2.0' />
  </app>
</gupdate>

Bu XML biçimi, Google'ın güncelleme altyapısı Omaha tarafından kullanılandan alınır. Uzantı sistemi, güncelleme manifestinin <app> ve <updatecheck> öğeleri için aşağıdaki özellikleri kullanır:

appid
Uzantı kimliği, paketleme bölümünde açıklandığı gibi ortak anahtarın karma değerine göre oluşturulur. Uzantının kimliği, Uzantı Yönetim Sayfası'nda görüntülenir.
kod tabanı
.crx dosyasının HTTPS URL'si.
sürüm
İstemci tarafından, codebase tarafından belirtilen .crx dosyasını indirip indirmeyeceğini belirlemek için kullanılır. .crx dosyasının manifest.json dosyasındaki "version" değeriyle eşleşmelidir.

Güncelleme manifest XML dosyası, birden fazla <app> öğesi ekleyerek birden fazla uzantı hakkında bilgi içerebilir.

Test

Varsayılan güncelleme kontrolü sıklığı birkaç saattir ancak Uzantı Yönetimi Sayfası'ndaki Uzantıları şimdi güncelle düğmesi kullanılarak güncellemenin zorunlu kılınması mümkündür.

Uzantıları Şimdi Güncelle

Bu işlem, tüm yüklü uzantıların kontrollerini başlatır.

Gelişmiş kullanım: istek parametreleri

Temel otomatik güncelleme mekanizması, sunucu tarafının çalışmasını Apache gibi herhangi bir düz web sunucusuna statik XML dosyası göndermek ve yeni uzantı sürümleri yayınlandıkça XML dosyasını güncellemek kadar kolaylaştırmak için tasarlanmıştır.

Birden fazla uzantı barındıran geliştiriciler, güncelleme isteğinde uzantı kimliğini ve sürümünü belirten istek parametrelerini kontrol edebilir. Bu parametrelerin eklenmesi, uzantıların statik XML dosyası yerine dinamik sunucu tarafı kodu çalıştıran aynı URL'den güncellenmesine olanak tanır.

İstek parametrelerinin biçimi şu şekildedir:

?x=EXTENSION_DATA

Burada EXTENSION_DATA, URL kodlamalı şu biçimde bir dizedir:

id=EXTENSION_ID&v=EXTENSION_VERSION

Örneğin, iki uzantı aynı güncelleme URL'sini işaret ediyor (https://test.com/extension_updates.php):

  • Uzantı 1
    • Kimlik: "aaaaaaaaaaaaaaaaaaaaaaaaaaaa"
    • Sürüm: "1.1"
  • Uzantı 2
    • Kimlik: "bbbbbbbbbbbbbbb"
    • Sürüm: "0.4"

Her bir uzantıyı güncelleme isteği şöyle olur:

https://test.com/extension_updates.php?x=id%3Daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa%26v%3D1.1

ve

https://test.com/extension_updates.php?x=id%3Dbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb%26v%3D0.4

Her benzersiz güncelleme URL'si için tek bir istekte birden çok uzantı listelenebilir. Önceki örnekte, kullanıcıda her iki uzantı da yüklüyse bu iki istek tek bir istekte birleştirilir:

https://test.com/extension_updates.php?x=id%3Daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa%26v%3D1.1&x=id%3Dbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb%26v%3D0.4

Aynı güncelleme URL'sini kullanan yüklü uzantıların sayısı bir GET isteği URL'sinin çok uzun olmasına (2.000 karakteri aşan) kadar fazlaysa, güncelleme kontrolü gerektiği şekilde ek GET istekleri gerçekleştirir.

Gelişmiş kullanım: minimum tarayıcı sürümü

Uzantı sistemine daha fazla API eklendikçe, yalnızca tarayıcının yeni sürümleriyle çalışan bir uzantının güncellenmiş bir sürümü yayınlanabilir. Google Chrome otomatik olarak güncellense de, kullanıcı tabanının çoğunluğunun yeni bir sürüme güncellenmesi birkaç gün sürebilir. Belirli bir güncellemenin yalnızca belirli bir sürümdeki veya daha yüksek Google Chrome sürümlerine uygulandığından emin olmak için güncelleme yanıtındaki <app> öğesine "prodversionmin" özelliğini ekleyin.

<?xml version='1.0' encoding='UTF-8'?>
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
  <app appid='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'>
    <updatecheck codebase='http://myhost.com/mytestextension/mte_v2.crx' version='2.0' prodversionmin='3.0.193.0'/>
  </app>
</gupdate>

Bu, kullanıcıların yalnızca Google Chrome 3.0.193.0 veya sonraki bir sürümü kullanıyorlarsa sürüm 2'ye otomatik olarak güncelleme yapmalarını sağlar.