פתרון בעיות ופתרון בעיות בסנכרון

בדף הזה מוסבר איך לפתור בעיות שקשורות לפקודה repo sync ואיך לתקן אותן.

פתרון בעיות ברשת

בקטע הזה מפורטות כמה הצעות לפתרון בעיות ברשת שעלולות לגרום לסינכרון כושל.

שימוש באימות כדי למנוע מחסומי מכסות

כדי להגן על השרתים מפני שימוש מוגזם, כל כתובת IP שמשמשת לגישה למקור משויכת למכסה.

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

כדי להימנע מטריגר למכסות, אפשר להשתמש בגישה מאומתת, שבה לכל משתמש מוקצית מכסה נפרדת, ללא קשר לכתובת ה-IP.

כדי להפעיל גישה מאומתת:

  1. יוצרים סיסמה באמצעות מחולל הסיסמאות.

  2. מריצים את הפקודה הבאה כדי להמיר את הלקוח לשימוש באימות אוטומטי (בלי לשנות את ההסתעפות):

    $ repo init -u https://android.googlesource.com/a/platform/manifest
    

    חשוב לזכור שתחילית הספרייה /a/ מפעילה אימות אוטומטי.

הגדרה לשימוש בשרת proxy

אם אתם מורידים את המקור דרך שרת proxy, כפי שנעשה בדרך כלל בסביבות ארגוניות מסוימות, עליכם לציין במפורש שרת proxy ש-Repo ישתמש בו. לשם כך, מריצים את הפקודות הבאות:

$ export HTTP_PROXY=http://proxy_user_id:proxy_password@proxy_server:proxy_port
$ export HTTPS_PROXY=http://proxy_user_id:proxy_password@proxy_server:proxy_port

שינוי ההגדרות של TCP/IP כדי למנוע בעיות בקישוריות

למרות שזה קורה לעיתים נדירות, לקוחות Linux עלולים להיתקל בבעיות קישוריות, כמו תקיעות באמצע ההורדות בזמן קבלת אובייקטים. כדי לשפר את הבעיה, צריך לשנות את ההגדרות של סטאק ה-TCP/IP או להשתמש בחיבורים לא מקבילים. כדי לשנות את הגדרת ה-TCP, צריכה להיות לכם הרשאת root. כדי לשנות את ההגדרה, מריצים את הפקודות הבאות:

$ sudo sysctl -w net.ipv4.tcp_window_scaling=0
$ repo sync -j1

שימוש במראה מקומית כדי למנוע זמן אחזור של רשת

כשמשתמשים בכמה לקוחות, אפשר ליצור רפליקת מקומית של כל תוכן השרת ולסנכרן לקוחות מהרפליקה הזו בלי לגשת לרשת. כדי ליצור רפליקת מקומית ב-~/aosp-mirror/ ולסנכרן את הלקוחות מול הרפליקת הזו:

  1. יוצרים את המראה ומסנכרנים אותו:

    $ mkdir -p /usr/local/aosp/mirror
    $ cd /usr/local/aosp/mirror
    $ repo init -u https://android.googlesource.com/mirror/manifest --mirror
    

    הפקודות האלה יוצרות רפליקת מראה מקומית ב-/user/local/aosp/mirror ומפעילות את המראה באמצעות הדגל --mirror עם הפקודה repo init.

  2. כדי לסנכרן לקוחות מהרפליקה:

    $ mkdir -p /usr/local/aosp/main
    $ cd /usr/local/aosp/main
    $ repo init -u /usr/local/aosp/mirror/platform/manifest.git
    $ repo sync
    
  3. לבסוף, פועלים לפי הפקודות הבאות כדי לסנכרן את המראה מול השרת ואת הלקוח מול המראה:

    $ cd /usr/local/aosp/mirror</code>
    $ repo sync
    $ cd /usr/local/aosp/main
    $ repo sync
    

אפשר לאחסן את המראה בשרת LAN ולגשת אליו דרך NFS,‏ SSH או Git. אפשר גם לאחסן אותו בכונן נשלף ולהעביר את הכונן בין משתמשים או מכונות.

שימוש בעותק מפוצל

אם אתם משתמשים ב-Git בגרסה 2.19 ואילך, צריך לציין את --partial-clone כשמבצעים את repo init כדי להתגבר על בעיות ברשת עם זמן אחזור קצר:

  $ repo init -u https://android.googlesource.com/platform/manifest -b main --partial-clone --clone-filter=blob:limit=10M

במקום לאתחל את Repo כדי להוריד את הכל, הפקודה הזו מאפשרת להוריד אובייקטים של Git לפי הצורך.

פתרון בעיות ספציפיות בסנכרון

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

פקודות נכשלות עם השגיאה 403 או 500 (בעיות בשרת proxy)

יכול להיות שהפקודות repo init או repo sync ייכשלו עם שגיאה 403 או 500. ברוב המקרים השגיאות האלה קשורות לשרתי proxy ל-HTTP שמתקשים לטפל בהעברות גדולות של נתונים.

אין תיקון ספציפי לשגיאות האלה, אבל לפעמים כדאי להשתמש בגרסה העדכנית ביותר של Python ולהשתמש ב-repo sync -j1 באופן מפורש.