Hosting mandiri untuk Linux

Linux adalah satu-satunya platform tempat pengguna Chrome dapat menginstal ekstensi yang dihosting di luar Chrome Web Store. Artikel ini menjelaskan cara memaketkan, menghosting, dan mengupdate file crx dari server web tujuan umum. Jika Anda mendistribusikan ekstensi atau tema hanya melalui Chrome Web Store, lihat Hosting dan update Webstore.

Paket

Ekstensi dan tema ditayangkan sebagai file .crx. Saat mengupload melalui Dasbor Developer Chrome, dasbor akan membuat file crx secara otomatis. Jika dipublikasikan di server pribadi, file crx harus dibuat secara lokal atau didownload dari Chrome Web Store.

Mendownload .crx dari Chrome Web Store

Jika ekstensi dihosting di Chrome Web Store, file .crx dapat didownload dari Dasbor Developer. Temukan ekstensi di bagian "Listingan Anda", lalu klik "Info selengkapnya". Di jendela pop-up, klik link main.crx berwarna biru untuk mendownloadnya.

Mendownload .crx dari Dasbor Developer

File yang didownload dapat dihosting di server pribadi. Ini adalah cara paling aman untuk menghosting ekstensi secara lokal karena konten ekstensi akan ditandatangani oleh Chrome Web Store. Hal ini membantu mendeteksi potensi serangan dan modifikasi tidak sah.

Membuat .crx secara lokal

Direktori ekstensi dikonversi menjadi file .crx di Halaman Pengelolaan Ekstensi. Buka chrome://extensions/ di omnibox, atau klik menu Chrome, arahkan kursor ke "Alat Lainnya", lalu pilih "Ekstensi".

Di Halaman Pengelolaan Ekstensi, aktifkan Mode Developer dengan mengklik tombol di samping Mode developer. Kemudian, pilih tombol PACK EXTENSION.

Mode Developer Dicentang, lalu Klik Ekstensi Paket

Tentukan jalur ke folder ekstensi di kolom Extension root directory, lalu klik tombol PACK EXTENSION. Abaikan kolom Kunci pribadi untuk paket pertama kali.

Tentukan Jalur Ekstensi, lalu Klik Ekstensi Paket

Chrome akan membuat dua file, file .crx dan file .pem, yang berisi kunci pribadi ekstensi.

File Ekstensi yang Dipaketkan

Jangan sampai kunci pribadi hilang. Simpan file .pem di tempat yang rahasia dan aman; Anda perlu mengupdate ekstensi.

Mengupdate paket .crx

Perbarui file .crx ekstensi dengan menaikkan nomor versi di manifest.json.

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

Kembali ke Halaman Pengelolaan Ekstensi, lalu klik tombol PACK EXTENSION. Tentukan jalur ke direktori ekstensi dan lokasi kunci pribadi.

Memperbarui File Ekstensi

Halaman ini akan memberikan jalur untuk ekstensi paket yang diperbarui.

Memperbarui File Ekstensi

Paket melalui command line

Paketkan ekstensi di command line dengan memanggil chrome.exe. Gunakan flag --pack-extension untuk menentukan lokasi folder ekstensi dan flag --pack-extension-key untuk menentukan lokasi file kunci pribadi ekstensi.

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

Host

Server yang menghosting file .crx harus menggunakan header HTTP yang sesuai agar pengguna dapat menginstal ekstensi dengan mengklik link.

Google Chrome menganggap file dapat diinstal jika salah satu dari hal berikut terpenuhi:

  • File memiliki jenis konten application/x-chrome-extension
  • Akhiran file adalah .crx dan kedua hal berikut benar:
    • File tidak ditayangkan dengan header HTTP X-Content-Type-Options: nosniff
    • File ditayangkan dengan salah satu jenis konten berikut:
    • string kosong
    • "text/plain"
    • "application/octet-stream"
    • "unknown/unknown"
    • "application/unknown"
    • "\*/\*"

Alasan paling umum untuk gagal mengenali file yang dapat diinstal adalah server mengirimkan header X-Content-Type-Options: nosniff. Alasan paling umum kedua adalah server mengirimkan jenis konten yang tidak diketahui—jenis yang tidak ada dalam daftar sebelumnya. Untuk memperbaiki masalah header HTTP, ubah konfigurasi server atau coba hosting file .crx di server lain.

Perbarui

Setiap beberapa jam, browser akan memeriksa URL update untuk ekstensi yang diinstal. Untuk setiap variabel tersebut, instance akan membuat permintaan ke URL tersebut untuk mencari file XML manifes update.

  • Konten yang ditampilkan oleh pemeriksaan update adalah dokumen XML manifes update yang mencantumkan versi terbaru ekstensi.

