בדף הזה מוסבר איך לפתור בעיות שקשורות לפקודה repo sync
ואיך לתקן אותן.
פתרון בעיות ברשת
בקטע הזה מפורטות כמה הצעות לפתרון בעיות ברשת שעלולות לגרום לסינכרון כושל.
שימוש באימות כדי למנוע מחסומי מכסות
כדי להגן על השרתים מפני שימוש מוגזם, כל כתובת IP שמשמשת לגישה למקור משויכת למכסה.
כשמשתפים כתובת IP עם משתמשים אחרים, למשל כשנכנסים למאגרי המקור מחוץ לחומת אש מסוג NAT, המכסות יכולות להופיע גם בדפוסים רגילים. לדוגמה, מכסה יכולה להופעל כשמספר משתמשים מסנכרנים לקוחות חדשים מאותה כתובת IP בפרק זמן קצר.
כדי להימנע מטריגר למכסות, אפשר להשתמש בגישה מאומתת, שבה לכל משתמש מוקצית מכסה נפרדת, ללא קשר לכתובת ה-IP.
כדי להפעיל גישה מאומתת:
יוצרים סיסמה באמצעות מחולל הסיסמאות.
מריצים את הפקודה הבאה כדי להמיר את הלקוח לשימוש באימות אוטומטי (בלי לשנות את ההסתעפות):
$ 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/
ולסנכרן את הלקוחות מול הרפליקת הזו:
יוצרים את המראה ומסנכרנים אותו:
$ 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
.כדי לסנכרן לקוחות מהרפליקה:
$ mkdir -p /usr/local/aosp/main $ cd /usr/local/aosp/main $ repo init -u /usr/local/aosp/mirror/platform/manifest.git $ repo sync
לבסוף, פועלים לפי הפקודות הבאות כדי לסנכרן את המראה מול השרת ואת הלקוח מול המראה:
$ 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
באופן מפורש.