เหตุผลสำหรับการเปลี่ยนจากคนธรรมดาเป็น systemd?


28

การเปลี่ยนแปลงที่ใหญ่กว่าที่มาพร้อมกับ Ubuntu 15.04 คือการเปลี่ยนจาก upstart เป็น systemd เป็นค่าเริ่มต้นสำหรับการจัดการการเริ่มต้นระบบและบริการระบบ

ทุกคนสามารถอธิบายให้ผู้ใช้ที่ไม่ใช่ด้านเทคนิคทราบได้อย่างไรว่าเรื่องนี้มีผลกระทบต่อเราอย่างไร? และทำไมมันถึงสำคัญ?

คำตอบ:


29

ผู้ใช้คนธรรมดาไม่ควรสังเกตการเปลี่ยนแปลงใด ๆ จากการออกแบบ เป็นระบบเริ่มต้นไม่ใช่สิ่งที่ผู้ใช้โต้ตอบกับแบบดั้งเดิม มันควรแทนที่ฟังก์ชั่นที่มีให้โดยพุ่งพรวดอย่างสมบูรณ์และทำสิ่งพิเศษสองสามอย่าง แต่ในครั้งเดียวที่ผู้ใช้ที่ไม่ใช่ด้านเทคนิคจะเห็นว่านี่คือสิ่งที่ผิดปกติ

ผู้ใช้ดูแลระบบและนักพัฒนาที่มีการใช้งานและพัฒนาเพื่อพุ่งพรวดอย่างแข็งขันคือผู้ที่ต้องการจัดการกับสิ่งต่าง ๆ มีเอกสารการโอนย้ายข้อมูลบน Ubuntu Wikiเพื่อช่วยให้นักพัฒนาสามารถแปลงสคริปต์เริ่มต้นได้ แต่ผู้ใช้และ sysops สามารถใช้ Upstart โดยใช้ 14.04 (ซึ่งรองรับจนถึงปี 2019)

เหตุผลและเหตุผลของการเปลี่ยนแปลงไม่ได้มาจากด้านของ Ubuntu Canonical มีความสุขเพียงพอกับการพุ่งพรวด (โครงการของพวกเขา) แต่ผู้ใช้ Debian หลายคนต้องการที่จะย้ายไปยังเอนจิ้น init ที่ทันสมัย

นั่นหมายถึงการต่อสู้ระหว่างตัวเลือกที่หลากหลาย (เหตุผล) และ systemd ในที่สุดก็ชนะ

Canonical ไปกับ Debianเพราะมันง่ายและอาจดีที่สุด พวกเขาจะวางโครงการและไม่ต่อสู้กับต้นน้ำ นอกจากนี้ยังนำเราให้สอดคล้องกับการแจกแจงอื่น ๆ (Red Hat, Fedora และอื่น ๆ ) ที่ย้ายไปยัง systemd มุ่งเน้นมากขึ้นและลดความพยายามซ้ำซ้อน

tl; drสำหรับบุคคลที่ไม่ใช่ด้านเทคนิคสิ่งนี้ไม่ควรส่งผลกระทบต่อคุณเลย สำหรับ Ubuntu มันควรจะทำงานน้อยลงและเป็นระบบเริ่มต้นที่ดีกว่า


18

ทุกคนสามารถอธิบายให้ผู้ใช้ที่ไม่ใช่ด้านเทคนิคทราบได้อย่างไรว่าเรื่องนี้มีผลกระทบต่อเราอย่างไร?

ในทางทฤษฎีสิ่งนี้ไม่ควรส่งผลกระทบต่อผู้ใช้ที่ไม่ใช่ด้านเทคนิคซึ่งไม่ได้มีส่วนร่วมในความกล้าหาญของระบบที่ใช้งานได้จริง ในทางปฏิบัติมีหลายสิ่งหลายอย่างที่คุณจะได้เห็น

