התקנת תוספים ב-Linux

רק משתמשי Linux יכולים להתקין תוספים שמתארחים מחוץ לחנות האינטרנט של Chrome. במאמר הזה נסביר איך לארוז, לארח ולעדכן קובצי .crx משרת אישי. אם אתם מפיצים תוסף או עיצוב רק דרך חנות האינטרנט של Chrome, תוכלו לקרוא את המאמר אירוח ועדכון של חנות אינטרנט.

אריזה

תוספים ועיצובים מוצגים כקובצי .crx. כשמעלים דרך מרכז השליטה למפתחים של Chrome , מרכז השליטה יוצר את הקובץ .crx באופן אוטומטי. אם הקובץ פורסם בשרת אישי, צריך ליצור את הקובץ .crx באופן מקומי או להוריד אותו מחנות האינטרנט של Chrome.

הורדת .crx מחנות האינטרנט של Chrome

אם תוסף מתארח בחנות האינטרנט של Chrome, אפשר להוריד את הקובץ .crx ממרכז השליטה למפתחים. מאתרים את התוסף בקטע 'הרישומים שלך' ולוחצים על 'מידע נוסף'. בחלון הקופץ, לוחצים על הקישור הכחול main.crx כדי להוריד אותו.

הורדת .crx ממרכז השליטה למפתחים

הקובץ שהורדתם יכול להתארח בשרת אישי. זו הדרך הבטוחה ביותר לארח תוסף באופן מקומי, כי התוכן של התוסף יהיה חתום על ידי חנות האינטרנט של Chrome. כך אפשר לזהות התקפות פוטנציאליות ופגיעה.

יצירת .crx באופן מקומי

ספריות תוספים מומרות לקובצי .crx בדף ניהול התוספים. מנווטים אל chrome://extensions/ בתיבה האוטומטית, או לוחצים על תפריט Chrome, מעבירים את העכבר מעל 'כלים נוספים' ובוחרים באפשרות 'תוספים'.

בדף ניהול התוספים, מפעילים את 'מצב פיתוח' על ידי לחיצה על המתג שלצד מצב פיתוח. לאחר מכן לוחצים על הלחצן PACK Extension (תוסף חבילה).

מצב פיתוח מסומן ולאחר מכן לוחצים על 'חבילת תוסף'

מציינים את הנתיב לתיקייה של התוסף בשדה של ספריית הבסיס של התוסף, ואז לוחצים על הלחצן PACK Extension (חבילת תוסף). מתעלמים מהשדה מפתח פרטי כשמדובר בחבילה בפעם הראשונה.

יש לציין נתיב תוסף וללחוץ על 'חבילת תוסף'

Chrome ייצור שני קבצים, קובץ .crx וקובץ .pem, שמכיל את המפתח הפרטי של התוסף.

קובצי תוספים ארוזים

לא כדאי לאבד את המפתח הפרטי! צריך לשמור את הקובץ .pem בסוד ומאובטח, כי יהיה צריך לעדכן את התוסף.

עדכון חבילת .crx

צריך לעדכן את קובץ .crx של התוסף על ידי הגדלת מספר הגרסה ב-manifest.json.

{
  ...
  "version": "1.5",
  ...
  }
}
{
  ...
  "version": "1.6",
  ...
  }
}

חוזרים אל דף ניהול התוספים ולוחצים על הלחצן תוסף PACK. מציינים את הנתיב לספריית התוספים ואת המיקום של המפתח הפרטי.

עדכון קובצי תוספים

בדף יצוין הנתיב לתוסף הארוז המעודכן.

עדכון קובצי תוספים

חבילה דרך שורת פקודה

תוספי חבילה בשורת הפקודה על ידי הפעלה של 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"
    • "לא ידוע/לא ידוע"
    • "application/לא ידוע"
    • "*/*"

הסיבה הנפוצה ביותר לכישלון בזיהוי קובץ שניתן להתקנה היא שהשרת שולח את הכותרת X-Content-Type-Options: nosniff. הסיבה השנייה הנפוצה ביותר היא שהשרת שולח סוג תוכן לא ידוע, שלא מופיע ברשימה הקודמת. כדי לפתור בעיה בכותרת HTTP, צריך לשנות את הגדרות השרת או לנסות לארח את הקובץ .crx בשרת אחר.