Jika manifes update menyebutkan versi yang lebih baru dari yang diinstal, browser akan mendownload dan menginstal versi baru. Seperti update manual, file .crx baru harus ditandatangani dengan kunci pribadi yang sama dengan versi yang saat ini diinstal.

Catatan: Untuk menjaga privasi pengguna, Google Chrome tidak mengirim header Cookie apa pun dengan permintaan manifes update otomatis, dan mengabaikan header Set-Cookie apa pun dalam respons terhadap permintaan tersebut.

Perbarui URL

Ekstensi yang dihosting di server di luar Chrome Webstore harus menyertakan kolom update_url dalam file manifest.json-nya.

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

Mengupdate manifes

Manifes update yang ditampilkan oleh server harus berupa dokumen XML.

<?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>

Format XML ini diambil dari format yang digunakan oleh Omaha, infrastruktur update Google. Sistem ekstensi menggunakan atribut berikut untuk elemen <app> dan <updatecheck> manifes update:

appid
ID ekstensi dibuat berdasarkan hash kunci publik, seperti yang dijelaskan dalam pengemasan. ID ekstensi ditampilkan di Halaman Pengelolaan Ekstensi.
codebase
URL HTTPS ke file .crx.
versi
Digunakan oleh klien untuk menentukan apakah klien harus mendownload file .crx yang ditentukan oleh codebase. Nilai ini harus cocok dengan nilai "version" di file manifest.json file .crx.

File XML manifes update dapat berisi informasi tentang beberapa ekstensi dengan menyertakan beberapa elemen <app>.

Pengujian

Frekuensi pemeriksaan update default adalah beberapa jam, tetapi update dapat dipaksa menggunakan tombol Update ekstensi sekarang di Halaman Pengelolaan Ekstensi.

Perbarui Ekstensi Sekarang

Tindakan ini akan memulai pemeriksaan untuk semua ekstensi yang diinstal.

Penggunaan lanjutan: parameter permintaan

Mekanisme update otomatis dasar dirancang untuk membuat pekerjaan sisi server semudah menempatkan file XML statis ke server web biasa, seperti Apache, dan mengupdate file XML tersebut saat versi ekstensi baru dirilis.

Developer yang menghosting beberapa ekstensi dapat memeriksa parameter permintaan, yang menunjukkan ID dan versi ekstensi dalam permintaan update. Menyertakan parameter ini memungkinkan ekstensi diupdate dari URL yang sama yang menjalankan kode sisi server dinamis, bukan file XML statis.

Format parameter permintaan adalah:

?x=EXTENSION_DATA

Dengan EXTENSION_DATA adalah string yang dienkode URL dengan format:

id=EXTENSION_ID&v=EXTENSION_VERSION

Misalnya, dua ekstensi mengarah ke URL update yang sama (https://test.com/extension_updates.php):

  • Ekstensi 1
    • ID: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
    • Versi: "1.1"
  • Ekstensi 2
    • ID: "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
    • Versi: "0.4"

Permintaan untuk memperbarui setiap ekstensi adalah,

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

dan

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

Beberapa ekstensi dapat dicantumkan dalam satu permintaan untuk setiap URL update yang unik. Untuk contoh sebelumnya, jika pengguna telah menginstal kedua ekstensi, kedua permintaan tersebut akan digabungkan menjadi satu permintaan:

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

Jika jumlah ekstensi yang diinstal yang menggunakan URL update yang sama cukup besar sehingga URL permintaan GET terlalu panjang (lebih dari 2.000 karakter atau lebih), pemeriksaan update akan menimbulkan permintaan GET tambahan sesuai kebutuhan.

Penggunaan lanjutan: versi browser minimum

Seiring bertambahnya API yang ditambahkan ke sistem ekstensi, versi ekstensi terupdate yang hanya akan berfungsi dengan versi browser yang lebih baru mungkin akan dirilis. Meskipun Google Chrome sendiri diupdate secara otomatis, mungkin perlu waktu beberapa hari sebelum sebagian besar basis pengguna mengupdate ke rilis baru tertentu. Untuk memastikan bahwa update yang diberikan hanya akan berlaku untuk versi Google Chrome pada atau yang lebih tinggi dari versi tertentu, tambahkan atribut "prodversionmin" ke elemen <app> dalam respons update.

<?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>

Tindakan ini akan memastikan bahwa pengguna akan otomatis mengupdate ke versi 2 hanya jika mereka menjalankan Google Chrome 3.0.193.0 atau yang lebih baru.