Linux ही ऐसा प्लैटफ़ॉर्म है जहां Chrome के उपयोगकर्ता, Chrome Web Store के बाहर होस्ट किए गए एक्सटेंशन इंस्टॉल कर सकते हैं. इस लेख में, सामान्य वेब सर्वर से crx
फ़ाइलों को पैकेज करने, होस्ट करने, और अपडेट करने का तरीका बताया गया है. अगर आपको सिर्फ़ Chrome Web Store के ज़रिए कोई एक्सटेंशन या थीम डिस्ट्रिब्यूट करनी है, तो Webstore पर होस्ट करने और अपडेट करने के बारे में जानकारी देखें.
पैकेज
एक्सटेंशन और थीम, .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 फ़ाइल में एक्सटेंशन का निजी पासकोड होता है.

निजी कुंजी को सुरक्षित रखें! .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के साथ नहीं दिखाया गया है. इसलिए, ऐसा नहीं किया जा सकता - फ़ाइल को इनमें से किसी एक कॉन्टेंट टाइप के साथ दिखाया गया हो: is
- खाली स्ट्रिंग
"text/plain""application/octet-stream""unknown/unknown""application/unknown""\*/\*"
- फ़ाइल को एचटीटीपी हेडर
इंस्टॉल की जा सकने वाली फ़ाइल को न पहचानने की सबसे आम वजह यह है कि सर्वर, हेडर X-Content-Type-Options: nosniff भेजता है. दूसरी सबसे आम वजह यह है कि सर्वर, कॉन्टेंट का ऐसा टाइप भेजता है जिसके बारे में जानकारी नहीं है. यानी, वह टाइप ऊपर दी गई सूची में शामिल नहीं है. एचटीटीपी हेडर से जुड़ी समस्या को ठीक करने के लिए, सर्वर के कॉन्फ़िगरेशन में बदलाव करें या .crx फ़ाइल को किसी दूसरे सर्वर पर होस्ट करने की कोशिश करें.
अपडेट करें
ब्राउज़र, हर कुछ घंटों में इंस्टॉल किए गए एक्सटेंशन के अपडेट यूआरएल की जांच करता है. हर एक के लिए, यह उस यूआरएल पर अपडेट मेनिफ़ेस्ट एक्सएमएल फ़ाइल ढूंढने का अनुरोध करता है.
- अपडेट की जांच करने पर, अपडेट मेनिफ़ेस्ट एक्सएमएल दस्तावेज़ मिलता है. इसमें एक्सटेंशन के नए वर्शन की जानकारी होती है.
अगर अपडेट मेनिफ़ेस्ट में, इंस्टॉल किए गए वर्शन से ज़्यादा नया वर्शन मौजूद है, तो ब्राउज़र नया वर्शन डाउनलोड और इंस्टॉल करता है. मैन्युअल अपडेट की तरह ही, नई .crx फ़ाइल पर भी उसी निजी पासकोड से हस्ताक्षर किया जाना चाहिए जिसका इस्तेमाल, फ़िलहाल इंस्टॉल किए गए वर्शन के लिए किया गया था.
यूआरएल अपडेट करें
Chrome Web Store के बाहर के सर्वर पर होस्ट किए गए एक्सटेंशन को अपनी 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
- एक्सटेंशन आईडी, सार्वजनिक पासकोड के हैश के आधार पर जनरेट होता है. इसके बारे में पैकेजिंग में बताया गया है. एक्सटेंशन का आईडी, एक्सटेंशन मैनेज करने वाले पेज पर दिखता है.
- कोड बेस
- फ़ाइल का एचटीटीपीएस यूआरएल.
- वर्शन
- का इस्तेमाल क्लाइंट यह तय करने के लिए करता है कि उसे
codebaseकी ओर से तय की गई.crxफ़ाइल को डाउनलोड करना चाहिए या नहीं. यह वैल्यू,.crxफ़ाइल कीmanifest.jsonफ़ाइल में मौजूद "version" की वैल्यू से मेल खानी चाहिए.
.crx
अपडेट मेनिफ़ेस्ट की एक्सएमएल फ़ाइल में, एक से ज़्यादा एक्सटेंशन के बारे में जानकारी हो सकती है. इसके लिए, एक से ज़्यादा
<app> एलिमेंट शामिल किए जाते हैं.
टेस्ट करना
अपडेट की जांच करने की डिफ़ॉल्ट फ़्रीक्वेंसी कई घंटे होती है. हालांकि, एक्सटेंशन मैनेजमेंट पेज पर मौजूद, एक्सटेंशन को अभी अपडेट करें बटन का इस्तेमाल करके, अपडेट को तुरंत लागू किया जा सकता है.

इससे इंस्टॉल किए गए सभी एक्सटेंशन की जांच शुरू हो जाएगी.
एडवांस इस्तेमाल: अनुरोध के पैरामीटर
अपने-आप अपडेट होने की सुविधा का बुनियादी सिद्धांत यह है कि सर्वर-साइड का काम उतना ही आसान हो जितना किसी स्टैटिक एक्सएमएल फ़ाइल को किसी सामान्य वेब सर्वर, जैसे कि Apache पर डालना. साथ ही, एक्सटेंशन के नए वर्शन रिलीज़ होने पर उस एक्सएमएल फ़ाइल को अपडेट करना.
एक से ज़्यादा एक्सटेंशन होस्ट करने वाले डेवलपर, अनुरोध के पैरामीटर की जांच कर सकते हैं. इससे अपडेट के अनुरोध में एक्सटेंशन आईडी और वर्शन का पता चलता है. इन पैरामीटर को शामिल करने से, एक्सटेंशन को स्टैटिक एक्सएमएल फ़ाइल के बजाय, डाइनैमिक सर्वर-साइड कोड चलाने वाले एक ही यूआरएल से अपडेट किया जा सकता है.
अनुरोध के पैरामीटर का फ़ॉर्मैट यह है:
?x=EXTENSION_DATA
यहां EXTENSION_DATA, यूआरएल के लिए कोड में बदली गई स्ट्रिंग है. इसका फ़ॉर्मैट यह है:
id=EXTENSION_ID&v=EXTENSION_VERSION
उदाहरण के लिए, दो एक्सटेंशन एक ही अपडेट यूआरएल (https://test.com/extension_updates.php) पर ले जाते हैं:
- एक्सटेंशन 1
- आईडी: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
- वर्शन: "1.1"
- एक्सटेंशन 2
- आईडी: "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
- वर्शन: "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 या इसके बाद का वर्शन इस्तेमाल कर रहे हों.