ক্রোম ওয়েব স্টোরের বাইরে হোস্ট করা এক্সটেনশনগুলো শুধুমাত্র লিনাক্স ব্যবহারকারীরাই ইনস্টল করতে পারেন। এই নিবন্ধে একটি ব্যক্তিগত সার্ভার থেকে কীভাবে .crx ফাইল প্যাকেজ, হোস্ট এবং আপডেট করতে হয় তা বর্ণনা করা হয়েছে। যদি কোনো এক্সটেনশন বা থিম শুধুমাত্র ক্রোম ওয়েব স্টোরের মাধ্যমে বিতরণ করতে চান, তাহলে ‘ওয়েবস্টোর হোস্টিং এবং আপডেটিং’ অংশটি দেখুন।
প্যাকেজিং
এক্সটেনশন এবং থিমগুলো .crx ফাইল হিসেবে পরিবেশিত হয়। ক্রোম ডেভেলপার ড্যাশবোর্ডের মাধ্যমে আপলোড করার সময়, ড্যাশবোর্ডটি স্বয়ংক্রিয়ভাবে .crx ফাইলটি তৈরি করে। ব্যক্তিগত সার্ভারে প্রকাশ করা হলে, .crx ফাইলটি স্থানীয়ভাবে তৈরি করতে হবে অথবা ক্রোম ওয়েব স্টোর থেকে ডাউনলোড করতে হবে।
ক্রোম ওয়েব স্টোর থেকে .crx ডাউনলোড করুন
যদি কোনো এক্সটেনশন ক্রোম ওয়েব স্টোরে হোস্ট করা থাকে, তাহলে .crx ফাইলটি ডেভেলপার ড্যাশবোর্ড থেকে ডাউনলোড করা যাবে। "Your Listings"-এর অধীনে এক্সটেনশনটি খুঁজুন এবং "More info"-তে ক্লিক করুন। পপ-আপ উইন্ডোতে, এটি ডাউনলোড করতে নীল রঙের main.crx লিঙ্কে ক্লিক করুন।

ডাউনলোড করা ফাইলটি একটি ব্যক্তিগত সার্ভারে হোস্ট করা যেতে পারে। স্থানীয়ভাবে একটি এক্সটেনশন হোস্ট করার জন্য এটি সবচেয়ে নিরাপদ উপায়, কারণ এক্সটেনশনটির বিষয়বস্তু ক্রোম ওয়েব স্টোর দ্বারা স্বাক্ষরিত থাকবে। এটি সম্ভাব্য আক্রমণ এবং বিকৃতি শনাক্ত করতে সাহায্য করে।
স্থানীয়ভাবে .crx তৈরি করুন
এক্সটেনশন ম্যানেজমেন্ট পেজে এক্সটেনশন ডিরেক্টরিগুলো .crx ফাইলে রূপান্তরিত হয়। মিনিবক্সে chrome://extensions/ এ যান, অথবা ক্রোম মেনুতে ক্লিক করে "More Tools" এর উপর মাউস রাখুন এবং তারপর "Extensions" নির্বাচন করুন।
এক্সটেনশন ম্যানেজমেন্ট পেজে, ডেভেলপার মোডের পাশের টগল সুইচটিতে ক্লিক করে ডেভেলপার মোড চালু করুন। তারপর প্যাক এক্সটেনশন বাটনটি নির্বাচন করুন।

এক্সটেনশন রুট ডিরেক্টরি ফিল্ডে এক্সটেনশনটির ফোল্ডারের পাথ নির্দিষ্ট করুন, তারপর প্যাক এক্সটেনশন বাটনে ক্লিক করুন। প্রথমবার প্যাকেজ করার ক্ষেত্রে প্রাইভেট কী ফিল্ডটি উপেক্ষা করুন।

ক্রোম দুটি ফাইল তৈরি করবে, একটি .crx ফাইল এবং একটি .pem ফাইল, যেগুলোতে এক্সটেনশনটির প্রাইভেট কী থাকবে।

