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

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

الحزمة

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

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

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

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

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

إنشاء ملف ‎ .crx على الجهاز

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

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

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

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

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

سينشئ 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 أيّ رؤوس ملفات تعريف ارتباط مع طلبات بيان التحديث التلقائي، ويتجاهل أيّ رؤوس Set-Cookie في الردود على هذه الطلبات.

عنوان 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. يجب أن تتطابق مع قيمة "الإصدار" في ملف 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
    • رقم التعريف: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
    • الإصدار: "1.1"
  • الإضافة 2
    • المعرّف: "bbbbbbbbbbbbbbbbbbbbbbbbbbc bbbbbbbbbbbbbbbb
    • الإصدار: "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" إلى العنصر <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 إلا إذا كانوا يستخدمون الإصدار 3.0.193.0 من متصفّح Google Chrome أو إصدار أحدث.