تحديد المشاكل في المزامنة وحلّها

توضّح هذه الصفحة كيفية تحديد المشاكل وحلّها في ما يتعلّق بمحاولة تنفيذ الأمر repo sync.

إصلاح مشاكل الشبكة

يقدّم هذا القسم عدة اقتراحات لحلّ مشاكل الشبكة التي يمكن أن تؤدي إلى عدم نجاح عمليات المزامنة.

استخدام المصادقة لتجنُّب قيود الحصة

لحماية الخوادم من الاستخدام المفرط، يتم ربط كل عنوان IP المستخدَم للوصول إلى المصدر بحصة.

عند مشاركة عنوان 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 لتجنُّب مشاكل الاتصال

على الرغم من أنّه من النادر حدوث ذلك، يمكن أن يواجه عملاء Linux مشاكل في الاتصال، مثل التوقف في منتصف عمليات التنزيل أثناء تلقّي العناصر. لتحسين هذه المشكلة، عليك ضبط إعدادات حزمة 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
    

    تنشئ هذه الأوامر نسخة طبق الأصل محلية في /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
    

من الممكن تخزين النسخة المطابقة على خادم شبكة المنطقة المحلية والوصول إليها عبر NFS أو SSH أو Git. ومن الممكن أيضًا تخزينها على محرك أقراص قابل للإزالة وتمرير محرك الأقراص بين المستخدمين أو الأجهزة.

استخدام نسخة طبق الأصل جزئية

إذا كنت تستخدم الإصدار 2.19 من Git أو إصدارًا أحدث، حدِّد --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 (مشاكل الخادم الوكيل)

قد يتعذّر تنفيذ الأمرَين repo init أو repo sync مع ظهور خطأ 403 أو 500. في أغلب الأحيان، ترتبط هذه الأخطاء بخوادم وكيل HTTP التي تواجه صعوبة في التعامل مع عمليات نقل البيانات الكبيرة.

على الرغم من عدم توفّر حلّ محدّد لهذه الأخطاء، يمكن أن يساعد أحيانًا استخدام أحدث إصدار من Python واستخدام repo sync -j1 بشكل صريح.