Linux ही एक ऐसा प्लैटफ़ॉर्म है जहां Chrome के उपयोगकर्ता, Chrome वेब स्टोर के बाहर होस्ट किए गए एक्सटेंशन इंस्टॉल कर सकते हैं. इस लेख में, सामान्य तौर पर इस्तेमाल होने वाले वेब सर्वर से crx
फ़ाइलों को पैकेज करने, होस्ट करने, और अपडेट करने का तरीका बताया गया है. अगर एक्सटेंशन या थीम को सिर्फ़ Chrome वेब स्टोर से उपलब्ध कराया जा रहा है, तो वेबस्टोर पर होस्ट करने और अपडेट करने के बारे में जानें.
पैकेज
एक्सटेंशन और थीम, .crx
फ़ाइलों के तौर पर उपलब्ध कराई जाती हैं. Chrome डेवलपर डैशबोर्ड से अपलोड करने पर, डैशबोर्ड crx
फ़ाइल को अपने-आप बना देता है. अगर इसे किसी निजी सर्वर पर पब्लिश किया गया है, तो crx
फ़ाइल को स्थानीय तौर पर बनाया जाना चाहिए या Chrome वेब स्टोर से डाउनलोड किया जाना चाहिए.
Chrome Web Store से .crx डाउनलोड करना
अगर कोई एक्सटेंशन, Chrome Web Store पर होस्ट किया गया है, तो .crx
फ़ाइल को डेवलपर डैशबोर्ड से डाउनलोड किया जा सकता है. "आपकी लिस्टिंग" में एक्सटेंशन ढूंढें और "ज़्यादा जानकारी" पर क्लिक करें. पॉप-अप विंडो में, उसे डाउनलोड करने के लिए नीले main.crx
लिंक पर क्लिक करें.
डाउनलोड की गई फ़ाइल को निजी सर्वर पर होस्ट किया जा सकता है. किसी एक्सटेंशन को स्थानीय तौर पर होस्ट करने का यह सबसे सुरक्षित तरीका है. ऐसा इसलिए, क्योंकि एक्सटेंशन के कॉन्टेंट पर Chrome Web Store साइन करेगा. इससे, संभावित हमलों और डेटा में छेड़छाड़ का पता लगाने में मदद मिलती है.
स्थानीय तौर पर .crx बनाएं
एक्सटेंशन डायरेक्ट्री, एक्सटेंशन मैनेजमेंट पेज पर .crx
फ़ाइलों में बदल जाती हैं. ऑमनीबॉक्स में chrome://extensions/
पर जाएं या Chrome मेन्यू पर क्लिक करें. इसके बाद, "ज़्यादा टूल" पर कर्सर घुमाएं और फिर "एक्सटेंशन" चुनें.
एक्सटेंशन मैनेजमेंट पेज पर, डेवलपर मोड के बगल में मौजूद टॉगल स्विच पर क्लिक करके, डेवलपर मोड चालू करें. इसके बाद, पैक एक्सटेंशन बटन चुनें.
एक्सटेंशन रूट डायरेक्ट्री फ़ील्ड में, एक्सटेंशन फ़ोल्डर का पाथ डालें. इसके बाद, एक्सटेंशन पैक करें बटन पर क्लिक करें. पहली बार पैकेज बनाने के लिए, निजी कुंजी फ़ील्ड को अनदेखा करें.
Chrome दो फ़ाइलें बनाएगा, .crx
फ़ाइल और .pem
फ़ाइल. इसमें एक्सटेंशन की निजी कुंजी शामिल होगी.
निजी कुंजी को न खोएं! .pem
फ़ाइल को किसी सुरक्षित और गुप्त जगह पर रखें. एक्सटेंशन को अपडेट करने के लिए, इसकी ज़रूरत होगी.
.crx पैकेज को अपडेट करना
manifest.json
में वर्शन नंबर बढ़ाकर, एक्सटेंशन की .crx
फ़ाइल को अपडेट करें.
{
...
"version": "1.5",
...
}
}
{
...
"version": "1.6",
...
}
}
एक्सटेंशन मैनेजमेंट पेज पर वापस जाएं और पैक एक्सटेंशन बटन पर क्लिक करें. एक्सटेंशन डायरेक्ट्री का पाथ और निजी कुंजी की जगह बताएं.
इस पेज पर, पैकेज किए गए अपडेट किए गए एक्सटेंशन का पाथ दिखेगा.
कमांड लाइन की मदद से पैकेज बनाना
chrome.exe
को चालू करके, कमांड लाइन में एक्सटेंशन पैकेज करें. एक्सटेंशन के फ़ोल्डर की जगह बताने के लिए --pack-extension
फ़्लैग और एक्सटेंशन की निजी कुंजी फ़ाइल की जगह बताने के लिए --pack-extension-key
फ़्लैग का इस्तेमाल करें.
chrome.exe --pack-extension=C:\myext --pack-extension-key=C:\myext.pem
होस्ट
.crx
फ़ाइलों को होस्ट करने वाले सर्वर को सही एचटीटीपी हेडर इस्तेमाल करने चाहिए, ताकि उपयोगकर्ता लिंक पर क्लिक करके एक्सटेंशन इंस्टॉल कर सकें.
Google Chrome किसी फ़ाइल को इंस्टॉल करने लायक तब मानता है, जब इनमें से कोई एक शर्त पूरी होती है:
- फ़ाइल का कॉन्टेंट टाइप
application/x-chrome-extension
है - फ़ाइल का सफ़िक्स
.crx
है और इनमें से दोनों बातें सही हैं:- फ़ाइल को एचटीटीपी हेडर
X-Content-Type-Options: nosniff
के साथ नहीं दिखाया जाता - फ़ाइल को इनमें से किसी एक तरह के कॉन्टेंट के साथ दिखाया जाता है:
- खाली स्ट्रिंग
"text/plain"
"application/octet-stream"
"unknown/unknown"
"application/unknown"
"\*/\*"
- फ़ाइल को एचटीटीपी हेडर
इंस्टॉल की जा सकने वाली फ़ाइल की पहचान न हो पाने की सबसे सामान्य वजह यह है कि सर्वर, हेडर X-Content-Type-Options: nosniff
भेजता है. दूसरी सबसे आम वजह यह है कि सर्वर एक ऐसा कॉन्टेंट भेजता है
जिसकी जानकारी नहीं है और वह कॉन्टेंट पिछली सूची में मौजूद नहीं है. एचटीटीपी हेडर से जुड़ी समस्या को ठीक करने के लिए, सर्वर का कॉन्फ़िगरेशन बदलें या .crx
फ़ाइल को किसी दूसरे सर्वर पर होस्ट करें.
अपडेट करें
ब्राउज़र, हर कुछ घंटों में अपडेट यूआरएल के लिए इंस्टॉल किए गए एक्सटेंशन की जांच करता है. हर एक के लिए, यह उस यूआरएल से अपडेट मेनिफ़ेस्ट एक्सएमएल फ़ाइल का अनुरोध करता है.
- अपडेट की जांच करने पर मिलने वाला कॉन्टेंट, अपडेट मेनिफ़ेस्ट एक्सएमएल दस्तावेज़ होता है. इसमें एक्सटेंशन का नया वर्शन होता है.
अगर अपडेट मेनिफ़ेस्ट में, इंस्टॉल किए गए वर्शन से ज़्यादा नया वर्शन बताया गया है, तो ब्राउज़र नया वर्शन डाउनलोड करके इंस्टॉल करता है. मैन्युअल तरीके से अपडेट करने की तरह ही, नई .crx
फ़ाइल पर उसी निजी कुंजी से हस्ताक्षर किया जाना चाहिए जिससे फ़िलहाल इंस्टॉल किया गया वर्शन हस्ताक्षर किया गया है.
यूआरएल अपडेट करें
'Chrome वेब स्टोर' के बाहर के सर्वर पर होस्ट किए गए एक्सटेंशन की manifest.json
फ़ाइल में update_url
फ़ील्ड ज़रूर शामिल होना चाहिए.
{
"name": "My extension",
...
"update_url": "https://myhost.com/mytestextension/updates.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>
यह एक्सएमएल फ़ॉर्मैट, Google के अपडेट इन्फ़्रास्ट्रक्चर Omaha में इस्तेमाल किए जाने वाले फ़ॉर्मैट से लिया गया है. एक्सटेंशन सिस्टम, अपडेट मेनिफ़ेस्ट के <app>
और <updatecheck>
एलिमेंट के लिए इन एट्रिब्यूट का इस्तेमाल करता है:
- appid
- एक्सटेंशन आईडी, सार्वजनिक कुंजी के हैश के आधार पर जनरेट होता है. इस बारे में पैकेजिंग में बताया गया है. एक्सटेंशन का आईडी, एक्सटेंशन मैनेजमेंट पेज पर दिखता है.
- कोड बेस
.crx
फ़ाइल का एचटीटीपीएस यूआरएल.- वर्शन
- क्लाइंट इसका इस्तेमाल यह तय करने के लिए करता है कि उसे
codebase
में बताई गई.crx
फ़ाइल को डाउनलोड करना चाहिए या नहीं. यह वैल्यू,.crx
फ़ाइल कीmanifest.json
फ़ाइल में मौजूद "version" की वैल्यू से मेल खानी चाहिए.
अपडेट मेनिफ़ेस्ट एक्सएमएल फ़ाइल में एक से ज़्यादा एक्सटेंशन के बारे में जानकारी हो सकती है जिसमें एक से ज़्यादा <app>
एलिमेंट शामिल होते हैं.
टेस्ट करना
अपडेट की जांच करने की डिफ़ॉल्ट फ़्रीक्वेंसी कई घंटे होती है. हालांकि, एक्सटेंशन मैनेजमेंट पेज पर मौजूद एक्सटेंशन को अभी अपडेट करें बटन का इस्तेमाल करके, अपडेट को तुरंत लागू किया जा सकता है.
इससे, इंस्टॉल किए गए सभी एक्सटेंशन की जांच शुरू हो जाएगी.
बेहतर तरीके से इस्तेमाल करना: अनुरोध पैरामीटर
अपने-आप अपडेट होने की बुनियादी प्रक्रिया को इस तरह से डिज़ाइन किया गया है कि सर्वर साइड काम करना आसान हो जाता है. जैसे, किसी सादे वेब सर्वर, जैसे कि Apache पर स्टैटिक एक्सएमएल फ़ाइल को छोड़ना, और उस एक्सएमएल फ़ाइल को एक्सटेंशन के नए वर्शन रिलीज़ होने पर अपडेट करना.
एक से ज़्यादा एक्सटेंशन होस्ट करने वाले डेवलपर, अनुरोध पैरामीटर देख सकते हैं. इनसे, अपडेट के अनुरोध में एक्सटेंशन आईडी और वर्शन के बारे में पता चलता है. इन पैरामीटर को शामिल करने से, एक्सटेंशन को स्टैटिक एक्सएमएल फ़ाइल के बजाय, डाइनैमिक सर्वर साइड कोड चलाने वाले उसी यूआरएल से अपडेट करने की अनुमति मिलती है.
अनुरोध पैरामीटर का फ़ॉर्मैट यह है:
?x=EXTENSION_DATA
यहां EXTENSION_DATA
, यूआरएल को कोड में बदलने वाली स्ट्रिंग है, जो इस फ़ॉर्मैट में है:
id=EXTENSION_ID&v=EXTENSION_VERSION
उदाहरण के लिए, दो एक्सटेंशन एक ही अपडेट यूआरएल (https://test.com/extension_updates.php
) पर ले जाते हैं:
- पहला एक्सटेंशन
- आईडी: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
- वर्शन: "1.1"
- दूसरा एक्सटेंशन
- आईडी: "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
- वर्शन: "0.4"
हर एक्सटेंशन को अपडेट करने का अनुरोध इस तरह होगा,
https://test.com/extension_updates.php?x=id%3Daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa%26v%3D1.1
और
https://test.com/extension_updates.php?x=id%3Dbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb%26v%3D0.4
हर यूनीक अपडेट यूआरएल के लिए, एक अनुरोध में कई एक्सटेंशन शामिल किए जा सकते हैं. पिछले उदाहरण के लिए, अगर किसी उपयोगकर्ता के पास दोनों एक्सटेंशन इंस्टॉल हैं, तो दोनों अनुरोधों को एक अनुरोध में मर्ज कर दिया जाता है:
https://test.com/extension_updates.php?x=id%3Daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa%26v%3D1.1&x=id%3Dbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb%26v%3D0.4
अगर एक ही अपडेट यूआरएल का इस्तेमाल करने वाले इंस्टॉल किए गए एक्सटेंशन की संख्या इतनी ज़्यादा है कि GET अनुरोध का यूआरएल बहुत लंबा (2,000 से ज़्यादा वर्ण) है, तो अपडेट की जांच के लिए ज़रूरत के हिसाब से अतिरिक्त GET अनुरोध भेजे जाते हैं.
बेहतर इस्तेमाल: ब्राउज़र का कम से कम वर्शन
जैसे-जैसे एक्सटेंशन सिस्टम में और एपीआई जोड़े जाएंगे, किसी एक्सटेंशन का अपडेट किया गया वर्शन रिलीज़ किया जाएगा जो सिर्फ़ ब्राउज़र के नए वर्शन के साथ ही काम करेगा. हालांकि Google Chrome खुद ही अपने आप अपडेट होता है,
लेकिन किसी नई रिलीज़ में ज़्यादातर उपयोगकर्ता आधार को अपडेट होने में कुछ दिन लग सकते हैं. यह पक्का करने के लिए कि कोई अपडेट सिर्फ़ Google Chrome के किसी खास वर्शन या उससे नए वर्शन पर लागू हो, अपडेट के जवाब में <app>
एलिमेंट में "prodversionmin" एट्रिब्यूट जोड़ें.
<?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>
इससे यह पक्का होगा कि उपयोगकर्ताओं के डिवाइसों पर, वर्शन 2 अपने-आप सिर्फ़ तब अपडेट होगा, जब उन पर Google Chrome 3.0.193.0 या इसके बाद का वर्शन चल रहा होगा.