นี่คือรายการที่ไม่สมบูรณ์:

  • หากคุณมีโปรแกรมเสริมที่ใช้ไฟล์คำจำกัดความงานพุ่งพรวดสำหรับการเริ่มต้นโปรแกรมพวกเขาจะหยุดทำงาน คุณจะต้องติดตั้ง (และอาจเป็นไปได้ที่จะเขียน แต่โดยทั่วไปแล้วเพียงแค่ทำให้คนอื่นที่เขียนไปแล้ว) systemdไฟล์ unit unit ตัวอย่าง: https://askubuntu.com/questions/613785
  • สมมติฐานการออกแบบที่หลากหลายโดยนักพัฒนา systemd เกี่ยวกับสิ่งต่าง ๆ เช่นผลลัพธ์การจัดการพลังงานเป็นค่าเริ่มต้นซึ่งขัดแย้งกับสิ่งที่คุณคุ้นเคย นักพัฒนา systemd มีความคิดที่ชัดเจนมากเกี่ยวกับสิ่งที่ควรเกิดขึ้นในการตอบสนองต่อสวิตช์ฝาบนแล็ปท็อปเป็นต้น
  • หากคุณกำลังใช้ไดรเวอร์การแสดงผลที่เป็นกรรมสิทธิ์ของ nvidia แสดงว่ามีการตัดสินใจออกแบบต่าง ๆ ใน systemd ที่มีผลกับคุณ ตัวอย่าง: https://askubuntu.com/questions/613773
  • มันไม่เกี่ยวข้องเลยเมื่อมาจากคนธรรมดาเพราะผู้ใช้ Ubuntu มีหน้าคู่มือบอกพวกเขามาหลายปีแล้ว แต่ฉันพูดถึงมันสำหรับผู้ใช้ที่ไม่ใช่อูบุนตูที่อาจอ่านสิ่งนี้: ผู้ใช้ระบบปฏิบัติการ Linux อื่น ๆ ที่มาจากระบบ 5 init+ rcจะกัดโดยความจริงที่ว่า systemd เป็นเพียงเข้ากันได้กับระบบ rc5 เช่นเดียวกับคนธรรมดาและแน่นอนระบบอื่น ๆ ส่วนใหญ่ก็สารภาพและวัสดุสิ้นเปลืองไม่มีหลังเข้ากันได้กับระบบ 5 และกำหนดค่าของไฟล์init/etc/inittab

    ดังนั้นคนที่ทำตามคำแนะนำจากคน 30 ปีที่ให้คำแนะนำ "ดีคุณสามารถแก้ไขสิ่งนี้เป็น/etc/inittab... " หรือผู้ที่ใช้โปรแกรมที่ทำตามคำแนะนำนั้นตอนนี้มีโปรแกรมที่ไม่ได้เริ่มต้นที่ bootstrap ตัวอย่าง: https://unix.stackexchange.com/a/196197/5132

  • คุณไม่สามารถเข้าสู่โหมดผู้ใช้เดี่ยวผ่านshutdownคำสั่งsystemd ได้เช่นเดียวกับshutdownคำสั่งก่อนหน้า นอกเหนือจากข้อเท็จจริงที่เรียกว่าโหมดช่วยเหลือในศัพท์แสง systemd โหมดช่วยเหลือไม่ถือว่าเป็นสถานะปิดในมุมมองของ systemd มันถือเป็นสถานะการ ทำงาน shutdown nowจะปิดเครื่อง มันsystemctl rescueจะไปถึงโหมดผู้ใช้คนเดียวในโลก systemd อ่านเพิ่มเติม: https://unix.stackexchange.com/a/196471/5132
  • เพิ่มเติมจากหัวข้อสุดท้าย: หากคุณยังไม่ละทิ้งแนวคิดเรื่องระดับการวิ่งไปแล้วตอนนี้เป็นเวลาที่ต้องทำ อ่านเพิ่มเติม: https://unix.stackexchange.com/a/196014/5132
  • คุณจะต้องระมัดระวังเกี่ยวกับการปฏิบัติตามคำแนะนำทั่วไปของ systemd ที่พบโดยการค้นหา WWW แบบสุ่มเพราะคุณ "รู้" ว่า "มันเป็น systemd ทั้งหมดแล้ว" คุณกำลังจะไปดูคนพูดเกี่ยวกับการใช้คำสั่งกับตัวเลือกในการ--user systemctlไม่ได้ใช้กับ Ubuntu (ยัง) พุ่งพรวดและ systemd แตกต่างกันอย่างมีนัยสำคัญในบริเวณนี้และรุ่นที่ 15 ยังคงใช้อูบุนตูพุ่งพรวดinit ต่อเซสชั่นมากกว่า systemd ตัวอย่างต่อผู้ใช้ ดังนั้นhttps://superuser.com/a/860598/38062จะไม่ใช้ตัวอย่างเช่น ☺

