Show HN: Systemd แบบอินเทอร์แอ็กทีฟ – วิธีที่ดีกว่าในการทำงานกับยูนิต Systemd
(isd-project.github.io)isdเป็นเครื่องมือที่มอบวิธีที่ดีกว่าในการจัดการยูนิตsystemdโดยมีเทอร์มินัลยูสเซอร์อินเทอร์เฟซ (TUI) สำหรับค้นหายูนิต อัปเดตพรีวิวอัตโนมัติ จัดการsudoอย่างชาญฉลาด และมีอินเทอร์เฟซที่ปรับแต่งได้
แรงจูงใจสั้นๆ
isdช่วยทำให้กระบวนการที่ซับซ้อนในการโต้ตอบกับยูนิตsystemdง่ายขึ้น และแสดงข้อมูลที่เป็นประโยชน์ให้ผู้ใช้- ลดความยุ่งยากจากการต้องพิมพ์คำสั่ง
systemctlซ้ำๆ และรีเฟรชผลลัพธ์ที่แสดงให้อัตโนมัติ
การติดตั้ง
- สามารถติดตั้ง
isdได้ผ่าน AppImage, nix และ uv - AppImage เป็นไฟล์รันเดี่ยวที่ใช้งานได้บนทุก Linux distribution และยังใช้ได้บนรีโมตเซิร์ฟเวอร์ที่มีข้อจำกัดด้านสิทธิ์
- หากต้องการติดตั้ง
isdในสภาพแวดล้อม nix สามารถติดตั้งผ่านแพ็กเกจ nix ได้ - uv เป็นตัวจัดการแพ็กเกจ Python ซึ่งสามารถใช้ติดตั้งและจัดการ
isdได้
วิธีใช้ isd
isdสามารถค้นหายูนิตsystemdตรวจสอบสถานะ และแสดงพรีวิวข้อมูลรายละเอียดของหลายยูนิตได้- ส่งคำสั่ง
systemctlไปยังยูนิตที่เลือก และอัปเดตผลลัพธ์สถานะโดยอัตโนมัติ - สามารถเปิด
pagerภายในisdเพื่อดูผลลัพธ์สถานะแบบเต็มได้ - สามารถเปิด
pagerแยกสำหรับผลลัพธ์Journalและตั้งค่าธีมกับคีย์ไบน์ดิงที่ปรับแต่งเองได้
โหมดผู้ใช้/ระบบ
isdทำงานได้ในโหมดuserหรือsystemและประเภทของยูนิตที่แสดงจะแตกต่างกันไปตามโหมด
การค้นหาแบบฟัซซี
- ผ่านแถบค้นหาแบบฟัซซี สามารถโหลดทุกยูนิตและไฟล์ยูนิตที่ตรงกับข้อความที่ป้อน และไฮไลต์ตามสถานะปัจจุบันได้
การเลือกหลายยูนิต
- สามารถเลือกหลายยูนิตได้ในวิดเจ็ตผลการค้นหา และมีพรีวิวของยูนิตที่เลือกให้
Command palette
- สามารถเปิด command palette เพื่อดูคำสั่งทั้งหมดที่ใช้งานได้และคีย์ไบน์ดิง
คำสั่ง
- ตัวอย่างเช่น กด
Ctrl+Oเพื่อหยุดยูนิตที่เลือกได้
การรองรับเพจเจอร์
- ระหว่างที่ใช้งาน
isdสามารถเปิดpagerเพื่อดูผลลัพธ์พรีวิวแบบเต็มได้
การปรับแต่ง
isdรองรับการปรับแต่งและการตั้งค่าที่หลากหลาย โดยมีธีมและคีย์ไบน์ดิงหลายแบบเพื่อช่วยให้ผู้ใช้ทำงานได้อย่างมีประสิทธิภาพสูงสุด
สรุป
- แนะนำให้ลองใช้งาน
isdด้วยตัวเองเพื่อดูว่ามีประโยชน์กับคุณหรือไม่
ขั้นตอนถัดไป
- ดูส่วนการปรับแต่งและความปลอดภัย
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ดูดีเลย
วิธีจัดการ ExecStop ในสคริปต์บริการของ systemd ทำให้สับสนจริง ๆ
ExecStartคือคำสั่งที่จะรันตอนระบบบูตหรือเมื่อผู้ใช้เริ่มบริการ แต่ExecStopจะรันหลังจากคำสั่งเริ่มต้นจบลงถ้าต้องการให้คำสั่ง stop รันตอนปิดระบบหรือเมื่อผู้ใช้หยุดบริการ ต้องตั้งค่า
RemainAfterExit=yesจริง ๆ แล้ว
ExecStopใกล้เคียงกับอีเวนต์ “ช่วง cleanup” มากกว่าอีเวนต์ “สำหรับหยุดบริการ”ต้องจำไว้ว่า systemd ถูกออกแบบมาให้เหมาะกับ daemon
ถ้าบริการแค่รันคำสั่งเดียวที่สักวันจะจบลง ต้องบอก systemd ให้ปฏิบัติต่างจาก daemon อย่างชัดเจน
อย่างที่คนอื่นบอกกัน อาจเป็นไปได้ว่าส่วนผสมที่ต้องการคือ
oneshot+RemainAfterExittype=forkingนั้น ExecStop ทำงานในแบบที่คาดไว้ชอบมากจริง ๆ
เคยใช้แต่ command line ล้วน ๆ จนเริ่มเหนื่อย แล้วช่วงหลังเริ่มใช้เครื่องมืออย่าง
lazygit/lazydockerเพื่อส่องสถานะของระบบ/ทรีที่มองไม่ค่อยเห็น ทำให้ productivity เพิ่มขึ้นมากผมจัดการบริการหลายตัวทั้งระดับผู้ใช้และระดับระบบ แต่การ debug น่าเบื่อมาก
ส่วนในประโยคแรกที่ไล่คำสั่งที่ใช้กันบ่อย ๆ กับความลำบากของมันนี่โดนใจจริง ๆ
เพราะใช้ NixOS วิธีแก้ไขไฟล์ unit ที่ immutable โดยตรงคงทำไม่ได้ แต่การสำรวจบริการ การมองเห็นสถานะ และการจัดการน่าจะช่วยได้มาก
มีแผนจะเพิ่ม “guide” ในเอกสาร สรุปคือเวลาจะ debug unit บน NixOS ลองดู
systemctl edit --runtimeจะดีทำให้ debug ง่ายขึ้นมาก
ดูดีมาก
ผมดูแลโปรเจกต์คล้าย ๆ กันอยู่ และการทำงานกับ systemd/dbus API ค่อนข้างเจ็บปวด
อยากลองใช้ตัวนี้ดูว่าจะมีอะไรให้เรียนรู้ไหม
https://github.com/rgwood/systemctl-tui
น่าจะได้ใช้เยอะเลย
ที่ขาดก็มีแค่ deb package เท่านั้น
ในที่สุด systemd-client ก็มาแล้ว ดีใจมาก
ขั้นต่อไปอยากให้เป็น TUI สำหรับแพลตฟอร์มที่ไม่ใช่ Linux อย่าง macOS, FreeBSD, Windows
บน macOS ผมใช้ LaunchControl.app อยู่ แต่มันไม่ใช่ TUI
อย่างหนึ่งคือใน
uv 0.5.21ต้องทำแบบด้านล่าง และuvxใช้ไม่ได้เลย$ uv tool install git+https://github.com/isd-project/isdแต่
$ uv tool install https://github.com/isd-project/isd/isd@latestในเอกสารใช้ไม่ได้ถึงอย่างนั้น
uvก็เร็วกว่าpip(x)มาก เลยย้ายมาใช้แล้วขอบคุณที่แจ้งให้ทราบ
เจ๋งดีที่
uvทำให้ติดตั้งเครื่องมือแบบนี้ง่ายขนาดนี้สิ่งที่ขาดไปในขั้นตอนติดตั้งคือ
uvจะติดตั้งเครื่องมือนี้โดยไม่สนใจ dependency ของ Pythonเครื่องของผมเป็น 3.10 ทำให้
isdใช้งานไม่ได้ และแก้ได้ด้วยออปชัน-p 3.13น่าจะควรกล่าวถึงในเอกสาร
เพิ่ม flag นั้นไว้ในเอกสารแล้ว
“ถ้าเคยหงุดหงิดระหว่างพิมพ์” นี่ตรงกับผมเลย
ทั้งที่ผมชอบ systemd นะ
ยังไม่ได้ลองติดตั้ง แต่สงสัยว่าสามารถเชื่อมต่อไปยัง remote host ได้ไหม
ผมใช้
systemctl --host status foo.serviceบ่อย และตรวจ status, timers, logs ฯลฯ จากระยะไกลsystemctl --hostเป็นครั้งแรกน่าเสียดายที่ยังไม่รองรับ
โดยคร่าว ๆ แล้วมันเป็น wrapper สวย ๆ ที่ครอบ
systemctlในเครื่อง localแต่มี AppImage อยู่ ดังนั้นหวังว่าน่าจะรันบนเซิร์ฟเวอร์ระยะไกลได้ง่าย
อย่างไรก็ดี ถ้าเปิด issue ไว้จะลองดูให้
บนเซิร์ฟเวอร์ระยะไกลหรือ Docker image เราติดตั้งของแบบนี้ไม่ได้
ต้องมี backend หลายแบบ สำหรับรันคำสั่งและรวบรวมข้อมูล: local, SSH, Docker
ควรติดตั้งไว้ในเครื่อง local แล้วรันคำสั่งบนเครื่องระยะไกลผ่าน SSH และรันผ่าน
docker execได้ด้วยผมสงสัยว่า “ถ้าติดตั้ง Nix ไว้ AppImage นี้จะไม่ทำงาน” นั้นถูกต้องจริงหรือเปล่า
เข้าใจเหตุผลที่ใช้ไม่ได้บน NixOS ดูเหมือนว่ามันจะรัน
systemctlของโฮสต์ไม่ได้แต่ถ้าเป็นแค่ OS อื่นที่ติดตั้ง Nix ไว้เฉย ๆ ก็ไม่เห็นเหตุผลว่าทำไมถึงจะใช้ไม่ได้
น่าสนใจที่ใน Nix v2.24.11 คำสั่ง Nix ที่ให้มาก็ใช้ไม่ได้เช่นกัน
$ nix run https://github.com/isd-project/isdล้มเหลวด้วยFailed to open archive (Unrecognized archive format)ถ้าเปลี่ยนเป็นรูปแบบ Git URL อาจทำงานได้ แต่ใน Nix มี GitHub fetcher พื้นฐานที่มีประสิทธิภาพกว่า ดังนั้นคำสั่งจริงน่าจะเป็น
nix run github:isd-project/isdตัวโปรเจกต์เองเจ๋งมาก
เดิมทีเคยอยากทำอะไรคล้าย ๆ กันด้วย DBus API ของ systemd และ Qt และก็เขียนโค้ดไว้บ้างแล้ว
DBus API มีแนวโน้มสูงว่าจะให้ฟังก์ชันที่จำเป็นได้แทบทั้งหมด แน่นอนว่าการเรียก
systemd -Hง่ายกว่าการทำ SSH tunneling เองมากน่าหงุดหงิดที่ systemd และ Linux สมัยใหม่มีข้อมูลและอินเทอร์เฟซมากมายที่จะช่วยให้การจัดการระบบ โดยเฉพาะการจัดการเดสก์ท็อปที่ตามธรรมเนียมแล้วมองไม่ค่อยเห็นภายใน ทำได้ง่ายขึ้น แต่กลับไม่ค่อยถูกเปิดเผยออกมา
เมื่อก่อนเวลาที่แอป xdg autostart ล้มเหลว ก็ยากที่จะรู้ว่าเกิดอะไรขึ้น แต่ตอนนี้ในเดสก์ท็อปบางตัว systemd เป็นตัวรันแอป xdg autostart แล้ว จึงทำ GUI ที่แสดงรายการ autostart ที่ล้มเหลวพร้อม log viewer ได้ง่าย
แต่ดูเหมือนไม่มีเครื่องมือที่มีการดูแลต่อเนื่องและฟีเจอร์ค่อนข้างครบอยู่เลย เลยน่าหงุดหงิดอยู่พอสมควร
สรุปคือ AppImage ถูก สร้างด้วย nix และ AppImage จะ “เมานต์” ไดเรกทอรี
/nix/ที่อยู่ภายใน AppImage ไม่ใช่ overlayดังนั้นการเรียกจาก TUI ที่เข้าถึง
/nix/จะไม่ได้ไปยังไดเรกทอรี/nixของระบบ และจะเกิดปัญหาแปลก ๆ สารพัดเช่น บน Ubuntu คุณอาจติดตั้ง
EDITORด้วย home-manager ได้systemctl“เข้าถึงได้” ดังนั้นisdจึงเริ่มได้ตามปกติ แต่พอเปิดEDITORใต้/nixก็หาไม่เจอ ซึ่งทำให้ผู้ใช้สับสนมากดังนั้นถ้าใช้ Nix อยู่แล้ว การบอกให้ใช้วิธีติดตั้งผ่าน Nix จึงง่ายกว่า
เอกสารที่ผิดตอนนี้แก้แล้ว
เข้าใจความหงุดหงิดนั้นเหมือนกัน
โดยส่วนตัวถ้าได้ทำเครื่องมือแบบนั้นคงสนุกมาก แต่ไม่ใช่งานง่าย และยังมีปัญหาว่าใครจะสนับสนุนงานนั้น
TUI นี้แม้ขอบเขตจะยังจัดการได้ ก็ยังใช้แรงทำค่อนข้างมาก
ดังนั้นผมคงไม่น่าจะลงทุนกับ “อินเทอร์เฟซระดับสูง” มากเกินไป
เพิ่มเติมคือ ผมก็ไม่รู้ว่าทำไมความเห็นต้นทางถึงได้รับปฏิกิริยาไม่ดี
มีใครอธิบายได้ไหม?
ดูยอดเยี่ยมและทำออกมาดี
แต่ก็น่าเสียดายที่จำเป็นต้องมีเครื่องมือแบบนี้ตั้งแต่แรก
การโต้ตอบกับ systemd ส่วนใหญ่เป็นเรื่องเล็กน้อย: รีสตาร์ตบริการ, ดูไฟล์ล็อกเพื่อตรวจว่ามีอะไรผิดพลาด, ตรวจว่าบริการเริ่มตอนบูตหรือไม่
ไม่เข้าใจว่าทำไม การใช้งานของ systemd ถึงยังขาดตกบกพร่องขนาดนี้ในงานที่พบบ่อยเหล่านี้
ถึงอย่างนั้น TUI นี้ก็ดูเหมือนจะช่วยได้ ขอบคุณ
แน่นอนว่า systemd ต่างจาก initd ตรงที่ deterministic กว่าและรวมฟีเจอร์สารพัดไว้หมด
โชคดีที่ทุกวันนี้การโต้ตอบส่วนใหญ่แบบนี้สามารถทำให้หายไปได้ด้วย automation จึงไม่มีความเกลียดชังเดือดพล่านแบบเมื่อก่อนแล้ว
ตอนนี้เหลือแค่เหมือนไฟคุกรุ่น
แต่ถ้ามี อินเทอร์เฟซที่ใกล้กับโปรเจกต์ต้นน้ำมากกว่านี้ ก็คงดีมากจริง ๆ
อย่างไรก็ตาม ดูเหมือนว่าการทำให้ systemd เป็นมิตรกับมือใหม่และเข้าถึงง่ายไม่ได้สำคัญมากนักในด้านเงินทุนสนับสนุนของพวกเขา
เรื่องความปลอดภัยจัดการอย่างไร?
ไม่ได้หมายถึงสิทธิ์ของระบบที่ Linux จัดการได้ดีอยู่แล้ว แต่อยากรู้ว่ามีอะไรรับประกันว่าเครื่องจะไม่ถูกผู้โจมตีภายนอกยึดไป ควบคุมระยะไกล
ผมคิดว่านี่เป็นคำถามสำคัญที่ควรถามตัวเองเมื่อรันแอปพลิเคชันหรือสคริปต์ที่ทำบางอย่างด้วย
sudoดังนั้นผมจึงเขียนหัวข้อ Security ไว้ค่อนข้างละเอียดในหน้าเอกสารของ isd
https://isd-project.github.io/isd/security/
ถ้ามีอะไรตกหล่นไป บอกได้เลยครับ