লিনাক্সের জন্য স্ব-হোস্ট

Linux হল একমাত্র প্ল্যাটফর্ম যেখানে Chrome ব্যবহারকারীরা Chrome Web Store এর বাইরে হোস্ট করা এক্সটেনশনগুলি ইনস্টল করতে পারে৷ এই নিবন্ধটি বর্ণনা করে কিভাবে একটি সাধারণ উদ্দেশ্য ওয়েব সার্ভার থেকে crx ফাইলগুলিকে প্যাকেজ, হোস্ট এবং আপডেট করতে হয়। আপনি যদি শুধুমাত্র Chrome ওয়েব স্টোরের মাধ্যমে একটি এক্সটেনশন বা থিম বিতরণ করেন, তাহলে ওয়েবস্টোর হোস্টিং এবং আপডেট করার পরামর্শ নিন৷

প্যাকেজ

এক্সটেনশন এবং থিম .crx ফাইল হিসাবে পরিবেশিত হয়। Chrome ডেভেলপার ড্যাশবোর্ডের মাধ্যমে আপলোড করার সময়, ড্যাশবোর্ড স্বয়ংক্রিয়ভাবে crx ফাইল তৈরি করে। ব্যক্তিগত সার্ভারে প্রকাশিত হলে, crx ফাইলটিকে স্থানীয়ভাবে তৈরি করতে হবে বা Chrome ওয়েব স্টোর থেকে ডাউনলোড করতে হবে।

Chrome ওয়েব স্টোর থেকে .crx ডাউনলোড করুন

ক্রোম ওয়েব স্টোরে একটি এক্সটেনশন হোস্ট করা থাকলে, .crx ফাইলটি ডেভেলপার ড্যাশবোর্ড থেকে ডাউনলোড করা যেতে পারে। "আপনার তালিকা" এর অধীনে এক্সটেনশনটি সনাক্ত করুন এবং "আরো তথ্য" ক্লিক করুন। পপআপ উইন্ডোতে, এটি ডাউনলোড করতে নীল main.crx লিঙ্কে ক্লিক করুন।

ডেভেলপার ড্যাশবোর্ড থেকে .crx ডাউনলোড করুন

ডাউনলোড করা ফাইলটি একটি ব্যক্তিগত সার্ভারে হোস্ট করা যেতে পারে। এটি স্থানীয়ভাবে একটি এক্সটেনশন হোস্ট করার সবচেয়ে নিরাপদ উপায় কারণ এক্সটেনশনের বিষয়বস্তু Chrome ওয়েব স্টোর দ্বারা স্বাক্ষরিত হবে৷ এটি সম্ভাব্য আক্রমণ এবং টেম্পারিং সনাক্ত করতে সাহায্য করে।

স্থানীয়ভাবে .crx তৈরি করুন

এক্সটেনশন ম্যানেজমেন্ট পৃষ্ঠায় এক্সটেনশন ডিরেক্টরি .crx ফাইলে রূপান্তরিত হয়। omnibox-এ 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 ফাইলগুলি হোস্ট করে এমন একটি সার্ভারকে অবশ্যই উপযুক্ত HTTP শিরোনাম ব্যবহার করতে হবে যাতে ব্যবহারকারীরা একটি লিঙ্কে ক্লিক করে এক্সটেনশন ইনস্টল করতে পারেন৷

Google Chrome একটি ফাইলকে ইনস্টলযোগ্য বলে বিবেচনা করে যদি নিচের যেকোনো একটি সত্য হয়:

  • ফাইলটিতে কন্টেন্ট টাইপ application/x-chrome-extension রয়েছে
  • ফাইলের প্রত্যয় হল .crx এবং নিচের দুটিই সত্য:
    • ফাইলটি HTTP হেডার X-Content-Type-Options: nosniff এর সাথে পরিবেশিত হয় না
    • ফাইলটি নিম্নলিখিত বিষয়বস্তুর প্রকারগুলির মধ্যে একটি দিয়ে পরিবেশিত হয় :
    • খালি স্ট্রিং
    • "text/plain"
    • "application/octet-stream"
    • "unknown/unknown"
    • "application/unknown"
    • "\*/\*"

