Skip to Content
Building Osซอฟต์แวร์ที่กำหนดเองจากแหล่งเก็บข้อมูลต้นทาง

ซอฟต์แวร์ที่กำหนดเองจากแหล่งเก็บข้อมูลต้นทาง

สูตร OpenFactory สามารถอ้างอิงพื้นที่เก็บข้อมูล Git เป็นอินพุตแพ็คเกจแบบกำหนดเองบนตัวสร้างอิมเมจที่รองรับ นี่เป็นเส้นทางที่มีความอ่อนไหวต่อห่วงโซ่อุปทาน: พื้นที่เก็บข้อมูล การแก้ไขที่แก้ไขแล้ว คำแนะนำในการบรรจุ การสร้างการขึ้นต่อกัน และแพ็คเกจที่ผลิตทั้งหมดจำเป็นต้องมีการตรวจสอบ

การสนับสนุนเป็นเป้าหมายเฉพาะ การสร้างแพ็คเกจซอร์สถูกปฏิเสธสำหรับผู้สร้างบางราย รวมถึงเส้นทาง Raspberry Pi และ Proxmox ปัจจุบัน ยืนยันความพร้อมใช้งานในสูตรมาตรฐานและแผนการสร้างก่อนที่จะสัญญาว่าจะผลิตบรรจุภัณฑ์

รูปทรงสูตร

รายการแพ็คเกจแบบกำหนดเองอยู่ภายใต้ os.custom_packages:

{ "os": { "custom_packages": [ { "name": "my-agent", "git_url": "https://github.com/example/my-agent.git", "branch": "release-1.x" } ] } }

สคีมายอมรับชื่อสาขา ไม่ใช่ฟิลด์คอมมิตที่ไม่เปลี่ยนรูป สำหรับรุ่นที่มีการควบคุม ให้บันทึกการคอมมิตที่แน่นอนซึ่งได้รับการแก้ไขโดยบิลด์ และทำให้คอมมิตนั้นเป็นส่วนหนึ่งของแหล่งที่มาที่เก็บไว้ สาขาที่ย้ายเพียงอย่างเดียวไม่สามารถทำซ้ำอินพุตได้

เตรียมพื้นที่เก็บข้อมูล

เส้นทางแพ็กเกจปัจจุบันคาดว่าข้อมูลเมตาของบรรจุภัณฑ์ดั้งเดิมจะเหมาะสมกับเป้าหมาย ตัวอย่างทั่วไปคือไดเร็กทอรี Debian debian/ หรือข้อมูลจำเพาะ RPM ลักษณะการทำงานของตัวสร้างที่แน่นอนและเวอร์ชันเป้าหมายที่รองรับสามารถเปลี่ยนแปลงได้ ดังนั้น ตรวจสอบแพ็คเกจขั้นต่ำในสภาพแวดล้อมที่ใช้งาน แทนที่จะอาศัยตารางความเข้ากันได้แบบคงที่

สำหรับบรรจุภัณฑ์ Debian ให้ตรวจสอบอย่างน้อย:

  • debian/control สำหรับแหล่งที่มา/ตัวตนไบนารีและการขึ้นต่อกัน
  • debian/changelog สำหรับเวอร์ชันแพ็คเกจ
  • debian/rules และสคริปต์ผู้ดูแลปฏิบัติการอื่น ๆ
  • ติดตั้งรายการและหน่วย systemd และ
  • การออกใบอนุญาตและการรวมเนื้อหาของบุคคลที่สาม

สำหรับแพ็คเกจ RPM ให้ตรวจสอบแหล่งที่มาของข้อมูลจำเพาะ ข้อกำหนดในการสร้าง สคริปต์เล็ต รายการไฟล์ และข้อมูลเมตาของใบอนุญาต

อย่าถือว่าความเป็นเจ้าของพื้นที่เก็บข้อมูลทำให้สคริปต์การบิลด์มีความปลอดภัย แพ็คเกจบิลด์ดำเนินการซอร์สที่ไม่น่าเชื่อถือและตรรกะแพ็คเกจภายในขอบเขตการแยกของโครงสร้างพื้นฐานบิลด์

การควบคุมแพ็คเกจอื่น ๆ

แพ็คเกจเนทีฟ

ใช้ os.packages สำหรับแพ็คเกจที่จัดเตรียมไว้แล้วโดยการแจกจ่ายที่เลือกหรือพื้นที่เก็บข้อมูลที่กำหนดค่าไว้อย่างชัดเจน:

{ "os": { "packages": ["curl", "jq"] } }

การแทนที่แพ็คเกจ

os.package_overrides สามารถประกาศ add, remove หรือ replace เจตนา:

{ "os": { "package_overrides": [ {"name": "nano", "action": "replace", "replacement": "neovim"}, {"name": "telnet", "action": "remove"} ] } }

การแทนที่ไม่ใช่ข้อพิสูจน์ว่าการแก้ไขการขึ้นต่อกันเป็นไปตามนั้น ตรวจสอบสินค้าคงคลังของแพ็คเกจขั้นสุดท้ายและการยืนยันการไม่มี/การมีอยู่

พื้นที่เก็บข้อมูลเพิ่มเติม

os.extra_repos เป็นการป้อนข้อมูลขั้นสูง อย่าเพิ่มที่เก็บ HTTP ที่ไม่ได้ลงนามตามที่แสดงในตัวอย่างเก่าๆ การรวมพื้นที่เก็บข้อมูลที่ได้รับอนุมัติจำเป็นต้องมีการขนส่ง HTTPS, คีย์การลงนามที่ปักหมุด, การบังคับใช้ลายเซ็น, ข้อมูลเมตาที่เผยแพร่ที่เหมาะสมสำหรับตัวจัดการแพ็คเกจ และนโยบายการเป็นเจ้าของและการอัปเดตที่จัดทำเป็นเอกสาร หากผู้สร้างปัจจุบันไม่สามารถแสดงการควบคุมความน่าเชื่อถือเหล่านั้นได้ ห้ามใช้ที่เก็บ

##หลักฐานการยอมรับ

สำหรับทุกแพ็คเกจแบบกำหนดเอง ให้คงไว้:

  • URL ของที่เก็บและการคอมมิตที่แก้ไขแล้ว
  • แหล่งที่มาและการตรวจสอบใบอนุญาตที่ประกาศ
  • สร้างสภาพแวดล้อมและสแน็ปช็อตการพึ่งพา
  • สร้างบันทึกและชื่อแพ็กเกจ/เวอร์ชัน/สถาปัตยกรรมที่เป็นผลลัพธ์
  • หลักฐานการแยกย่อยของบรรจุภัณฑ์และลายเซ็นของพื้นที่เก็บข้อมูล หากมี
  • คลังรูปภาพสุดท้ายที่แสดงแพ็คเกจที่ติดตั้ง
  • การทดสอบบริการหรือการทดสอบควันที่ปฏิบัติการได้ และ
  • พฤติกรรมการลบและการอัพเกรด

ขั้นตอนซอร์สแพ็กเกจที่ประสบความสำเร็จนั้นไม่เพียงพอ การสร้างอิมเมจอาจล้มเหลวในการใช้แพ็คเกจในภายหลัง และแพ็คเกจที่ติดตั้งยังคงไม่สามารถใช้งานได้

การแก้ไขปัญหา

  • ข้อมูลเมตาของบรรจุภัณฑ์ถูกปฏิเสธ: ตรวจสอบแพ็คเกจดั้งเดิมในเครื่องด้วยสถาปัตยกรรมและรุ่นการเผยแพร่เดียวกัน
  • ขาดการพึ่งพาการสร้าง: ใช้การพึ่งพาที่มีอยู่จากที่เก็บที่ได้รับอนุมัติสำหรับเป้าหมายนั้น อย่าดึงข้อมูลไบนารีโดยพลการในสคริปต์ผู้ดูแล
  • ไม่มีแพ็คเกจจากอิมเมจ: เปรียบเทียบชื่อแพ็คเกจไบนารีที่สร้างขึ้นกับคำขอติดตั้งแบบมาตรฐานและสินค้าคงคลังขั้นสุดท้าย
  • เวอร์ชันไม่เปลี่ยนแปลง: อัปเดตข้อมูลเมตาของเวอร์ชันดั้งเดิมและยืนยันว่าการแก้ไขแหล่งที่มาใหม่ได้รับการแก้ไขแล้ว
  • บริการล้มเหลว: ตรวจสอบหน่วย การขึ้นต่อกันของรันไทม์ สิทธิ์ และบันทึกของแขก เพิ่มการยืนยันระดับพฤติกรรมก่อนที่จะสร้างใหม่