6

ดังที่คนอื่น ๆ ได้ตั้งข้อสังเกตไว้แล้วในทางทฤษฎีสิ่งนี้ไม่ควรส่งผลกระทบต่อผู้ใช้ที่ไม่ใช่ด้านเทคนิคและในทางทฤษฎีไม่มีความแตกต่างระหว่างทฤษฎีและการปฏิบัติ แต่ในทางปฏิบัติมี

การอธิบาย

ฉันคิดว่าบางสิ่งที่โพสต์ที่นี่ต้องมีการชี้แจง:

เป็นระบบเริ่มต้นไม่ใช่สิ่งที่ผู้ใช้โต้ตอบกับแบบดั้งเดิม

มันเป็นกรณีที่มี SysV init และมี Upstart แต่มันไม่เป็นเช่นนั้นกับ systemd อีกต่อไป มันไม่มากของสิ่งที่ผู้ใช้โต้ตอบกับประเพณี:


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

สองสิ่งที่ต้องชี้แจง - สิ่งแรกที่เกี่ยวกับการแทนที่พุ่งพรวดอย่างสมบูรณ์:

ไม่มีสคริปต์เริ่มต้น SysV

หนึ่งในปัญหาที่ผู้คนมีกับ systemd คือมันไม่ได้เรียกใช้สคริปต์ init SysV ดังนั้นจึงมีตัวอย่างหนึ่งที่ไม่สามารถแทนที่ฟังก์ชั่นการใช้งานของ Upstart ได้อย่างสมบูรณ์

นี่คือสิ่งที่เราสามารถไว้วางใจได้นานกว่า 30 ปีและโดยทั่วไปคุณเขียนสคริปต์ init SysV เพื่อการพกพาสูงสุดโดยไม่ต้องทำซ้ำ (โดยการเขียนสคริปต์เดียวกันหลายเวอร์ชัน) ซึ่งไม่ใช่กรณีนี้อีกต่อไป

นี่ไม่ควรเป็นปัญหาเมื่อใช้เฉพาะแพ็คเกจจากที่เก็บอย่างเป็นทางการเนื่องจากแพ็คเกจทั้งหมดที่เคยมีสคริปต์ SysV init หรือ Upstart อาจจำเป็นต้องเขียนสคริปต์ใหม่ก่อนที่จะได้รับการบรรจุ

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

มี systemd-sysv-generator ที่ควรแปลสคริปต์ init SysV โดยอัตโนมัติไปยังสคริปต์ systemd แต่มีข้อบกพร่องบางอย่างและรายการความเข้ากันไม่ได้ที่ชัดเจนกันไม่ได้อย่างชัดเจน

ตอนนี้การชี้แจงที่สอง - เกี่ยวกับสิ่งพิเศษเหล่านี้:

บางสิ่งที่พิเศษ

