Linux के लिए खुद होस्ट करें

Linux ऐसा एकमात्र प्लैटफ़ॉर्म है जहां Chrome उपयोगकर्ता ऐसे एक्सटेंशन इंस्टॉल कर सकते हैं जो Chrome वेब स्टोर. इस लेख में crx को पैकेज, होस्ट, और अपडेट करने का तरीका बताया गया है सामान्य कामों के लिए इस्तेमाल किए जाने वाले वेब सर्वर की फ़ाइलें. अगर आप केवल एक एक्सटेंशन या थीम वितरित कर रहे हैं Chrome वेब स्टोर के ज़रिए, वेबस्टोर होस्टिंग और अपडेट हो रहा है.

पैकेज

एक्सटेंशन और थीम को .crx फ़ाइलों के तौर पर दिखाया जाता है. Chrome डेवलपर की मदद से अपलोड करते समय डैशबोर्ड पर, डैशबोर्ड अपने-आप crx फ़ाइल बनाता है. अगर पब्लिश किया गया हो अगर आप निजी सर्वर पर हैं, तो crx फ़ाइल को स्थानीय तौर पर बनाना होगा या Chrome से डाउनलोड करना होगा वेब स्टोर.

Chrome वेब स्टोर से .crx डाउनलोड करें

अगर किसी एक्सटेंशन को Chrome वेब स्टोर पर होस्ट किया गया है, तो .crx फ़ाइल को डेवलपर डैशबोर्ड. "आपकी लिस्टिंग" में जाकर, एक्सटेंशन ढूंढें और "ज़्यादा जानकारी" पर क्लिक करें. इस पॉप-अप विंडो है, तो इसे डाउनलोड करने के लिए, नीले रंग के main.crx लिंक पर क्लिक करें.

डेवलपर डैशबोर्ड से .crx डाउनलोड करें

डाउनलोड की गई फ़ाइल को निजी सर्वर पर होस्ट किया जा सकता है. यह होस्ट करने का सबसे सुरक्षित तरीका है एक्सटेंशन की सामग्री के रूप में किया जाता है, इसलिए Chrome वेब स्टोर इस पर हस्ताक्षर करेगा. यह संभावित हमलों और छेड़छाड़ का पता लगाने में मदद करता है.

स्थानीय तौर पर .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 फ़ाइल पर हस्ताक्षर करना ज़रूरी है और वर्तमान में इंस्टॉल किए गए वर्शन के समान निजी कुंजी का उपयोग करें.

ध्यान दें: उपयोगकर्ता की निजता बनाए रखने के लिए Google Chrome, अपने-आप अपडेट होने वाले मेनिफ़ेस्ट के अनुरोधों के साथ कोई कुकी हेडर नहीं भेजता. साथ ही, उन अनुरोधों के जवाबों में किसी भी सेट-कुकी हेडर को अनदेखा कर देता है.

यूआरएल अपडेट करें

'Chrome वेब स्टोर' के बाहर के सर्वर पर होस्ट किए गए एक्सटेंशन में update_url फ़ील्ड शामिल होना चाहिए उसकी manifest.json फ़ाइल.

{
  "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 फ़ाइल को डाउनलोड करना चाहिए या नहीं. यह "version" के मान से मेल खाना चाहिए .crx फ़ाइल की manifest.json फ़ाइल में.

अपडेट मेनिफ़ेस्ट एक्सएमएल फ़ाइल में एक से ज़्यादा एक्सटेंशन को शामिल करके, उनके बारे में जानकारी हो सकती है <app> एलिमेंट.

टेस्ट करना

डिफ़ॉल्ट रूप से अपडेट जांच की फ़्रीक्वेंसी कई घंटों की होती है, लेकिन अपडेट का इस्तेमाल करके अपडेट को फ़ोर्स किया जा सकता है एक्सटेंशन अभी बटन पर क्लिक करें.

एक्सटेंशन अभी अपडेट करें

इससे, इंस्टॉल किए गए सभी एक्सटेंशन की जांच शुरू हो जाएगी.

बेहतर इस्तेमाल: अनुरोध पैरामीटर

बुनियादी अपने-आप अपडेट होने का तरीका इस तरह से डिज़ाइन किया गया है कि सर्वर साइड काम करना उतना ही आसान हो जाता है जितना किसी स्टैटिक एक्सएमएल फ़ाइल को किसी भी सादे वेब सर्वर, जैसे कि Apache पर अपलोड करें और उस एक्सएमएल फ़ाइल को नई एक्सटेंशन वर्शन रिलीज़ किए जाते हैं.

जो डेवलपर एक से ज़्यादा एक्सटेंशन होस्ट करते हैं वे अनुरोध के पैरामीटर की जांच कर सकते हैं, जो एक्सटेंशन आईडी को दिखाते हैं और उसके वर्शन के बारे में बताएं. इन पैरामीटर को शामिल करने से एक्सटेंशन को ऐसा करने वाला यूआरएल, स्टैटिक एक्सएमएल फ़ाइल के बजाय डाइनैमिक सर्वर साइड कोड चला रहा हो.

अनुरोध के पैरामीटर का फ़ॉर्मैट ऐसा होता है:

?x=EXTENSION_DATA

जहां EXTENSION_DATA, फ़ॉर्मैट की यूआरएल-एन्कोडेड स्ट्रिंग होती है:

id=EXTENSION_ID&v=EXTENSION_VERSION

उदाहरण के लिए, दो एक्सटेंशन एक ही अपडेट यूआरएल (https://test.com/extension_updates.php) पर ले जाते हैं:

  • एक्सटेंशन 1
    • आईडी: "aaaaaaaaaaaaaaaaaaaaaaaaaaa"
    • वर्शन: "1.1"
  • एक्सटेंशन 2
    • आईडी: "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

अगर एक ही अपडेट यूआरएल का इस्तेमाल करके इंस्टॉल किए गए एक्सटेंशन की संख्या, जीईटी अनुरोध की तुलना में काफ़ी ज़्यादा है यूआरएल बहुत लंबा है (2,000 वर्णों से ज़्यादा), अपडेट की जांच में दूसरे जीईटी अनुरोध इस तरह शामिल किए गए हैं ज़रूरी है.

बेहतर इस्तेमाल: ब्राउज़र का कम से कम वर्शन

जैसे-जैसे एक्सटेंशन सिस्टम में और एपीआई जोड़े जाएंगे, एक्सटेंशन का अपडेट किया गया वर्शन काम करेगा केवल ब्राउज़र के नए वर्शन के साथ ही रिलीज़ किए जा सकते हैं. जबकि Google Chrome अपने आप अपडेट होता है, किसी नई रिलीज़ पर ज़्यादातर उपयोगकर्ता आधार को अपडेट होने में कुछ दिन लग सकते हैं. यहां की यात्रा पर हूं सुनिश्चित करें कि दिया गया अपडेट केवल Google Chrome के उन वर्शन पर ही लागू होगा जो विशिष्ट वर्शन में, "prodversionmin" जोड़ें एट्रिब्यूट को अपडेट रिस्पॉन्स में <app> एलिमेंट के लिए सबमिट करें.

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

इससे यह सुनिश्चित होगा कि उपयोगकर्ता केवल Google Chrome का उपयोग कर रहे होने पर ही उन्हें वर्शन 2 में अपने आप अपडेट करेंगे 3.0.193.0 या उसके बाद के वर्शन.