تثبيت الإضافات على نظام التشغيل Linux

لا يمكن تثبيت الإضافات التي تتم استضافتها خارج سوق Chrome الإلكتروني إلا من خلال مستخدمي Linux. توضِّح هذه المقالة طريقة تجميع ملفات .crx واستضافتها وتعديلها من خادم شخصي. وفي حال توزيع إضافة أو مظهر فقط من خلال سوق Chrome الإلكتروني، يمكنك مراجعة استضافة وتحديث Webstore.

حزمة محتوى

يتم عرض الإضافات والمظاهر كملفات .crx. عند التحميل من خلال لوحة بيانات مطوّري Chrome، تنشئ لوحة البيانات ملف .crx تلقائيًا. إذا تم نشر ملف .crx على خادم شخصي، يجب إنشاؤه محليًا أو تنزيله من "سوق Chrome الإلكتروني".

تنزيل crx .من "سوق Chrome الإلكتروني"

في حال استضافة إضافة على "سوق Chrome الإلكتروني"، يمكن تنزيل الملف .crx من "لوحة بيانات المطوّر". حدِّد موقع الإضافة ضمن "بياناتك" وانقر على "مزيد من المعلومات". في النافذة المنبثقة، انقر على رابط main.crx الأزرق لتنزيل التطبيق.

تنزيل .crx من "لوحة بيانات المطوّر"

يمكن استضافة الملف الذي تم تنزيله على خادم شخصي. هذه هي الطريقة الأكثر أمانًا لاستضافة إضافة محليًا، حيث سيتم توقيع محتوى الإضافة من خلال "سوق Chrome الإلكتروني". يساعد ذلك في اكتشاف الهجمات المحتملة والتلاعب.

إنشاء crx .محليًا

يتم تحويل أدلة الإضافات إلى ملفات .crx في صفحة "إدارة الإضافات". انتقِل إلى chrome://extensions/ في مربّع ominibox، أو انقر على قائمة Chrome ومرِّر مؤشر الماوس فوق "مزيد من الأدوات" ثم اختَر "الإضافات".

في صفحة إدارة الإضافات، فعِّل "وضع مطوّر البرامج" من خلال النقر على مفتاح التبديل بجانب وضع مطوّر البرامج. بعد ذلك، اختَر زر إضافة حزمة.

يتم التحقّق من "وضع مطوّر البرامج" ثم النقر على "حزمة الإضافة"

حدِّد المسار إلى مجلد الإضافة في حقل الدليل الجذر للإضافة، ثم انقر على زر إضافة حزمة. تجاهل حقل المفتاح الخاص لحزمة المرة الأولى.

حدِّد مسار الإضافة ثم انقر على "حزمة الإضافة"

سينشئ Chrome ملفَين، ملف .crx وملف .pem يحتوي على المفتاح الخاص للإضافة.

ملفات الإضافات المجمَّعة

لا تفقد المفتاح الخاص. احتفظ بملف .pem في مكان سري وآمن، حيث سيحتاج إلى تحديث الإضافة.

تحديث حزمة crx.

يمكنك تعديل ملف .crx للإضافة من خلال زيادة رقم الإصدار في manifest.json.

