หลังจากผ่านไปสองปีนับตั้งแต่การพัฒนาเวอร์ชันหลักล่าสุด เวอร์ชันใหม่ 0.9 ของ ตัวจัดการบริการGNU Shepherd (เดิมชื่อ dmd) ก็ได้ถูกประกาศสู่สาธารณะ โปรแกรมนี้ได้รับการพัฒนาโดยนักพัฒนาของระบบปฏิบัติการ GNU Guixเพื่อเป็นทางเลือกแทนการเริ่มต้นระบบ SysV-init ที่คำนึงถึงการพึ่งพาของระบบ
Shepherd ให้ฟังก์ชันการทำงานในพื้นที่ผู้ใช้แบบอะซิงโครนัสในรูปแบบของบริการซึ่งใน Shepherd นั้นเป็นฟังก์ชันทั่วไปและประเภทข้อมูลอ็อบเจ็กต์ที่ส่งออกเพื่อให้ Shepherd ใช้ในการขยายระบบปฏิบัติการพื้นฐานในลักษณะที่กำหนดไว้ แตกต่างจาก systemd ตรงที่กระบวนการตรวจสอบในพื้นที่ผู้ใช้จะทำงานในฐานะผู้ใช้นั้นๆ
เกี่ยวกับเชพเพิร์ด
หัวใจสำคัญของแบบจำลองการเริ่มต้นใช้งานในพื้นที่ผู้ใช้ของ Shepherd คือแนวคิดของการขยาย ซึ่งเป็นรูปแบบหนึ่งของการประกอบเข้าด้วยกัน โดยที่บริการต่างๆ ถูกออกแบบมาให้ทับซ้อนกับบริการอื่นๆ เพื่อเสริมพฤติกรรมที่ซับซ้อนหรือเฉพาะเจาะจงมากขึ้นตามต้องการ สิ่งนี้แสดงถึงความสัมพันธ์ของการพึ่งพาอาศัยกันตามการสร้างอินสแตนซ์ ซึ่งพบได้ในระบบการเริ่มต้นใช้งานสมัยใหม่หลายระบบ ทำให้ระบบมีความเป็นโมดูลาร์ แต่ยังช่วยให้บริการต่างๆ สามารถโต้ตอบกับบริการอื่นๆ ได้อย่างหลากหลายในรูปแบบต่างๆ
นอกจากนี้ Shepherd ยังให้บริการเสมือน (virtual services)ซึ่งช่วยให้สามารถส่งข้อมูลแบบไดนามิกผ่านกลุ่มของวัตถุบริการที่เกี่ยวข้อง เช่น วัตถุทั้งหมดที่สร้างอินสแตนซ์ของตัวแทนการถ่ายโอนอีเมล (MTA) สำหรับระบบ
ระบบที่ควบคุมโดย Shepherd daemon สามารถแสดงพื้นที่ผู้ใช้เป็นกราฟ acyclic ที่กำหนด โดยมี "บริการของระบบ" (รับผิดชอบสำหรับขั้นตอนการบู๊ตก่อนเวลาและการเริ่มต้นใช้งาน) เป็นรูทและบริการเริ่มต้นที่ตามมาทั้งหมดเป็นส่วนขยายของฟังก์ชันการทำงานของบริการระบบ ไม่ว่าจะโดยตรงหรือโดยผ่านบริการอื่นๆ
เนื่องจาก GNU Shepherdถูกเขียนและกำหนดค่าด้วย Guile Scheme จึงได้รับการออกแบบมา ให้ผู้ดูแลระบบสามารถตั้งโปรแกรมได้อย่างซับซ้อน แต่ก็ยังสามารถใช้ในการจัดการโปรไฟล์ของผู้ใช้แต่ละรายสำหรับโปรแกรมและบริการที่ไม่ได้รับสิทธิ์พิเศษได้อีกด้วย
บริการและการกำหนดค่าของระบบจะถูกจัดเก็บอย่างสม่ำเสมอในรูปแบบโค้ด Scheme ที่เน้นวัตถุ และถึงแม้ว่าระบบ Guix พื้นฐานจะมีชุดบริการหลักให้ใช้งาน แต่ก็สามารถประกาศบริการใหม่ๆ ได้อย่างยืดหยุ่น และด้วยระบบวัตถุ GOOPS ของ Guile บริการที่มีอยู่สามารถกำหนดนิยามใหม่ได้ตามดุลยพินิจของผู้ใช้ โดยการขอให้ Shepherd เขียนบริการใหม่แบบไดนามิกในลักษณะเฉพาะเมื่อมีการสร้างอินสแตนซ์
GNU Shepherd เดิมได้รับการออกแบบให้ทำงานร่วมกับ GNU Hurd และนำมาใช้ในภายหลังโดย Guix System
คุณสมบัติใหม่หลักของ GNU Shepherd 0.9
เวอร์ชันใหม่นี้เน้นการนำแนวคิดของบริการชั่วคราว (transient services) มาใช้ ซึ่งจะถูกตัดการเชื่อมต่อโดยอัตโนมัติหลังจากสิ้นสุดการทำงานเนื่องจากการสิ้นสุดกระบวนการหรือการเรียกใช้เมธอด "stop" ซึ่งอาจจำเป็นสำหรับบริการสังเคราะห์ที่ไม่สามารถเริ่มต้นใหม่ได้หลังจากสิ้นสุดการทำงาน
การเปลี่ยนแปลงที่สำคัญอีกประการหนึ่งคือสำหรับบริการที่ไม่มีพารามิเตอร์ "#:log-file"ข้อมูลจะถูกส่งไปยัง syslogและสำหรับบริการที่มีพารามิเตอร์ "#:log-file" ข้อมูลจะถูกเขียนลงในไฟล์แยกต่างหากซึ่งระบุเวลาของข้อมูลในกระบวนการ Shepherd ที่ไม่มีสิทธิ์พิเศษ ซึ่งจัดเก็บอยู่ในไดเร็กทอรี $XDG_DATA_DIR
นอกจากนี้ ควรสังเกตว่ามีการเพิ่มขั้นตอน "make-inetd-constructor" เพื่อสร้างบริการที่คล้ายกับ inetd และมีการเพิ่มขั้นตอน "make-systemd-constructor" เพื่อสร้างบริการที่เปิดใช้งานในกิจกรรมเครือข่าย ( สไตล์การเปิดใช้งานซ็อกเก็ต systemd)
การเปลี่ยนแปลงที่สำคัญ อื่นๆในเวอร์ชันใหม่นี้ ได้แก่:
- เพิ่มขั้นตอนในการเริ่มบริการพื้นหลัง:
- เพิ่มพารามิเตอร์ “:supplementary-groups”, “#:create-session” และ “#:resource-limits” ให้กับขั้นตอน “make-forkexec-constructor”
- รับประกันการทำงานที่ปราศจากการล็อกขณะรอไฟล์ PID
- ลบการสนับสนุนการคอมไพล์ด้วย Guile 2.0 แก้ไขปัญหาเมื่อใช้ Guile เวอร์ชัน 3.0.5-3.0.7
- ต้องใช้ไลบรารี Fibers 1.1.0 หรือใหม่กว่าจึงจะใช้งานได้
- ปรับปรุงเอกสารและตัวอย่าง
- ไม่สามารถสร้าง Shepherd ด้วย Guile 2.0 . ได้อีกต่อไป
- แก้ไขข้อบกพร่องของคอมไพเลอร์ Guile 3.0[5-7]
- การแปลที่อัปเดต
สุดท้ายนี้หากคุณสนใจเรียนรู้เพิ่มเติมหรือต้องการดาวน์โหลดเวอร์ชันใหม่นี้ คุณสามารถดูรายละเอียด เอกสารประกอบ และดาวน์โหลดได้จากลิงก์ต่อไปนี้