عیب یابی و رفع مشکلات همگام سازی

این صفحه نحوه عیب‌یابی و رفع مشکلات مربوط به دستور repo sync را توضیح می‌دهد.

رفع مشکلات شبکه

این بخش چندین پیشنهاد برای رفع مشکلات شبکه که می‌توانند باعث همگام‌سازی ناموفق شوند، ارائه می‌دهد.

استفاده از احراز هویت برای جلوگیری از موانع سهمیه‌بندی

برای محافظت از سرورها در برابر استفاده بیش از حد، هر آدرس IP که برای دسترسی به منبع استفاده می‌شود، با یک سهمیه (Quota) مرتبط است.

هنگام اشتراک‌گذاری یک آدرس IP با سایر کاربران، مانند هنگام دسترسی به مخازن منبع از خارج از فایروال NAT، سهمیه‌بندی می‌تواند برای الگوهای عادی فعال شود. به عنوان مثال، سهمیه‌بندی می‌تواند زمانی فعال شود که چندین کاربر در یک دوره کوتاه، کلاینت‌های جدید را از یک آدرس IP یکسان همگام‌سازی کنند.

برای جلوگیری از سهمیه‌بندی، می‌توانید از دسترسی احراز هویت‌شده استفاده کنید که صرف نظر از آدرس IP، برای هر کاربر سهمیه جداگانه‌ای در نظر می‌گیرد.

برای فعال کردن دسترسی احراز هویت شده:

  1. با استفاده از ابزار تولید رمز عبور، یک رمز عبور ایجاد کنید.

  2. دستور زیر را برای تبدیل کلاینت خود به استفاده از احراز هویت خودکار (بدون تغییر شاخه) اجرا کنید:

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

    توجه داشته باشید که پیشوند دایرکتوری /a/ باعث احراز هویت خودکار می‌شود.

پیکربندی برای استفاده از پروکسی

اگر در حال دانلود سورس از پشت یک پروکسی هستید، همانطور که در برخی از محیط‌های شرکتی رایج است، مطمئن شوید که با اجرای این دستورات، به صراحت یک پروکسی برای استفاده 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 را برای جلوگیری از مشکلات اتصال تنظیم کنید

اگرچه این مورد نادر است، اما کلاینت‌های لینوکس می‌توانند مشکلات اتصال، مانند گیر کردن در وسط دانلودها هنگام دریافت اشیاء را تجربه کنند. برای بهبود این مشکل، تنظیمات پشته TCP/IP را تنظیم کنید یا از اتصالات غیرموازی استفاده کنید. برای تغییر تنظیمات TCP باید دسترسی ریشه داشته باشید. برای تغییر تنظیمات، دستورات زیر را اجرا کنید:

$ 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
    

    این دستورات یک mirror محلی در /user/local/aosp/mirror ایجاد می‌کنند و 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 -b android-latest-release
    $ repo sync
    
  3. همگام‌سازی آینه با سرور و همگام‌سازی کلاینت‌ها با آینه:

    $ cd /usr/local/aosp/mirror
    $ repo sync
    $ cd /usr/local/aosp/android-latest-release
    $ repo sync
    

می‌توان mirror را روی یک سرور LAN ذخیره کرد و از طریق NFS، SSH یا Git به آن دسترسی داشت. همچنین می‌توان آن را روی یک درایو قابل جابجایی ذخیره کرد و آن درایو را بین کاربران یا ماشین‌ها رد و بدل کرد.

از یک کلون جزئی استفاده کنید

اگر از نسخه ۲.۱۹ یا بالاتر گیت استفاده می‌کنید، هنگام اجرای repo init ، از --partial-clone استفاده کنید تا بر هرگونه مشکل شبکه با تأخیر کم غلبه کنید:

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

به جای اینکه Repo را برای دانلود همه چیز مقداردهی اولیه کند، این دستور اشیاء Git را در صورت نیاز دانلود می‌کند.

عیب‌یابی خطاهای ۴۰۳ یا ۵۰۰ (مشکلات پروکسی)

دستورات repo init یا repo sync ممکن است با خطای ۴۰۳ یا ۵۰۰ مواجه شوند. اغلب این خطاها مربوط به پروکسی‌های HTTP هستند که برای مدیریت انتقال داده‌های بزرگ تلاش می‌کنند.

اگرچه راه حل خاصی برای این خطاها وجود ندارد، اما استفاده از جدیدترین نسخه پایتون و استفاده صریح از repo sync -j1 گاهی اوقات می‌تواند کمک کند.