"สิ่งพิเศษสองสามอย่าง" ที่ systemd กำลังครอบคลุม - ตามมุมมองของ systemd - สิ่งที่ได้รับมาแล้วและสิ่งที่นำเสนอโดยLennart Poetteringในปี 2014 ที่ GNOME.asia - มีดังต่อไปนี้:

  • ระบบ init
  • การบันทึกวารสาร
  • การจัดการเข้าสู่ระบบ
  • การจัดการอุปกรณ์
  • การจัดการไฟล์ชั่วคราวและระเหย
  • การลงทะเบียนรูปแบบไบนารี
  • บันทึก / เรียกคืนแสงไฟ
  • rfkill บันทึก / เรียกคืน
  • bootchart
  • readahead
  • การตั้งค่าที่เก็บข้อมูลที่เข้ารหัส
  • การค้นหาพาร์ติชัน EFI / GPT
  • การลงทะเบียนเครื่อง / คอนเทนเนอร์เสมือน
  • การจัดการตู้คอนเทนเนอร์
  • การจัดการชื่อโฮสต์
  • การจัดการโลแคล
  • การจัดการเวลา
  • การจัดการเมล็ดแบบสุ่ม
  • การจัดการตัวแปร sysctl
  • การจัดการคอนโซล
  • วิปัสสนา
  • การค้นพบอัตโนมัติ
  • plug and play
  • การจัดการเครือข่าย
  • systemd-networkd
  • แคช DNS
  • การตอบกลับ mDNS
  • LLMNR ตอบกลับ
  • การตรวจสอบ DNSSEC
  • IPC ในเคอร์เนล
  • kdbus
  • SD-รถบัส
  • การประสานเวลากับ NTP
  • systemd-timesyncd
  • บูรณาการกับภาชนะบรรจุ
  • sandboxing ของบริการ
  • แอปแซนด์บ็อกซ์
  • รูปแบบภาพ OS
  • รูปแบบภาพคอนเทนเนอร์
  • รูปแบบภาพแอป
  • GPT พร้อมการค้นพบอัตโนมัติ
  • ระบบไร้สัญชาติ
  • ระบบทันใจ
  • รีเซ็ตเป็นค่าจากโรงงาน
  • โหนดการเริ่มต้นและการอัพเดต
  • บูรณาการกับระบบคลาวด์
  • การจัดการบริการข้ามโหนด
  • ภาพ OS ที่ตรวจสอบได้ตลอดทางจนถึงเฟิร์มแวร์
  • กำลังโหลด Boot
  • การสร้างระบบปฏิบัติการรุ่นต่อไปของอินเทอร์เน็ตการรวมความแตกต่างอย่างไม่มีจุดหมายระหว่างการกระจาย

ดังนั้นกลับไปที่: "มันเป็นระบบเริ่มต้นไม่ใช่สิ่งที่ผู้ใช้โต้ตอบกับดั้งเดิม" - จะต้องมีการชี้ให้เห็นว่าระบบ init เป็นเพียงรายการเดียวในรายการนั้น


และในที่สุดสิ่งสุดท้ายที่ฉันต้องการที่จะแสดงความคิดเห็น:

[T] เขาเพียงครั้งเดียวที่ผู้ใช้ที่ไม่ใช่ด้านเทคนิคจะเห็นสิ่งนี้คือเมื่อเกิดข้อผิดพลาด

โอ้สบายดีไหม :)

การเปลี่ยนแปลง

การเปลี่ยนแปลงที่โดดเด่นที่สุดสำหรับผู้ใช้ปลายทาง (นอกเหนือจากสคริปต์) กำลังเริ่มต้นและหยุดบริการและใช้คำสั่งเช่น:

ซึ่งไม่ทำงานตามที่คาดไว้ ตัวอย่างเช่นnohupเป็นคำสั่ง POSIX เพื่อให้แน่ใจว่ากระบวนการทำงานต่อไปหลังจากที่คุณออกจากระบบ มันไม่ทำงานบน systemd อีกต่อไป นอกจากนี้โปรแกรมที่ต้องการscreenและtmuxจำเป็นต้องเรียกใช้ในวิธีพิเศษไม่เช่นนั้นกระบวนการที่คุณใช้กับโปรแกรมจะถูกฆ่า (ในขณะที่ไม่ได้รับกระบวนการที่ถูกฆ่ามักเป็นสาเหตุหลักของการเรียกใช้หน้าจอหรือ tmux ในตอนแรก)

นี่ไม่ใช่ข้อผิดพลาดเป็นตัวเลือกการออกแบบดังนั้นจึงไม่น่าที่จะได้รับการแก้ไขในอนาคต นี่คือสิ่งที่ Lennart Poettering พูดเกี่ยวกับปัญหานี้:

