동기화 문제 해결

이 페이지에서는 repo sync 명령어와 관련된 문제를 해결하는 방법을 설명합니다.

네트워크 문제 해결

이 섹션에서는 동기화 실패를 야기할 수 있는 네트워크 문제를 해결하기 위해 여러 제안사항을 제공합니다.

인증을 사용하여 할당량 배리어 방지

서버의 과도한 사용을 방지하기 위해 소스에 액세스하는 데 사용하는 각 IP 주소는 할당량과 연결됩니다.

NAT 방화벽을 벗어나 소스 저장소에 액세스할 때 등 다른 사용자와 IP 주소를 공유할 때는 일반적인 패턴에 대해서 할당량이 트리거될 수 있습니다. 예를 들어 여러 사용자가 단기간 내에 동일한 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에 로컬 미러를 만들고 repo init 명령어와 함께 --mirror 플래그를 사용하여 미러를 초기화합니다.

  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
    

LAN 서버에 미러를 저장하고 NFS, SSH 또는 Git을 통해 액세스할 수 있습니다. 또한 이동식 드라이브에 저장하고 사용자나 컴퓨터 간에 드라이브를 전달할 수도 있습니다.

부분 클론 사용

Git 버전 2.19 이상을 사용한다면 repo init를 실행할 때 --partial-clone을 지정하여 지연 시간이 짧은 네트워크 문제를 해결하세요.

  $ 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을 명시적으로 사용하면 도움이 될 수 있습니다.