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

בדף הזה נסביר איך לפתור בעיות שקשורות לנושאים הבאים הפקודה 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 יכולים לפעמים לעזור.