{
  ...
  "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"
    • "غير معروف/غير معروف"
    • "تطبيق/غير معروف"
    • "*/*"

السبب الأكثر شيوعًا لتعذُّر التعرّف على ملف قابل للتثبيت هو أنّ الخادم يرسل العنوان X-Content-Type-Options: nosniff. السبب الثاني الأكثر شيوعًا هو أن الخادم يرسل نوع محتوى غير معروف، وهو نوع غير موجود في القائمة السابقة. لحلّ مشكلة في عنوان HTTP، يجب تغيير إعدادات الخادم أو محاولة استضافة ملف .crx على خادم آخر.

جارٍ تعديل الحالة

يتحقّق المتصفّح كل بضع ساعات من الإضافات المثبّتة بحثًا عن عنوان URL للتحديث. ولكل محتوى منها، يتم تقديم طلب إلى عنوان URL هذا للبحث عن ملف بيان التحديث بتنسيق XML.

  • المحتوى المعروض من خلال البحث عن التحديثات هو مستند XML بيان التحديث يعرض أحدث إصدار من الإضافة.

إذا كان بيان التحديث يشير إلى إصدار أحدث من الذي تم تثبيته، ينزّل المتصفّح الإصدار الجديد ويثبّته. وكما هي الحال في التعديلات اليدوية، يجب توقيع ملف .crx الجديد باستخدام المفتاح الخاص نفسه المستخدَم في الإصدار المثبَّت حاليًا.

ملاحظة: من أجل الحفاظ على خصوصية المستخدم، لا يرسل Google Chrome أي عناوين لملفات تعريف الارتباط مع طلبات بيان التحديث التلقائي، كما يتجاهل أي عناوين يتم ضبطها لملفات تعريف الارتباط في الردود على هذه الطلبات.

تعديل عنوان URL

يجب أن تتضمّن الإضافات المستضافة على الخوادم خارج "سوق Chrome الإلكتروني" الحقل update_url في ملف manifest.json الخاص بها.

{
  "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، وهي البنية الأساسية للتحديث في Google. يستخدم نظام الإضافات السمات التالية للعنصرَين <app> و<updatecheck> في بيان التحديث:

appidيتم إنشاء رقم تعريف الإضافة استنادًا إلى تجزئة المفتاح العام، كما هو موضّح في الحزمة. يتم عرض رقم تعريف الإضافة في صفحة إدارة الإضافات.
قاعدة الترميزعنوان URL يستخدم HTTPS يؤدي إلى ملف .crx.
إصداريستخدمها العميل لتحديد ما إذا كان يجب تنزيل ملف .crx الذي تم تحديده من قِبل codebase. ويجب أن تتطابق مع قيمة "version" في ملف manifest.json الخاص بملف .crx.

قد يحتوي ملف XML لبيان التحديث على معلومات حول إضافات متعددة من خلال تضمين عناصر <app> متعددة.

الاختبار

معدّل البحث عن التحديثات التلقائي هو عدة ساعات، ولكن يمكن فرض تعديل باستخدام زر تحديث الإضافات الآن في صفحة "إدارة الإضافات".

تحديث الإضافات الآن

سيؤدي ذلك إلى بدء عمليات التحقّق من جميع الإضافات المثبّتة.

الاستخدام المتقدم: معلَمات الطلب

تم تصميم آلية التحديث التلقائي الأساسية لتيسير العمل من جانب الخادم بالطريقة نفسها التي يتم بها إسقاط ملف XML ثابت على أي خادم ويب عادي، مثل Apache، وتعديل ملف XML هذا عند إطلاق إصدارات جديدة من الإضافات.

قد يتحقّق المطوّرون الذين يستضيفون إضافات متعدّدة من مَعلمات الطلب، والتي تشير إلى رقم تعريف الإضافة وإصدارها في طلب التحديث. يؤدي تضمين هذه المَعلمات إلى السماح بالتحديث للإضافات من عنوان URL نفسه الذي يُشغِّل رمزًا ديناميكيًا من جهة الخادم، بدلاً من ملف XML ثابت.

يكون تنسيق معلمات الطلب كما يلي:

?x=EXTENSION_DATA

عندما تكون EXTENSION_DATA سلسلة بتنسيق عنوان URL مرمّزة بالتنسيق التالي:

id=EXTENSION\_ID&v=EXTENSION\_VERSION

على سبيل المثال، توجِّه إضافتان إلى عنوان URL نفسه للتحديث (https://test.com/extension_updates.php):

  • الإضافة 1
    • المعرّف: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
    • الإصدار: "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

يمكن إدراج عدة إضافات في طلب واحد لكل عنوان URL فريد للتحديث. بالنسبة للمثال أعلاه، إذا كان المستخدم قد ثبت كلتا الإضافتين، يتم دمج الطلبين في طلب واحد:

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

إذا كان عدد الإضافات المثبّتة التي تستخدم عنوان URL نفسه للتحديث كبيرًا بما يكفي لأن يكون عنوان URL لطلب GET طويلاً للغاية (أكثر من 2000 حرف أو نحو ذلك)، ستُصدر عملية التحقق من التحديث طلبات GET إضافية عند الضرورة.

الاستخدام المتقدم: الحد الأدنى لإصدار المتصفح

مع إضافة المزيد من واجهات برمجة التطبيقات إلى نظام الإضافات، قد يتم إطلاق إصدار محدَّث من إحدى الإضافات التي لن تعمل إلا مع الإصدارات الأحدث من المتصفّح. بينما يتم تحديث Google Chrome نفسه تلقائيًا، قد يستغرق الأمر بضعة أيام قبل تحديث غالبية قاعدة المستخدمين إلى أي إصدار جديد معين. لضمان تطبيق تحديث معيَّن فقط على إصدارات Google Chrome في إصدار معيّن أو الإصدارات الأحدث منه، أضِف السمة "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 إلا إذا كانوا يستخدمون الإصدار 3.0.193.0 أو إصدارًا أحدث من Google Chrome.