প্রাইভেট কী হারাবেন না! .pem ফাইলটি একটি গোপন ও নিরাপদ স্থানে রাখুন; এক্সটেনশন আপডেট করার জন্য এটির প্রয়োজন হবে।
একটি .crx প্যাকেজ আপডেট করুন
manifest.json ফাইলে ভার্সন নম্বর বাড়িয়ে এক্সটেনশনের .crx ফাইলটি আপডেট করুন।
{
...
"version": "1.5",
...
}
}
{
...
"version": "1.6",
...
}
}
এক্সটেনশন ম্যানেজমেন্ট পেজে ফিরে যান এবং প্যাক এক্সটেনশন (PACK EXTENSION) বোতামে ক্লিক করুন। এক্সটেনশন ডিরেক্টরির পাথ এবং প্রাইভেট কী-এর অবস্থান নির্দিষ্ট করুন।

পৃষ্ঠাটি আপডেট করা প্যাকেজড এক্সটেনশনটির পথ প্রদান করবে।

কমান্ড লাইনের মাধ্যমে প্যাকেজ করুন
কমান্ড লাইন থেকে chrome.exe চালু করে এক্সটেনশনগুলো প্যাকেজ করুন। এক্সটেনশনের ফোল্ডারের অবস্থান নির্দিষ্ট করতে --pack-extension ফ্ল্যাগ এবং এক্সটেনশনের প্রাইভেট কী ফাইলের অবস্থান নির্দিষ্ট করতে --pack-extension-key ফ্ল্যাগ ব্যবহার করুন।
chrome.exe --pack-extension=C:\myext --pack-extension-key=C:\myext.pem
হোস্টিং
যে সার্ভারে .crx ফাইল হোস্ট করা হয়, ব্যবহারকারীদের লিঙ্কে ক্লিক করে এক্সটেনশনটি ইনস্টল করার সুযোগ দেওয়ার জন্য সেটিকে অবশ্যই উপযুক্ত HTTP হেডার ব্যবহার করতে হবে।
নিম্নলিখিত শর্তগুলোর মধ্যে যেকোনো একটি সত্য হলে গুগল ক্রোম একটি ফাইলকে ইনস্টলযোগ্য বলে মনে করে:
- ফাইলটির কন্টেন্ট টাইপ হলো
application/x-chrome-extension - ফাইল সাফিক্সটি হলো
.crxএবং নিম্নলিখিত দুটিই সত্য:- ফাইলটি HTTP হেডার
X-Content-Type-Options: nosniffসহ পরিবেশন করা হয়নি । - ফাইলটি নিম্নলিখিত কন্টেন্ট টাইপগুলির মধ্যে একটি সহ পরিবেশন করা হয় :
- খালি স্ট্রিং
- "টেক্সট/প্লেইন"
- "অ্যাপ্লিকেশন/অক্টেট-স্ট্রিম"
- "অজানা/অজানা"
- "অ্যাপ্লিকেশন/অজানা"
- "*/*"
- ফাইলটি HTTP হেডার
একটি ইনস্টলযোগ্য ফাইল শনাক্ত করতে ব্যর্থ হওয়ার সবচেয়ে সাধারণ কারণ হলো সার্ভার কর্তৃক X-Content-Type-Options: nosniff হেডারটি পাঠানো। দ্বিতীয় সবচেয়ে সাধারণ কারণ হলো সার্ভার কর্তৃক একটি অজানা কন্টেন্ট টাইপ পাঠানো—যা পূর্ববর্তী তালিকায় নেই। HTTP হেডারের সমস্যা সমাধান করতে, হয় সার্ভারের কনফিগারেশন পরিবর্তন করুন অথবা .crx ফাইলটি অন্য কোনো সার্ভারে হোস্ট করার চেষ্টা করুন।
আপডেট করা হচ্ছে
প্রতি কয়েক ঘণ্টা পর পর, ব্রাউজারটি ইনস্টল করা এক্সটেনশনগুলিতে একটি আপডেট ইউআরএল (URL) আছে কিনা তা পরীক্ষা করে। প্রতিটির জন্য, এটি একটি আপডেট ম্যানিফেস্ট এক্সএমএল (XML) ফাইলের খোঁজে সেই ইউআরএল-এ একটি অনুরোধ পাঠায়।
- আপডেট চেকের মাধ্যমে প্রাপ্ত কন্টেন্ট হলো একটি আপডেট ম্যানিফেস্ট এক্সএমএল ডকুমেন্ট, যেখানে কোনো এক্সটেনশনের সর্বশেষ সংস্করণ তালিকাভুক্ত থাকে।
যদি আপডেট ম্যানিফেস্টে ইনস্টল করা সংস্করণের চেয়ে নতুন কোনো সংস্করণের উল্লেখ থাকে, তাহলে ব্রাউজারটি নতুন সংস্করণটি ডাউনলোড ও ইনস্টল করে। ম্যানুয়াল আপডেটের মতোই, নতুন .crx ফাইলটি অবশ্যই বর্তমানে ইনস্টল করা সংস্করণের প্রাইভেট কী দিয়ে স্বাক্ষরিত হতে হবে।
ইউআরএল আপডেট করুন
ক্রোম ওয়েবস্টোরের বাইরের সার্ভারে হোস্ট করা এক্সটেনশনগুলির manifest.json ফাইলে অবশ্যই update_url ফিল্ডটি অন্তর্ভুক্ত করতে হবে।
{
"name": "My extension",
...
"update_url": "https://myhost.com/mytestextension/updates.xml",
...
}
ম্যানিফেস্ট আপডেট করুন
সার্ভার থেকে ফেরত আসা আপডেট ম্যানিফেস্টটি একটি 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>
এই XML ফরম্যাটটি গুগলের আপডেট পরিকাঠামো ওমাহা (Omaha) দ্বারা ব্যবহৃত ফরম্যাট থেকে ধার করা হয়েছে। এক্সটেনশন সিস্টেমটি আপডেট ম্যানিফেস্টের <app> এবং <updatecheck> এলিমেন্টগুলোর জন্য নিম্নলিখিত অ্যাট্রিবিউটগুলো ব্যবহার করে:
| অ্যাপিড | প্যাকেজিং -এ বর্ণিত পদ্ধতি অনুযায়ী, পাবলিক কী-এর হ্যাশের উপর ভিত্তি করে এক্সটেনশন আইডি তৈরি করা হয়। একটি এক্সটেনশনের আইডি এক্সটেনশন ম্যানেজমেন্ট পেজে প্রদর্শিত হয়। |
| কোডবেস | .crx ফাইলটির একটি HTTPS URL। |
| সংস্করণ | ক্লায়েন্ট codebase দ্বারা নির্দিষ্ট .crx ফাইলটি ডাউনলোড করবে কিনা তা নির্ধারণ করতে এটি ব্যবহার করে। এর মান অবশ্যই .crx ফাইলের manifest.json ফাইলে থাকা 'version' এর মানের সাথে মিলতে হবে। |
আপডেট ম্যানিফেস্ট XML ফাইলে একাধিক <app> এলিমেন্ট অন্তর্ভুক্ত করার মাধ্যমে একাধিক এক্সটেনশন সম্পর্কিত তথ্য থাকতে পারে।
পরীক্ষা
ডিফল্ট আপডেট চেকের সময়সীমা কয়েক ঘণ্টা, কিন্তু এক্সটেনশন ম্যানেজমেন্ট পেজে থাকা 'আপডেট এক্সটেনশনস নাউ' বাটনটি ব্যবহার করে জোরপূর্বক আপডেট করা যায়।

