แก้ไขปัญหาและแก้ไขปัญหาการซิงค์

หน้านี้อธิบายวิธีการแก้ไขปัญหาที่เกี่ยวข้องกับคำสั่ง 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
    

เป็นไปได้ที่จะจัดเก็บมิเรอร์บนเซิร์ฟเวอร์ LAN และเข้าถึงผ่าน NFS, SSH หรือ Git นอกจากนี้ยังสามารถจัดเก็บไว้ในไดรฟ์แบบถอดได้และส่งต่อไดรฟ์นั้นไปยังผู้ใช้หรือเครื่องต่างๆ

ใช้โคลนบางส่วน

หากคุณใช้ Git เวอร์ชัน 2.19 หรือใหม่กว่า ให้ระบุ --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 อย่างชัดเจนในบางครั้งอาจช่วยได้