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

Chrome kullanıcılarının Chrome Web Mağazası dışında barındırılan uzantıları yükleyebileceği tek platform Linux'tur. 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ı yalnızca Chrome Web Mağazası üzerinden dağıtıyorsanız Web Mağazası'nda barındırma ve güncelleme başlıklı makaleyi inceleyin.

Paket

Uzantılar ve temalar .crx dosyaları 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ınlanmışsa 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

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

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

İndirilen dosya kişisel bir sunucuda barındırılabilir. Uzantıların içeriği Chrome Web Mağazası tarafından imzalanacağı için uzantıları yerel olarak barındırmanın en güvenli yolu budur. Bu, olası saldırıları ve müdahaleleri tespit etmenize yardımcı olur.

Yerel olarak .crx dosyası oluşturma

Uzantı dizinleri, Uzantı Yönetimi Sayfası'nda .crx dosyalarına dönüştürülür. Her şey bir arada kutusundaki chrome://extensions/ simgesine gidin veya Chrome menüsünü tıklayın, işaretçiyi "Diğer Araçlar"ın üzerine getirin ve "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 PAKET UZANTISI düğmesini seçin.

Geliştirici Modu Kontrol Edildi ve Uzantıyı Paketle'yi tıklayın

Uzantı kök dizini alanında uzantının klasörünün yolunu belirtin ve UZANTIYI PAKETLE düğmesini tıklayın. İlk kez kullanılan paketler için Özel anahtar alanını yoksayabilirsiniz.

Uzatma Yolu'nu belirtin ve ardından Uzantıyı Paketle'yi tıklayın

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

Paketlenmiş Uzatma Dosyaları

Özel anahtarı kaybetmeyin. .pem dosyasını gizli ve güvenli bir yerde saklayın. Uzantının güncellenmesi gerekir.

.crx paketini güncelleme

manifest.json içindeki 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 UZANTIYI PAKETLE düğmesini tıklayın. Uzantı dizininin yolunu ve özel anahtarın konumunu belirtin.

Uzantı dosyalarını güncelleme

Sayfada, güncellenmiş paketlenmiş uzantının yolu sağlanır.

Uzantı dosyalarını güncelleme

Komut satırı üzerinden paketleme

chrome.exe komutunu çağırarak uzantıları komut satırında paketleyin. Uzantının 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

Ana makine

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

Aşağıdakilerden biri doğruysa Google Chrome bir dosyayı yüklenebilir olarak kabul eder:

  • Dosyanın içerik türü application/x-chrome-extension
  • Dosya soneki .crx şeklindedir ve aşağıdakilerin 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 dosyanın tanınmamasının en yaygın nedeni, sunucunun X-Content-Type-Options: nosniff başlığını göndermesidir. En yaygın ikinci neden, sunucunun önceki listede bulunmayan bilinmeyen bir içerik türü göndermesidir. HTTP üstbilgisi 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ı, yüklü uzantılarda birkaç saatte bir güncelleme URL'si olup olmadığını kontrol eder. Her biri için ilgili URL'ye bir istek göndererek güncelleme manifest XML dosyası arar.

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

Güncelleme manifestinde yüklü olandan daha yeni bir sürümden bahsedilirse 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 manifesti istekleriyle birlikte çerez üstbilgileri göndermez ve bu isteklerin yanıtlarındaki Set-Cookie üstbilgilerini yoksayar.

URL'yi güncelle

Chrome Web Mağazası dışındaki sunucularda barındırılan uzantılar manifest.json dosyalarında update_url alanını içermelidir.

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

Manifesti güncelleme

Sunucu tarafından döndürülen güncelleme manifesti 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ı olan Omaha tarafından kullanılan biçimden alınmıştır. Uzantılar 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ğeri temel alınarak oluşturulur. Uzantının kimliği, Uzantı Yönetimi sayfasında gösterilir.
kod tabanı
.crx dosyasının HTTPS URL'si.
sürüm
codebase tarafından belirtilen .crx dosyasını indirip indirmeyeceğini belirlemek için istemci tarafından kullanılır. .crx dosyasının manifest.json dosyasındaki "version" değeriyle eşleşmelidir.

Güncelleme manifesti 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üncelleme yapılması zorunlu kılınabilir.

Uzantıları Şimdi Güncelleme

Bu işlem, yüklü tüm uzantılar için kontrolleri başlatır.

Gelişmiş kullanım: istek parametreleri

Temel otomatik güncelleme mekanizması, sunucu tarafındaki çalışmayı Apache gibi herhangi bir basit web sunucusuna statik bir XML dosyası bırakarak ve yeni uzantı sürümleri yayınlandıkça bu XML dosyasını güncelleyerek 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 bir XML dosyası yerine dinamik sunucu tarafı kod çalıştıran aynı URL'den güncellenmesine olanak tanır.

İstek parametrelerinin biçimi şudur:

?x=EXTENSION_DATA

Burada EXTENSION_DATA, aşağıdaki biçimde URL olarak kodlanmış bir dizedir:

id=EXTENSION_ID&v=EXTENSION_VERSION

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

  • 1. Uzantı
    • Kimlik: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
    • Sürüm: "1.1"
  • 2. Uzantı
    • Kimlik: "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
    • Sürüm: "0.4"

Her uzantıyı ayrı ayrı güncelleme isteği şu şekilde 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 fazla uzantı listelenebilir. Önceki örnek için, bir kullanıcı her iki uzantıyı da yüklemişse 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 yetecek kadar fazlaysa (2.000'den fazla karakterden fazla) güncelleme kontrolü, gerektiği şekilde ek GET istekleri gönderir.

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

Uzantılar sistemine daha fazla API eklendikçe, bir uzantının yalnızca tarayıcının yeni sürümleriyle çalışan güncellenmiş bir sürümü yayınlanabilir. Google Chrome otomatik olarak güncellense de kullanıcı tabanının çoğunluğunun belirli bir yeni sürüme güncellenmesi birkaç gün sürebilir. Belirli bir güncellemenin yalnızca belirli bir sürümdeki veya daha yeni Google Chrome sürümlerine uygulanacağı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 sayede, kullanıcılar yalnızca Google Chrome 3.0.193.0 veya daha yeni bir sürümü kullanıyorsa 2. sürüme otomatik olarak güncellenir.