ซอฟต์แวร์ที่กำหนดเองจากแหล่งเก็บข้อมูลต้นทาง
สูตร 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 ของที่เก็บและการคอมมิตที่แก้ไขแล้ว
- แหล่งที่มาและการตรวจสอบใบอนุญาตที่ประกาศ
- สร้างสภาพแวดล้อมและสแน็ปช็อตการพึ่งพา
- สร้างบันทึกและชื่อแพ็กเกจ/เวอร์ชัน/สถาปัตยกรรมที่เป็นผลลัพธ์
- หลักฐานการแยกย่อยของบรรจุภัณฑ์และลายเซ็นของพื้นที่เก็บข้อมูล หากมี
- คลังรูปภาพสุดท้ายที่แสดงแพ็คเกจที่ติดตั้ง
- การทดสอบบริการหรือการทดสอบควันที่ปฏิบัติการได้ และ
- พฤติกรรมการลบและการอัพเกรด
ขั้นตอนซอร์สแพ็กเกจที่ประสบความสำเร็จนั้นไม่เพียงพอ การสร้างอิมเมจอาจล้มเหลวในการใช้แพ็คเกจในภายหลัง และแพ็คเกจที่ติดตั้งยังคงไม่สามารถใช้งานได้
การแก้ไขปัญหา
- ข้อมูลเมตาของบรรจุภัณฑ์ถูกปฏิเสธ: ตรวจสอบแพ็คเกจดั้งเดิมในเครื่องด้วยสถาปัตยกรรมและรุ่นการเผยแพร่เดียวกัน
- ขาดการพึ่งพาการสร้าง: ใช้การพึ่งพาที่มีอยู่จากที่เก็บที่ได้รับอนุมัติสำหรับเป้าหมายนั้น อย่าดึงข้อมูลไบนารีโดยพลการในสคริปต์ผู้ดูแล
- ไม่มีแพ็คเกจจากอิมเมจ: เปรียบเทียบชื่อแพ็คเกจไบนารีที่สร้างขึ้นกับคำขอติดตั้งแบบมาตรฐานและสินค้าคงคลังขั้นสุดท้าย
- เวอร์ชันไม่เปลี่ยนแปลง: อัปเดตข้อมูลเมตาของเวอร์ชันดั้งเดิมและยืนยันว่าการแก้ไขแหล่งที่มาใหม่ได้รับการแก้ไขแล้ว
- บริการล้มเหลว: ตรวจสอบหน่วย การขึ้นต่อกันของรันไทม์ สิทธิ์ และบันทึกของแขก เพิ่มการยืนยันระดับพฤติกรรมก่อนที่จะสร้างใหม่