এটি ইনস্টল করা সমস্ত এক্সটেনশনের জন্য যাচাই শুরু করবে।
উন্নত ব্যবহার: অনুরোধ প্যারামিটার
মৌলিক স্বয়ংক্রিয় আপডেট প্রক্রিয়াটি এমনভাবে ডিজাইন করা হয়েছে যাতে সার্ভার-সাইডের কাজ খুবই সহজ হয়; শুধু অ্যাপাচির মতো যেকোনো সাধারণ ওয়েব সার্ভারে একটি স্ট্যাটিক XML ফাইল রেখে দিলেই হয় এবং নতুন এক্সটেনশন সংস্করণ প্রকাশিত হওয়ার সাথে সাথে সেই XML ফাইলটি আপডেট হয়ে যায়।
যেসব ডেভেলপার একাধিক এক্সটেনশন হোস্ট করেন, তারা রিকোয়েস্ট প্যারামিটারগুলো পরীক্ষা করতে পারেন, যা আপডেট রিকোয়েস্টে এক্সটেনশন আইডি এবং ভার্সন নির্দেশ করে। এই প্যারামিটারগুলো অন্তর্ভুক্ত করার ফলে এক্সটেনশনগুলো একটি স্ট্যাটিক XML ফাইলের পরিবর্তে ডাইনামিক সার্ভার-সাইড কোড চালিয়ে একই URL থেকে আপডেট হতে পারে।
অনুরোধ প্যারামিটারগুলোর ফরম্যাট হলো:
?x=EXTENSION_DATA
যেখানে EXTENSION_DATA হলো নিম্নলিখিত ফরম্যাটের একটি URL-এনকোডেড স্ট্রিং:
id=EXTENSION\_ID&v=EXTENSION\_VERSION
উদাহরণস্বরূপ, দুটি এক্সটেনশন একই আপডেট ইউআরএল ( https://test.com/extension_updates.php ) নির্দেশ করে:
- এক্সটেনশন ১
- আইডি: "আআআআআআআআআআআআআআআআআআআআআআআআ"
- সংস্করণ: "১.১"
- এক্সটেনশন ২
- আইডি: "বিবিবিবিবিবিবিবিবিবিবিবিবিবিবিবিবিবিবিবিবিবিবিবিবিবিবিবি।
- সংস্করণ: "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 রিকোয়েস্ট ইউআরএল খুব দীর্ঘ হয়ে যায় (প্রায় ২০০০ অক্ষরের বেশি), তাহলে আপডেট চেকটি প্রয়োজন অনুযায়ী অতিরিক্ত GET রিকোয়েস্ট পাঠায়।
উন্নত ব্যবহার: ব্রাউজারের সর্বনিম্ন সংস্করণ
এক্সটেনশন সিস্টেমে আরও এপিআই (API) যুক্ত হওয়ার সাথে সাথে, কোনো এক্সটেনশনের একটি আপডেট সংস্করণ প্রকাশিত হতে পারে যা শুধুমাত্র ব্রাউজারের নতুন সংস্করণগুলির সাথেই কাজ করবে। যদিও গুগল ক্রোম নিজে থেকেই স্বয়ংক্রিয়ভাবে আপডেট হয়, তবে ব্যবহারকারীদের একটি বড় অংশের কোনো নির্দিষ্ট নতুন সংস্করণে আপডেট হতে কয়েক দিন সময় লাগতে পারে। কোনো একটি নির্দিষ্ট আপডেট যেন শুধুমাত্র একটি নির্দিষ্ট সংস্করণ বা তার চেয়ে উচ্চতর গুগল ক্রোম সংস্করণগুলিতেই প্রযোজ্য হয়, তা নিশ্চিত করতে, "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>
এর ফলে, ব্যবহারকারীরা কেবল তখনই স্বয়ংক্রিয়ভাবে সংস্করণ ২-এ আপডেট হবেন, যখন তাঁদের ব্যবহৃত গুগল ক্রোমের সংস্করণ হবে ৩.০.১৯৩.০ বা তার চেয়ে উচ্চতর।