Senkronizasyon sorunlarını giderme

Bu sayfada, repo sync komutuyla ilgili sorunların nasıl giderileceği ve düzeltileceği açıklanmaktadır.

Ağ sorunlarını düzeltme

Bu bölümde, başarılı olmayan senkronizasyonlara neden olabilecek ağ sorunlarını düzeltmek için çeşitli öneriler sunulmaktadır.

Kota engellerini aşmak için kimlik doğrulama kullanma

Sunucuları aşırı kullanıma karşı korumak için kaynağa erişmek üzere kullanılan her IP adresi bir kotayla ilişkilendirilir.

Bir IP adresi diğer kullanıcılarla paylaşıldığında (ör. kaynak depolarına bir NAT güvenlik duvarının ötesinden erişilirken) normal kalıplar için kotalar tetiklenebilir. Örneğin, aynı IP adresinden kısa süre içinde yeni istemciler senkronize eden birden fazla kullanıcı olduğunda kota tetiklenebilir.

Kotaların tetiklenmesini önlemek için, IP adresinden bağımsız olarak her kullanıcı için ayrı bir kota kullanan kimliği doğrulanmış erişimi kullanabilirsiniz.

Kimliği doğrulanmış erişimi etkinleştirmek için:

  1. Şifre oluşturucu ile şifre oluşturun.

  2. İstemcinizi otomatik kimlik doğrulama kullanacak şekilde dönüştürmek için aşağıdaki komutu çalıştırın (şubeyi değiştirmeden):

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

    /a/ dizin önekini kullandığınızda otomatik kimlik doğrulamanın tetikleneceğini unutmayın.

Proxy kullanımı için yapılandırma

Bazı kurumsal ortamlarda yaygın olduğu gibi, kaynağı proxy üzerinden indiriyorsanız şu komutları çalıştırarak Repo'nun kullanacağı proxy'yi açıkça belirttiğinizden emin olun:

$ 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

Bağlantı sorunlarını önlemek için TCP/IP ayarlarını düzenleme

Nadir olsa da Linux istemcileri, nesneler alınırken indirme işleminin ortasında takılma gibi bağlantı sorunları yaşayabilir. Bu sorunu düzeltmek için TCP/IP yığını ayarlarını düzenleyin veya paralel olmayan bağlantılar kullanın. TCP ayarını değiştirmek için kök erişiminiz olmalıdır. Ayarı değiştirmek için aşağıdaki komutları verin:

$ sudo sysctl -w net.ipv4.tcp_window_scaling=0
$ repo sync -j1

Ağ gecikmesini önlemek için yerel bir yansıtma kullanma

Birden fazla istemci kullanırken tüm sunucu içeriğinin yerel bir yansımasını oluşturabilir ve ağa erişmeden istemcileri bu yansımadan senkronize edebilirsiniz. ~/aosp-mirror/ konumunda yerel bir yansıtma oluşturmak ve istemcileri bu yansıtmayla senkronize etmek için aşağıdaki talimatları uygulayın:

  1. Yansıtmayı oluşturun ve senkronize edin:

    $ mkdir -p /usr/local/aosp/mirror
    $ cd /usr/local/aosp/mirror
    $ repo init -u https://android.googlesource.com/mirror/manifest --mirror
    

    Bu komutlar, /user/local/aosp/mirror içinde yerel bir yansıtma oluşturur ve repo init komutuyla --mirror işaretini kullanarak yansıtmayı başlatır.

  2. İstemcileri yansıtma sunucusundan senkronize edin:

    $ 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. Yansıtmayı sunucuyla, istemcileri ise yansıtmayla senkronize edin:

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

Yansıtmayı bir LAN sunucusunda depolamak ve NFS, SSH veya Git üzerinden erişmek mümkündür. Ayrıca, çıkarılabilir bir sürücüye kaydedip bu sürücüyü kullanıcılar veya makineler arasında aktarabilirsiniz.

Kısmi klon kullanma

Git 2.19 veya sonraki bir sürümü kullanıyorsanız düşük gecikmeli ağ sorunlarını gidermek için repo init işlemini gerçekleştirirken --partial-clone seçeneğini belirtin:

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

Bu komut, her şeyi indirmek için Repo'yu başlatmak yerine Git nesnelerini gerektiği gibi indirir.

403 veya 500 hatalarını (proxy sorunları) giderme

repo init veya repo sync komutları 403 ya da 500 hatasıyla başarısız olabilir. Bu hatalar genellikle büyük veri aktarımlarını işlemekte zorlanan HTTP proxy'leriyle ilgilidir.

Bu hatalar için belirli bir düzeltme olmasa da en son Python sürümünü kullanmak ve repo sync -j1 öğesini açıkça belirtmek bazen yardımcı olabilir.