الاستضافة الذاتية في نظام التشغيل Linux

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

الحزمة

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

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

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

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

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

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

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

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

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

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

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

وسينشئ 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"
    • "unknown/unknown"
    • "application/unknown"
    • "\*/\*"

إنّ السبب الأكثر شيوعًا لتعذُّر التعرّف على ملف قابل للتثبيت هو أنّ الخادم يرسل العنوان 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" في ملف .crx الملف manifest.json.

قد يحتوي ملف بيان التحديث بتنسيق 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
    • المعرّف: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
    • الإصدار: "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 طويل جدًا (أكثر من 2,000 حرف أو نحو ذلك)، ستُصدر عملية التحقق من التحديثات طلبات GET إضافية عند الضرورة.

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

مع إضافة المزيد من واجهات برمجة التطبيقات إلى نظام الإضافات، قد يتم إطلاق إصدار محدَّث من الإضافة التي سيعمل فقط مع الإصدارات الأحدث من المتصفّح. بينما يتم تحديث 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>

سيضمن ذلك التحديث التلقائي للمستخدمين إلى الإصدار 2 فقط في حال تشغيل Google Chrome 3.0.193.0 أو إصدار أحدث.