На этой странице объясняется, как устранять неполадки и устранять проблемы, связанные с командой repo sync
.
Устранение проблем с сетью
В этом разделе представлено несколько рекомендаций по устранению сетевых проблем, которые могут привести к неудачной синхронизации.
Используйте аутентификацию, чтобы избежать барьеров квот
Чтобы защитить серверы от чрезмерного использования, каждый IP-адрес, используемый для доступа к источнику, связан с квотой.
При совместном использовании IP-адреса с другими пользователями, например, при доступе к исходным репозиториям из-за брандмауэра NAT, квоты могут срабатывать в обычных ситуациях. Например, квота может сработать, когда несколько пользователей синхронизируют новых клиентов с одного и того же IP-адреса в течение короткого периода времени.
Чтобы избежать срабатывания квот, можно использовать аутентифицированный доступ, при котором для каждого пользователя, независимо от IP-адреса, используется отдельная квота.
Чтобы включить аутентифицированный доступ:
Создайте пароль с помощью генератора паролей .
Выполните следующую команду, чтобы перевести клиент на использование автоматической аутентификации (без изменения ветки):
$ 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 необходимы права 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 -b android-latest-release $ repo sync
Синхронизируем зеркало с сервером и синхронизируем клиентов с зеркалом:
$ cd /usr/local/aosp/mirror</code> $ repo sync $ cd /usr/local/aosp/android-latest-release $ repo sync
Зеркало можно разместить на локальном сервере и получить к нему доступ по NFS, SSH или Git. Также можно разместить его на съёмном диске и передавать его между пользователями или машинами.
Использовать частичный клон
Если вы используете Git версии 2.19 или более поздней, укажите --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
.