FreeBSD สร้างแพ็คเกจอย่างไร
โครงการ FreeBSD ใช้ในการสร้างแพ็คเกจสำหรับรุ่นที่ออกและบางครั้งสำหรับสาขาที่มีเสถียรภาพ ผู้สร้างแพ็คเกจเก่าใช้ระบบแบบกระจายชื่อ Portbuild มันจะใช้คลัสเตอร์ขนาดใหญ่ของเครื่อง 2GB-4GB ขนาดเล็กเพื่อสร้างแพ็คเกจ นี่เป็นข้อผิดพลาดได้ง่ายและช้าส่วนใหญ่เกิดจากเครื่องรุ่นเก่า การสร้างแบบเต็มยังคงใช้เวลาหนึ่งสัปดาห์ แพ็คเกจวันนี้สร้างขึ้นโดยใช้เครื่องจักรขนาดใหญ่เครื่องเดียวโดยใช้ Poudriere (จากหน้าเว็บโดย Brian Drewery )
ดูเพิ่มเติม: วิธีอัพเดทแพ็คเกจและพอร์ตต่าง ๆ บน FreeBSD
FreeBSD มีการพัฒนา ABI (และ API) เช่นเดียวกับ Solaris และ Windows ในขณะที่ Linux มีเสถียรภาพ (นิ่ง) ABI (และ API) ดังนั้นด้วยไบนารีเก่าของ Linux จะยังคงทำงานบนระบบปฏิบัติการเวอร์ชันใหม่ในขณะที่ระบบปฏิบัติการที่ไม่ใช่ Linux นี่ไม่ใช่ ' กรณีเสมอ (บางครั้งก็เป็น)
การใช้pkg lock
ยังสามารถนำไปสู่อาการปวดหัวในขณะที่มันจะล็อค (เสนอเตือน) เมื่อคุณพยายามอัพเกรดโดยใช้pkg upgrade
มันยังคงทึกทักว่ารุ่นที่มีหมายเลขสูงกว่าดีกว่า (เป็นที่ต้องการ) และเป็นสิ่งที่คุณต้องการทำ - ดังนั้นจึงขออนุญาต และคุณสามารถอนุญาตได้ แต่มันไม่รับประกันว่าอย่างอื่นจะไม่แตก ดูที่ URL ด้านบนหรือการสนทนานี้: " คุณต้องการ FreeBSD ในการล็อคเวอร์ชันของแพ็คเกจไบนารีที่แจกจ่ายผ่าน pkg สำหรับเวอร์ชัน OS หรือไม่ "
หากแพคเกจหนึ่งถูกล็อคในบางครั้งคุณจะต้องให้สิทธิ์ในการปลดล็อคและทำการอัพเกรดในขณะที่มันจะใช้ได้กับแพ็คเกจเดียว และต้องมีการอัปเกรดหากมีอยู่ในปัจจุบัน)
บล็อกของ Brian Drewery: " FreeBSD Journal: Poudriere " opines:
"หยุดใช้พอร์ตมาสเตอร์, พอร์ตอัปเกรดและพอร์ตบนเซิร์ฟเวอร์ของคุณและเปลี่ยนเป็นแพ็กเกจ
การตั้งค่าแพ็คเกจบิวด์ของคุณเองด้วย Poudriere ใช้เวลาเพียงไม่กี่นาทีและจะช่วยคุณประหยัดเวลาได้มากในอนาคต
...
หากคุณมีระบบ FreeBSD มากกว่าหนึ่งระบบและไม่ได้ใช้แพ็คเกจคุณควร ฉันบำรุงรักษาเซิร์ฟเวอร์เพียง 20 เครื่อง แต่การสร้างพอร์ตในแต่ละระบบใช้เวลาของฉันนานและเสียทรัพยากรบนเครื่องที่ใช้งานจริง เมื่อสร้างพอร์ตบนเซิร์ฟเวอร์หลายเครื่องมันเป็นเรื่องง่ายมากที่จะทำให้ตัวเลือกหรือเวอร์ชั่นของพวกเขาไม่ซิงค์กัน ด้วยการสร้างแพ็คเกจบนระบบเดียวฉันลดภาระของระบบลงและลดปริมาณงานที่ต้องทำและทำให้ระบบทั้งหมดของฉันสอดคล้องกัน แทนที่จะจัดการกับความล้มเหลวเดียวกันในแต่ละระบบฉันเพียงแค่ต้องจัดการกับระบบการสร้าง
แต่การผูกปม ...
ทำไมคุณต้องเบี่ยงเบนจากแพ็คเกจอย่างเป็นทางการ เฟรมเวิร์กพอร์ตจัดเตรียมตัวเลือกรองรับพอร์ตต่างๆเพื่อเปลี่ยนการกำหนดค่าบิวด์ - ไทม์ ไม่ใช่ทุกแอพพลิเคชั่นที่รองรับการกำหนดค่ารันไทม์ บางแอปพลิเคชั่นจะต้องรวบรวมต่างกันขึ้นอยู่กับว่าเปิดใช้งานฟีเจอร์ใด ผู้อื่นมีตัวเลือกเพียงเพื่อลดจำนวนคุณลักษณะและการพึ่งพาในพอร์ตเริ่มต้น สำหรับผู้ดูแลเซิร์ฟเวอร์สิ่งนี้สามารถนำไปสู่การค้นหาอย่างรวดเร็วว่าแพ็คเกจเริ่มต้นบางตัวไม่เป็นไปตามข้อกำหนด
ดังนั้น ...
มีสองสามวิธีในการรับแพ็คเกจแบบกำหนดเอง Pkg รองรับการใช้ที่เก็บหลายแห่ง สามารถตั้งค่าให้ใช้ที่เก็บ FreeBSD อย่างเป็นทางการเป็นที่เก็บหลักและที่กำหนดเองเป็นที่สอง Pkg ไม่ได้ถูก จำกัด โดยจำนวนที่เก็บที่สามารถติดตามได้และสามารถจัดลำดับใหม่สำหรับลำดับความสำคัญได้ ปัญหาของที่เก็บข้อมูลหลายแห่งคือการดูแลรักษายาก เมื่อ Pkg ตรวจพบว่าแพ็คเกจที่ติดตั้งมีตัวเลือกที่แตกต่างกันหรือการอ้างอิงจากที่เก็บซึ่งกำลังติดตามแพคเกจจะถูกติดตั้งใหม่จากรุ่นระยะไกลที่อาจเกิดขึ้น คุณสามารถล็อกแพ็กเกจระหว่างการอัพเกรดด้วยการล็อก pkg PKGNAME และ pkg ปลดล็อก PKGNAME หรือผูกกับที่เก็บที่ระบุด้วย pkg annotate -A REPGNAME ที่เก็บ PKGNAME นอกจากนี้ยังมีปัญหาที่ลึกซึ้งในการทำให้ทรีพอร์ตสำหรับที่เก็บข้อมูลที่กำหนดเองของคุณซิงค์กับแพ็คเกจ FreeBSD เนื่องจากแพ็กเกจถูกสร้างจากสแน็ปช็อตทรีของพอร์ตที่ถ่ายสัปดาห์ละครั้งหากที่เก็บข้อมูลที่กำหนดเองของคุณไม่ตรงกันอาจทำให้เกิดข้อขัดแย้งได้ มันง่ายกว่ามากในการสร้างแพ็คเกจทั้งหมดที่คุณต้องการด้วยตัวเลือกที่คุณต้องการ
การแก้ไขปัญหา:
Poudriere (เขียนว่า poo-dree-year, ภาษาฝรั่งเศสสำหรับ“ powder keg”) ถูกเขียนขึ้นเพื่อแทนที่ Tinderbox ที่เร็วและง่ายขึ้น มันเขียนโดยผู้แต่ง Pkg Baptiste Daroussin และตอนนี้ฉันส่วนใหญ่ดูแลโดย Baptiste และผู้มีส่วนร่วมอื่น ๆ มันได้กลายเป็นเครื่องมือทดสอบพอร์ต FreeBSD และการสร้างแพ็คเกจอย่างรวดเร็ว มันเป็นเครื่องมือสร้างคลัสเตอร์อย่างเป็นทางการและยังใช้โดยโครงการ FreeBSD Ports สำหรับทดสอบแพทช์การกวาดในสิ่งที่เรียกว่า“ exp-run” มันถูกเขียนใน POSIX เชลล์และกำลังถูกย้ายไปยังส่วนประกอบ C อย่างช้าๆ แตกต่างจาก Tinderbox มันไม่มีการพึ่งพาและไม่ต้องการฐานข้อมูล. มันได้รับการปรับปรุงอย่างมากเพื่อให้ขนานอย่างมากในการดำเนินการทั้งหมด มันใช้คุกเพื่อสร้างพอร์ตในสภาพแวดล้อมแบบ sandbox ในเงื่อนไขที่เข้มงวดมาก การสร้างคุกจะทำครั้งเดียวด้วยคำสั่งง่ายๆ ในระหว่างการสร้างคุกจะถูกโคลนโดยอัตโนมัติสำหรับแต่ละ CPU ที่ใช้เพื่อให้พอร์ตสะอาดสำหรับการสร้าง ".
การตั้งค่าพื้นที่เก็บข้อมูลของคุณด้วยpoudriereช่วยให้คุณมีความยืดหยุ่นของพอร์ตและความสะดวกในการจัดการแพ็คเกจ
pkg lock
นั้นติดตั้งแล้วทุกอย่างที่คุณต้องการ