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

توضّح هذه الصفحة كيفية تحديد المشاكل المتعلّقة بالأمر 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 -b android-latest-release
    $ repo sync
    
  3. مزامنة النسخة المطابقة مع الخادم ومزامنة الأجهزة مع النسخة المطابقة:

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

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

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

إذا كنت تستخدم الإصدار 2.19 أو إصدارًا أحدث من Git، حدِّد --partial-clone عند تنفيذ repo init للتغلّب على أي مشاكل في الشبكة ذات معدل الاستجابة المنخفض:

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

بدلاً من تهيئة Repo لتنزيل كل شيء، ينزّل هذا الأمر عناصر Git عند الحاجة إليها.

تحديد المشاكل وحلّها في الخطأين 403 أو 500 (المشاكل المتعلّقة بالخادم الوكيل)

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

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