Linux'ta uzantılar yükleme

Chrome Web Mağazası dışında barındırılan uzantılar yalnızca Linux kullanıcıları tarafından yüklenebilir. Bu makalede, kişisel sunucudaki .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.

Sunum

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ınlanıyorsa .crx dosyasının yerel olarak oluşturulması veya Chrome Web Mağazası'ndan indirilmesi gerekir.

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

Chrome Web Mağazası'nda barındırılan uzantıları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. Pop-up pencerede, indirmek için mavi main.crx bağlantıyı tıklayın.

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

İndirilen dosya kişisel bir sunucuda barındırılabilir. Uzantının içeriği Chrome Web Mağazası tarafından imzalanacağından, bu yöntem uzantıyı yerel olarak barındırmanın en güvenli yoludur. Bu sayede olası saldırılar ve kurcalamalar tespit edilebilir.

.crx dosyasını yerel olarak oluşturma

Uzantı dizinleri, Uzantı Yönetimi Sayfası'nda .crx dosyalarına dönüştürülür. Ominibox'ta chrome://extensions/ simgesine gidin veya Chrome menüsünü tıklayıp "Diğer Araçlar"ın üzerine gelin 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 modunu etkinleştirin. Ardından PAKETLEME UZANTISI düğmesini seçin.

Geliştirici Modu işaretliyken Paketlenmiş Uzantı Oluştur'u tıklayın.

Uzantının klasörünün yolunu Uzantı kök dizini alanında belirtin ve PACK EXTENSION (Uzantıyı paketle) düğmesini tıklayın. İlk kez oluşturulan bir paket için Özel anahtar alanını yoksayın.

Uzantı Yolunu Belirtin ve Uzantıyı Paketle'yi Tıklayın

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

Paketlenmiş uzantı dosyaları

Özel anahtarı kaybetmeyin. .pem dosyasını gizli ve güvenli bir yerde saklayın. Uzantıyı güncellemek için bu dosyaya ihtiyacınız olacak.

.crx paketini güncelleme

.crx dosyasındaki sürüm numarasını manifest.json içinde 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ılar dizininin yolunu ve özel anahtarın konumunu belirtin.

Uzantı dosyalarını güncelleme

Sayfada, güncellenen paketlenmiş uzantının yolu gösterilir.

Uzantı dosyalarını güncelleme

Komut satırı üzerinden paketleme

chrome.exe komutunu ç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

Barındırma

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

Google Chrome, aşağıdaki iki koşuldan biri geçerliyse dosyayı yüklenebilir olarak kabul eder:

  • Dosyanın içerik türü application/x-chrome-extension
  • Dosya soneki .crx ve aşağıdakilerin ikisi de doğrudur:
    • Dosya, X-Content-Type-Options: nosniff HTTP üst bilgisiyle sunulmuyor.
    • Dosya, aşağıdaki içerik türlerinden biriyle sunulur:
    • boş dize
    • "text/plain"
    • "application/octet-stream"
    • "unknown/unknown"
    • "application/unknown"
    • "*/*"

Yüklenebilir bir dosyanın tanınamamasının en yaygın nedeni, sunucunun X-Content-Type-Options: nosniff üstbilgisini göndermesidir. En yaygın ikinci neden, sunucunun bilinmeyen bir içerik türü (önceki listede yer almayan bir tür) 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üncelleniyor

Tarayıcı, birkaç saatte bir yüklü uzantıların güncelleme URL'sini kontrol eder. Her biri için, güncelleme manifesti XML dosyası arayarak ilgili URL'ye istek gönderir.

  • 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 belgesidir.

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

Not: Google Chrome, kullanıcı gizliliğini korumak için otomatik güncelleme manifesti istekleriyle herhangi bir çerez başlığı göndermez ve bu isteklere verilen yanıtlardaki tüm Set-Cookie başlıklarını yoksayar.

Güncelleme URL'si

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",
  ...
}

Manifest dosyasını güncelleme

Sunucu tarafından döndürülen güncelleme manifesti bir XML belgesi 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 manifest dosyasının <app> ve <updatecheck> öğeleri için aşağıdaki özellikleri kullanır:

appidUzantı kimliği, paketleme bölümünde açıklandığı gibi ortak anahtarın karma oluşturma işlemine göre oluşturulur. Uzantı kimliği, Uzantı Yönetimi Sayfası'nda gösterilir.
kod tabanı.crx dosyasına ait bir HTTPS URL'si.
sürümİstemci tarafından, codebase ile belirtilen .crx dosyasını indirip indirmemesi gerektiğini belirlemek için kullanılır. Bu değer, .crx dosyasının manifest.json dosyasındaki "version" değerine karşılık gelmelidir.

Güncelleme manifesti XML dosyası, birden fazla <app> öğesi içerecek şekilde 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 zorlanabilir.

Uzantıları Şimdi Güncelle

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ı çalışmasını Apache gibi herhangi bir düz web sunucusuna statik bir XML dosyası bırakmak ve yeni uzantı sürümleri yayınlandıkça bu XML dosyasını güncellemek kadar kolay hale getirmek için tasarlanmıştır.

Birden fazla uzantı barındıran geliştiriciler, güncelleme isteğindeki 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ı kodu çalıştıran aynı URL'den güncellenmesine olanak tanır.

İstek parametrelerinin biçimi şöyledir:

?x=EXTENSION_DATA

Burada EXTENSION_DATA, şu 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 ediyor:

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

Her bir uzantıyı 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. Yukarıdaki örnekte, bir kullanıcının her iki uzantısı da yüklüyse 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ı, GET isteği URL'sinin çok uzun olmasına (2.000'den fazla karakter) neden olacak kadar fazlaysa güncelleme kontrolü gerektiğinde ek GET istekleri gönderir.

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ışacak bir uzantının güncellenmiş sürümü yayınlanabilir. Google Chrome otomatik olarak güncellenir ancak kullanıcı tabanının büyük bir kısmının 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 uygulanmasını sağlamak için güncelleme yanıtındaki öğ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ıyorlarsa otomatik olarak 2. sürüme güncellenir.