מתבצע עדכון

כל כמה שעות, הדפדפן בודק את התוספים המותקנים כדי למצוא כתובת URL לעדכון. לכל קובץ, הוא שולח בקשה לכתובת ה-URL הזו ומחפש קובץ XML לעדכון.

  • התוכן שמוחזר מבדיקת עדכון הוא מסמך XML של מניפסט עדכון שבו מופיעה הגרסה האחרונה של התוסף.

אם במניפסט העדכון מצוינת גרסה עדכנית יותר מזו שמותקנת, הדפדפן יוריד ויתקין את הגרסה החדשה. כמו בעדכונים ידניים, צריך לחתום על קובץ .crx החדש באמצעות אותו מפתח פרטי כמו בגרסה הנוכחית שכבר מותקנת.

הערה:כדי לשמור על פרטיות המשתמשים, Google Chrome לא שולח כותרות של קובצי cookie עם בקשות מניפסט לעדכון אוטומטי, ומתעלם מכותרות שהוגדרו בקובצי 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מזהה התוסף נוצר על סמך גיבוב של המפתח הציבורי, כפי שמתואר באריזה. מזהה של תוסף מוצג בדף ניהול התוספים
codebaseכתובת URL מסוג HTTPS לקובץ .crx.
גרסההלקוח משמש את הלקוח כדי לקבוע אם עליו להוריד את הקובץ .crx שצוין על ידי codebase. היא צריכה להתאים לערך של 'גרסה' בקובץ manifest.json של הקובץ .crx.

קובץ ה-XML של המניפסט לעדכון עשוי לכלול מידע על מספר תוספים על ידי הכללת רכיבי <app> מרובים.

בדיקה

תדירות בדיקת העדכונים שמוגדרת כברירת מחדל היא כמה שעות, אבל ניתן לאלץ עדכון באמצעות הלחצן עדכן תוספים עכשיו בדף ניהול התוספים.

עדכון תוספים

הפעולה הזו תתחיל לבדוק את כל התוספים שהותקנו.

שימוש מתקדם: פרמטרים של בקשה

מנגנון העדכון האוטומטי הבסיסי נועד להקל על העבודה בצד השרת – פשוט משחררים קובץ XML סטטי בכל שרת אינטרנט פשוט כמו Apache, ומעדכנים את קובץ ה-XML בכל פעם שמתפרסמות גרסאות חדשות של תוספים.

מפתחים המארחים מספר תוספים עשויים לבדוק את הפרמטרים של הבקשה, שמציינים את מזהה התוסף והגרסה שלו בבקשת העדכון. הוספת הפרמטרים האלה מאפשרת לתוספים להתעדכן מאותה כתובת URL שבה מריצים קוד דינמי בצד השרת במקום מקובץ XML סטטי.

הפורמט של הפרמטרים של הבקשה הוא:

?x=EXTENSION_DATA

כאשר EXTENSION_DATA הוא מחרוזת מקודדת של הפורמט:

id=EXTENSION\_ID&v=EXTENSION\_VERSION

לדוגמה, שני תוספים מפנים לאותה כתובת URL לעדכון (https://test.com/extension_updates.php):

  • תוסף 1
    • מזהה: "aaaaaaaaaaaaaaaaaaaaaaaaaaaa"
    • גרסה: "1.1"
  • תוסף 2
    • מזהה: "bbbbbbbbbbbbbbbbbbbbbbbbbbbbb שניתן באתר '
    • גרסה: "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 נוספות לפי הצורך.

שימוש מתקדם: גרסת דפדפן מינימלית

ככל שנוספים עוד ממשקי API למערכת התוספים, ייתכן שתושק גרסה מעודכנת של תוסף שתעבוד רק עם גרסאות חדשות יותר של הדפדפן. אמנם 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 רק אם מותקנת במכשיר שלהם Google Chrome מגרסה 3.0.193.0 ואילך.