ในมุมมองของฉันมันค่อนข้างแปลกที่ UNIX นั้นโดยค่าเริ่มต้นปล่อยให้รหัสผู้ใช้เองตามอำเภอใจไม่ จำกัด หลังจากออกจากระบบ ได้มีการพูดคุยกันมานานแล้วในหมู่คน OS หลาย ๆ คนซึ่งสิ่งนี้ควรเป็นไปได้ แต่ไม่แน่นอนว่าเป็นค่าเริ่มต้น การไม่ทำความสะอาดเซสชันผู้ใช้หลังจากออกจากระบบไม่เพียง แต่น่าเกลียดและค่อนข้างแฮ็ก แต่ยังเป็นปัญหาด้านความปลอดภัย ในที่สุด systemd 230 ก็พลิกสวิตช์และในที่สุดก็ทำความสะอาดทุกอย่างได้อย่างถูกต้องเมื่อผู้ใช้ออกจากระบบ

สำหรับข้อมูลเพิ่มเติมดู:

วิ่ง screen

  • พุ่งพรวด: screen
  • systemd: systemd-run --user --scope screen

(หมายเหตุ: พฤติกรรมของ "พุ่งพรวด" ด้านบนเป็นอะไรจริงๆยกเว้น systemd นี่ไม่ใช่การพุ่งพรวดที่เฉพาะเจาะจง)

การเริ่มงาน foo:

  • พุ่งพรวด: start foo
  • systemd: systemctl start foo

การหยุดงาน foo:

  • พุ่งพรวด: stop foo
  • systemd: systemctl stop foo

การเริ่มงานใหม่ foo:

  • พุ่งพรวด: restart foo
  • systemd: systemctl restart foo

รายการงานที่มีสถานะของพวกเขา:

  • พุ่งพรวด: initctl list
  • systemd: systemctl status

(ดูคำตอบของฉันไปที่ข้อดี / ข้อเสียของการพุ่งพรวดและ systemd คืออะไร?สำหรับรายละเอียดเพิ่มเติมที่อยู่นอกขอบเขตสำหรับคำถามนี้)

ท่อน

นอกจากนี้ยังมีความแตกต่างใหญ่ในการจัดการบันทึกเพราะตรงกันข้ามกับ Unix ประเพณีบันทึกของ systemd จะถูกเก็บไว้ในไฟล์ไบนารีในรูปแบบที่กำหนดเองดังนั้นแทนที่จะ:

cat /var/log/upstart/foo.log
tail -f /var/log/upstart/foo.log

คุณต้องใช้คำสั่งพิเศษเพื่อเข้าถึงบันทึกของคุณ:

sudo journalctl -u foo
sudo journalctl -u foo -f

ถกเถียงกันอย่างเผ็ดร้อน

การแนะนำของ systemd ก่อน Debian และ Ubuntu ภายหลังไม่ได้โดยไม่มีข้อโต้แย้งและฝ่ายค้านมากมายเป็นที่รู้จักกันทุกคนที่เขียนหนึ่งในบทความต่อไปนี้:

ตำแหน่งอย่างเป็นทางการใน Debian systemdและเกิดการทะเลาะวิวาทได้นำไปสู่การประกาศอพยพในปี 2014และจบลงด้วยเอียนแจ็คสันลาออก

Init เสรีภาพ , Without-Systemd.orgและ Systemd-Free.orgความคิดริเริ่มเกิดที่มีจำนวนมากของการอภิปรายเกี่ยวกับข่าว Hacker

อ่านเพิ่มเติม


คุณกำลังตอบคำถามของฉันในบริบทอื่น Systemd เป็นมากกว่าระบบเริ่มต้น แต่คำถามนี้เกี่ยวกับการพุ่งพรวด→ systemd และการตัดสินใจนั้น ... ไม่ใช่ "ทุกสิ่งที่ systemd เข้ามาแทนที่คืออะไร"
Oli
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.