একটি ইনস্টলযোগ্য ফাইল সনাক্ত করতে ব্যর্থ হওয়ার সবচেয়ে সাধারণ কারণ হল সার্ভারটি হেডার পাঠায় X-Content-Type-Options: nosniff । দ্বিতীয় সবচেয়ে সাধারণ কারণ হল যে সার্ভার একটি অজানা বিষয়বস্তুর ধরন পাঠায়—যা আগের তালিকায় নেই। একটি HTTP হেডার সমস্যা সমাধান করতে, হয় সার্ভারের কনফিগারেশন পরিবর্তন করুন অথবা অন্য সার্ভারে .crx ফাইল হোস্ট করার চেষ্টা করুন।

আপডেট

প্রতি কয়েক ঘন্টা, ব্রাউজার একটি আপডেট URL এর জন্য ইনস্টল করা এক্সটেনশনগুলি পরীক্ষা করে৷ প্রতিটির জন্য, এটি একটি আপডেট ম্যানিফেস্ট এক্সএমএল ফাইলের সন্ধানে সেই URL-এ একটি অনুরোধ করে৷

  • একটি আপডেট চেক দ্বারা প্রত্যাবর্তিত বিষয়বস্তু একটি এক্সটেনশনের সর্বশেষ সংস্করণ তালিকাভুক্ত একটি আপডেট ম্যানিফেস্ট XML নথি৷

যদি আপডেট ম্যানিফেস্টে এমন একটি সংস্করণ উল্লেখ করা হয় যা ইনস্টল করা হয়েছে তার চেয়ে সাম্প্রতিকতম, ব্রাউজারটি নতুন সংস্করণ ডাউনলোড এবং ইনস্টল করে। ম্যানুয়াল আপডেটের মতো, নতুন .crx ফাইলটি বর্তমান ইনস্টল করা সংস্করণের মতো একই ব্যক্তিগত কী দিয়ে স্বাক্ষরিত হতে হবে।

দ্রষ্টব্য: ব্যবহারকারীর গোপনীয়তা বজায় রাখার জন্য, Google Chrome স্বয়ংক্রিয় আপডেট ম্যানিফেস্ট অনুরোধ সহ কোনও কুকি শিরোনাম পাঠায় না এবং সেই অনুরোধগুলির প্রতিক্রিয়াগুলিতে কোনও সেট-কুকি শিরোনাম উপেক্ষা করে৷

URL আপডেট করুন

Chrome ওয়েবস্টোরের বাইরে সার্ভারে হোস্ট করা এক্সটেনশনগুলিকে অবশ্যই তাদের 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 ফর্ম্যাটটি ওমাহা , Google-এর আপডেট পরিকাঠামো দ্বারা ব্যবহৃত যেটি থেকে ধার করা হয়েছে৷ এক্সটেনশন সিস্টেম আপডেট ম্যানিফেস্টের <app> এবং <updatecheck> উপাদানগুলির জন্য নিম্নলিখিত বৈশিষ্ট্যগুলি ব্যবহার করে:

appid
প্যাকেজিং -এ বর্ণিত পাবলিক কী-এর হ্যাশের উপর ভিত্তি করে এক্সটেনশন আইডি তৈরি করা হয়। এক্সটেনশন ম্যানেজমেন্ট পৃষ্ঠায় একটি এক্সটেনশনের আইডি প্রদর্শিত হয়।
কোডবেস
.crx ফাইলের একটি HTTPS URL।
সংস্করণ
codebase দ্বারা নির্দিষ্ট করা .crx ফাইল ডাউনলোড করা উচিত কিনা তা নির্ধারণ করতে ক্লায়েন্ট দ্বারা ব্যবহৃত হয়। এটি .crx ফাইলের manifest.json ফাইলের "সংস্করণ"-এর মানের সাথে মেলে।

আপডেট ম্যানিফেস্ট XML ফাইলে একাধিক <app> উপাদান অন্তর্ভুক্ত করে একাধিক এক্সটেনশন সম্পর্কে তথ্য থাকতে পারে।

টেস্টিং

ডিফল্ট আপডেট চেক ফ্রিকোয়েন্সি কয়েক ঘন্টা, কিন্তু এক্সটেনশন ম্যানেজমেন্ট পৃষ্ঠার আপডেট এক্সটেনশন এখন বোতাম ব্যবহার করে একটি আপডেট জোর করে করা যেতে পারে।

