หน้านี้อธิบายวิธีการแก้ไขปัญหาที่เกี่ยวข้องกับคำสั่ง 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 ได้ หากต้องการแก้ไขการตั้งค่า ให้ออกคำสั่งต่อไปนี้:
$ 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 $ repo sync
สุดท้าย ทำตามคำสั่งเหล่านี้เพื่อซิงค์มิเรอร์กับเซิร์ฟเวอร์ และซิงค์ไคลเอ็นต์กับมิเรอร์:
$ 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
อย่างชัดเจนในบางครั้งอาจช่วยได้