Show HN: इंटरैक्टिव Systemd – Systemd यूनिट्स के साथ काम करने का बेहतर तरीका
(isd-project.github.io)isdएक ऐसा टूल है जोsystemdयूनिट्स को मैनेज करने का बेहतर तरीका देता है। यह terminal user interface (TUI) के ज़रिये यूनिट्स खोजने, प्रीव्यू को अपने-आप रिफ्रेश करने, स्मार्टsudoहैंडलिंग और user-customized interface उपलब्ध कराता है
संक्षिप्त प्रेरणा
isdsystemdयूनिट्स के साथ इंटरैक्ट करने की जटिल प्रक्रिया को सरल बनाता है और उपयोगकर्ता को काम की जानकारी देता है- बार-बार
systemctlकमांड टाइप करने की झंझट कम करता है और आउटपुट को अपने-आप रिफ्रेश करता है
इंस्टॉलेशन
isdको AppImage, nix, uv के माध्यम से इंस्टॉल किया जा सकता है- AppImage एक single executable file है जो सभी Linux distributions पर चल सकती है, इसलिए इसे सीमित permissions वाले remote servers पर भी इस्तेमाल किया जा सकता है
- nix environment में
isdइंस्टॉल करने के लिए nix package का उपयोग किया जा सकता है - uv एक Python package manager है, जिसके ज़रिये
isdको इंस्टॉल और मैनेज किया जा सकता है
isd का उपयोग
isdsystemdयूनिट्स को खोज सकता है, उनकी स्थिति देख सकता है, और कई यूनिट्स की detailed information को प्रीव्यू में दिखाता है- चुनी गई यूनिट पर
systemctlकमांड भेजता है और status output को अपने-आप रिफ्रेश करता है isdके भीतरpagerखोलकर पूरा status output देखा जा सकता हैJournaloutput के लिए अलगpagerखोला जा सकता है, और custom themes व key bindings सेट किए जा सकते हैं
user/system mode
isduserयाsystemmode में चलता है, और मोड के अनुसार दिखाई देने वाले यूनिट्स के प्रकार बदलते हैं
fuzzy search
- fuzzy search bar के ज़रिये इनपुट से मेल खाने वाले सभी यूनिट्स और यूनिट files लोड किए जाते हैं, और उनकी current state के अनुसार highlight किया जाता है
multiple unit selection
- search result widget में कई यूनिट्स चुने जा सकते हैं, और चुनी गई यूनिट्स का प्रीव्यू दिया जाता है
command palette
- command palette खोलकर सभी उपलब्ध commands और key bindings देखे जा सकते हैं
commands
- उदाहरण के लिए,
Ctrl+Oदबाकर चुनी गई यूनिट को रोका जा सकता है
pager support
isdचलाते समयpagerखोलकर पूरा preview output देखा जा सकता है
customization
isdcustomization और configurability देता है, ताकि उपयोगकर्ता अपनी सर्वोत्तम productivity के लिए विभिन्न themes और key bindings का उपयोग कर सके
सारांश
- यह उपयोगी है या नहीं, इसे समझने के लिए
isdको खुद आज़माने की सलाह दी जाती है
अगले कदम
- customization और security sections देखें
1 टिप्पणियां
Hacker News टिप्पणियां
देखने में अच्छा है
systemd service scripts में ExecStop को handle करने का तरीका सच में काफी confusing था
ExecStartवह command है जो system boot के समय या user द्वारा service start करने पर चलती है, लेकिनExecStopstart command खत्म होने के बाद चलता हैअगर system shutdown या user द्वारा service रोकने पर stop command चलवानी हो, तो
RemainAfterExit=yesset करना पड़ता हैExecStopअसल में “service stop करने” वाले event से ज्यादा “cleanup के समय” वाले event के करीब हैयह याद रखना चाहिए कि systemd daemons के हिसाब से बना है
अगर service सिर्फ एक command चलाती है जो कभी न कभी खत्म हो जाती है, तो systemd को साफ बताना होगा कि उसे daemon से अलग तरह से treat करे
जैसा बाकी लोगों ने कहा, शायद
oneshot+RemainAfterExitवही combination है जो आप चाहते हैंtype=forkingमें ExecStop expected तरीके से काम करता हैसच में बहुत पसंद आया
बीमार पड़ने तक सिर्फ pure command line इस्तेमाल करता रहा, लेकिन हाल में
lazygit/lazydockerजैसे tools से opaque system/tree state में झांकना शुरू किया और productivity काफी बढ़ गईमैं कई user और system-level services manage करता हूं, लेकिन debugging उबाऊ है
पहले sentence में common commands और उनकी असुविधा गिनाने वाला हिस्सा सच में relate हुआ
NixOS होने की वजह से immutable unit files को सीधे edit करने वाला तरीका काम नहीं करेगा, लेकिन service exploration, visibility और management काफी मददगार लगते हैं
docs में “guide” जोड़ने की योजना है, लेकिन summary यह है कि NixOS में unit debug करते समय
systemctl edit --runtimeदेखना अच्छा रहेगाdebugging काफी आसान हो जाती है
बहुत अच्छा लग रहा है
मैं एक similar project maintain करता हूं और systemd/dbus API से deal करना काफी painful रहा है
इसे इस्तेमाल करके देखना चाहता हूं कि कुछ सीखने को मिलता है या नहीं
https://github.com/rgwood/systemctl-tui
शायद खूब इस्तेमाल करूंगा
बस deb package की कमी है
आखिरकार systemd-client आ गया, अच्छा लगा
अगला step macOS, FreeBSD, Windows जैसे non-Linux के लिए TUI हो तो अच्छा होगा
macOS पर LaunchControl.app इस्तेमाल करता हूं, लेकिन वह TUI नहीं है
एक बात,
uv 0.5.21में नीचे की तरह करना पड़ा औरuvxबिल्कुल काम नहीं कर रहा था$ uv tool install git+https://github.com/isd-project/isdइसके बजाय docs का
$ uv tool install https://github.com/isd-project/isd/isd@latestकाम नहीं कियाफिर भी
uv,pip(x)से काफी तेज है, इसलिए मैंने switch कर लियाबताने के लिए धन्यवाद
uvकी वजह से ऐसे tools install करना इतना आसान हो जाना बढ़िया हैinstall procedure में एक चीज छूटी है:
uvPython dependencies को नजरअंदाज करके यह tool install करता हैमेरी machine 3.10 पर है, इसलिए
isdनहीं चला, और-p 3.13option से यह solve हो गयाdocs में mention करने लायक है
वह flag docs में शामिल कर दिया है
“अगर type करते-करते कभी irritate हुए हों” — यह तो बिल्कुल मेरी बात है
जबकि मुझे systemd पसंद है, फिर भी ऐसा है
अभी install करके नहीं देखा, लेकिन जानना चाहता हूं कि क्या यह remote host से connect कर सकता है
मैं अक्सर
systemctl --host status foo.serviceइस्तेमाल करता हूं, और status, timers, logs वगैरह remote से check करता हूंsystemctl --hostपहली बार सुन रहा हूंअफसोस, यह supported नहीं है
मोटे तौर पर यह local
systemctlके ऊपर एक fancy wrapper जैसा हैफिर भी AppImage है, इसलिए remote server पर चलाना hopefully आसान हो सकता है
खैर, issue खोलें तो मैं देखूंगा
remote servers या Docker images में ऐसी चीज install नहीं कर सकते
command चलाने और जानकारी collect करने के लिए कई backends चाहिए: local, SSH, Docker
local पर install करने के बाद SSH से remote machine पर commands चला सकना चाहिए, और
docker execसे भी चला सकना चाहिए“अगर Nix installed है तो यह AppImage काम नहीं करेगा” — क्या यह सचमुच सही है, इस पर शक है
NixOS पर काम न करने की वजह समझ आती है। ऐसा लग रहा था कि यह host का
systemctlचला नहीं पा रहा थालेकिन सिर्फ किसी दूसरे OS पर Nix installed होने भर से यह न चले, इसकी कोई वजह नहीं दिखती
दिलचस्प बात यह है कि Nix v2.24.11 में दिया गया Nix command भी काम नहीं कर रहा था
$ nix run https://github.com/isd-project/isdFailed to open archive (Unrecognized archive format)के साथ fail हो गयाGit URL फॉर्म में बदलने पर शायद चल जाए, लेकिन Nix में ज़्यादा efficient built-in GitHub fetcher है, इसलिए असली command
nix run github:isd-project/isdसही लगती हैयह project अपने आप में बढ़िया है
मैं असल में systemd की DBus API और Qt से कुछ ऐसा ही बनाना चाहता था, और थोड़ा code भी लिखा था
DBus API में ज़रूरी functionality लगभग मिल जाने की संभावना है। हालांकि अपनी SSH tunneling implement करने की तुलना में
systemd -Hcall करना बेशक कहीं आसान हैsystemd और आधुनिक Linux में system management, खासकर desktop management को आसान बनाने के लिए data और interfaces भरे पड़े हैं—एक ऐसा क्षेत्र जो परंपरागत रूप से अंदर से ज़्यादा दिखाई नहीं देता था—फिर भी उनका सही exposure न होना परेशान करता है
पहले जब xdg auto-start app fail होता था, तो यह जानना मुश्किल होता था कि हुआ क्या; अब कुछ desktops में systemd xdg auto-start apps चलाता है, इसलिए failed auto-start items और log viewer दिखाने वाला GUI बनाना आसान है
लेकिन maintain होने वाला और feature-wise काफ़ी complete tool नहीं दिखता, यह काफ़ी frustrating है
संक्षेप में, AppImage को nix से generate किया जाता है, और AppImage अपने अंदर की
/nix/directory को “mount” करता है। यह overlay नहीं हैइसलिए TUI में
/nix/तक access करने वाली calls system की/nixdirectory तक नहीं जातीं, और तरह-तरह की अजीब समस्याएँ आती हैंउदाहरण के लिए Ubuntu पर home-manager से
EDITORinstall किया जा सकता हैsystemctl“accessible” है, इसलिएisdठीक से start हो जाता है, लेकिन/nixके नीचे मौजूदEDITORखोलने पर वह नहीं मिलता, जो user के लिए बहुत confusing हैइसलिए अगर आप पहले से Nix इस्तेमाल कर रहे हैं, तो Nix installation method इस्तेमाल करने को कहना ज़्यादा आसान है
गलत documentation अब ठीक कर दी है
उस frustration से भी सहमत हूँ
निजी तौर पर ऐसा tool बनाना सच में मज़ेदार होगा, लेकिन यह आसान काम नहीं है, और कौन उस काम को support करेगा यह भी सवाल है
इस TUI का scope manageable था, फिर भी इसमें काफ़ी काम लगा
इसलिए शायद “higher-level interface” में बहुत ज़्यादा invest नहीं करूँगा
वैसे, original comment पर reaction खराब क्यों है, समझ नहीं आ रहा
कोई समझा सकता है?
शानदार दिखता है और अच्छी तरह बनाया गया है
बस अफ़सोस है कि ऐसे tool की ज़रूरत पड़ती है
systemd के साथ ज़्यादातर interaction मामूली होते हैं: service restart करना, log file देखकर पता लगाना कि क्या गलत हुआ, boot पर service start होती है या नहीं यह check करना
ऐसे common tasks में systemd की usability इतनी कम क्यों है, यह समझ नहीं आता
फिर भी यह TUI मददगार लगता है, इसलिए धन्यवाद
बेशक systemd, initd के उलट ज़्यादा deterministic है और हर तरह की functionality साथ लाता है
अच्छी बात है कि आजकल इन interactions में से ज़्यादातर को automate करके गायब किया जा सकता है, इसलिए पहले जैसी जलती हुई नफ़रत अब नहीं है
अब बस धीमी आँच जैसी रह गई है
फिर भी अगर कोई interface upstream project के थोड़ा करीब होता, तो सच में अच्छा होता
हालांकि systemd को beginner-friendly और accessible बनाना उनकी funding में बहुत महत्वपूर्ण नहीं लगता
Security कैसे handle की गई है?
मेरा मतलब system permissions से नहीं है, जिसे Linux अच्छी तरह संभालता है; जानना यह है कि बाहरी attacker इसे hijack करके remote control नहीं कर पाएगा, इसकी क्या guarantee है
मुझे लगता है कि
sudoसे कुछ करने वाली application या script चलाते समय खुद से पूछने के लिए यह एक महत्वपूर्ण सवाल हैइसलिए मैंने isd docs page में काफ़ी detailed Security section लिखा है
https://isd-project.github.io/isd/security/
अगर कुछ छूट गया हो तो बताइए