এখনই এক্সটেনশন আপডেট করুন

এটি সমস্ত ইনস্টল করা এক্সটেনশনের জন্য পরীক্ষা শুরু করবে।

উন্নত ব্যবহার: অনুরোধ পরামিতি

বেসিক স্বয়ংক্রিয় আপডেট পদ্ধতিটি সার্ভার-সাইডের কাজকে সহজ করে দেওয়ার জন্য ডিজাইন করা হয়েছে যে কোনও প্লেইন ওয়েব সার্ভারে একটি স্ট্যাটিক এক্সএমএল ফাইল ফেলে দেওয়া, যেমন অ্যাপাচি, এবং সেই XML ফাইলটিকে নতুন এক্সটেনশন সংস্করণ প্রকাশ করা হিসাবে আপডেট করা।

একাধিক এক্সটেনশন হোস্ট করা বিকাশকারীরা অনুরোধের পরামিতি পরীক্ষা করতে পারে, যা আপডেট অনুরোধে এক্সটেনশন আইডি এবং সংস্করণ নির্দেশ করে। এই পরামিতিগুলি সহ এক্সটেনশানগুলিকে স্ট্যাটিক XML ফাইলের পরিবর্তে গতিশীল সার্ভার-সাইড কোড চলমান একই URL থেকে আপডেট করার অনুমতি দেয়৷

অনুরোধের পরামিতিগুলির বিন্যাস হল:

?x=EXTENSION_DATA

যেখানে EXTENSION_DATA বিন্যাসের একটি URL-এনকোডেড স্ট্রিং:

id=EXTENSION_ID&v=EXTENSION_VERSION

উদাহরণস্বরূপ, দুটি এক্সটেনশন একই আপডেট URL নির্দেশ করে ( https://test.com/extension_updates.php ):

  • এক্সটেনশন 1
    • আইডি: "আআআআআআআআআআআআআআআআআআআআআআআআ"
    • সংস্করণ: "1.1"
  • এক্সটেনশন 2
    • আইডি: "বিবিবিবিবিবিবিবিবিবিবিবিবিবিবিবিবিবিবিবিবিবিবিবিবিবিবিবি।
    • সংস্করণ: "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

একাধিক এক্সটেনশন প্রতিটি অনন্য আপডেট URL এর জন্য একক অনুরোধে তালিকাভুক্ত করা যেতে পারে। পূর্ববর্তী উদাহরণের জন্য, যদি একজন ব্যবহারকারীর উভয় এক্সটেনশন ইনস্টল করা থাকে, তাহলে দুটি অনুরোধ একটি একক অনুরোধে একত্রিত হয়:

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

যদি একই আপডেট ইউআরএল ব্যবহার করে ইনস্টল করা এক্সটেনশনের সংখ্যা যথেষ্ট বড় হয় যে একটি GET অনুরোধ URL খুব দীর্ঘ (2000টি অক্ষর বা তার বেশি), আপডেট চেক প্রয়োজনে অতিরিক্ত GET অনুরোধগুলি ইস্যু করে।

উন্নত ব্যবহার: সর্বনিম্ন ব্রাউজার সংস্করণ

এক্সটেনশন সিস্টেমে আরও API যোগ করা হলে, একটি এক্সটেনশনের একটি আপডেট সংস্করণ যা শুধুমাত্র ব্রাউজারের নতুন সংস্করণের সাথে কাজ করবে তা প্রকাশ করা হতে পারে। গুগল ক্রোম নিজেই স্বয়ংক্রিয়ভাবে আপডেট হওয়া সত্ত্বেও, ব্যবহারকারীর সংখ্যার অধিকাংশই যে কোনো প্রদত্ত নতুন রিলিজে আপডেট হওয়ার কয়েক দিন সময় নিতে পারে। একটি প্রদত্ত আপডেট শুধুমাত্র একটি নির্দিষ্ট সংস্করণে বা তার চেয়ে উচ্চতর 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>

এটি নিশ্চিত করবে যে ব্যবহারকারীরা শুধুমাত্র Google Chrome 3.0.193.0 বা তার বেশি সংস্করণ চালালেই 2 সংস্করণে স্বয়ংক্রিয়ভাবে আপডেট হবে৷