การแก้ปัญหาเกี่ยวกับการซิงค์

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

ใช้มิเรอร์ในเครื่องเพื่อหลีกเลี่ยงเวลาในการตอบสนองของเครือข่าย

เมื่อใช้ไคลเอ็นต์หลายตัว คุณจะสร้างมิเรอร์ในเครื่องของเนื้อหาเซิร์ฟเวอร์ทั้งหมด และซิงค์ไคลเอ็นต์จากมิเรอร์ดังกล่าวได้โดยไม่ต้องเข้าถึงเครือข่าย ทําตามวิธีการต่อไปนี้เพื่อสร้างมิเรอร์ในเครื่องที่ at ~/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 และเริ่มต้นมิเรอร์โดยใช้ Flag --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

คำสั่งนี้จะดาวน์โหลดออบเจ็กต์ Git ตามที่จำเป็นแทนที่จะเริ่มต้น Repo เพื่อดาวน์โหลดทุกอย่าง

แก้ไขปัญหาการซิงค์ที่เฉพาะเจาะจง

หน้านี้จะแสดงรายละเอียดปัญหาที่ทราบซึ่งคุณอาจพบขณะพยายามซิงค์ซอร์สโค้ด Android

คำสั่งดำเนินการไม่สำเร็จโดยมีข้อผิดพลาด 403 หรือ 500 (ปัญหาเกี่ยวกับพร็อกซี)

คำสั่ง repo init หรือ repo sync อาจดำเนินการไม่สำเร็จพร้อมข้อผิดพลาด 403 หรือ 500 โดยส่วนใหญ่ข้อผิดพลาดเหล่านี้เกี่ยวข้องกับพร็อกซี HTTP ที่จัดการการโอนข้อมูลขนาดใหญ่ได้ไม่ดี

แม้ว่าจะไม่มีวิธีแก้ไขที่เจาะจงสำหรับข้อผิดพลาดเหล่านี้ แต่บางครั้งการใช้ Python เวอร์ชันล่าสุดและใช้ repo sync -j1 อย่างชัดแจ้งอาจช่วยได้