Nitro: छोटा और लचीला init सिस्टम तथा प्रोसेस सुपरवाइज़र
(git.vuxu.org)- Nitro एक अत्यंत छोटा प्रोसेस सुपरवाइज़र और init सिस्टम है, जिसे embedded, server, desktop और container—सभी पर लागू किया जा सकता है
- यह सिस्टम स्टेट को केवल RAM में संग्रहीत करता है, इसलिए read-only file system पर भी बिना दिक्कत काम करता है, और तेज़ व कुशल event-based design प्रदान करता है
- कॉन्फ़िगरेशन का तरीका सरल script directory structure है, जिससे जटिल config file या अतिरिक्त build process के बिना service management संभव है
- Parameterized services, मज़बूत restart, और हर service के लिए विश्वसनीय logging जैसी container और embedded environment के लिए अनुकूलित सुविधाएँ देता है
- nitroctl tool के ज़रिए remote control, signal-based behavior control आदि के माध्यम से उच्च लचीलापन और नियंत्रण सुनिश्चित करता है
अवलोकन
Nitro Linux पर pid 1 के रूप में भी इस्तेमाल किया जा सकने वाला अत्यंत छोटा प्रोसेस सुपरवाइज़र है
इसके प्रमुख उपयोग क्षेत्र इस प्रकार हैं
- embedded, desktop, server आदि विभिन्न उपयोगों वाली Linux मशीनों के लिए init
- Linux initramfs का init
- Docker/Podman/LXC/Kubernetes आदि container environment का init
- POSIX सिस्टम पर बिना विशेषाधिकार के चलने वाला supervision daemon
कॉन्फ़िगरेशन में directory-based script structure का उपयोग होता है, और इसका default location /etc/nitro है
आवश्यकताएँ
- kernel में Unix socket समर्थन आवश्यक
tmpfsया लिखने योग्य/rundirectory आवश्यक
अन्य सिस्टमों की तुलना में फायदे
- सभी state information केवल RAM में रखी जाती है, इसलिए read-only root file system पर भी किसी अलग तरकीब के बिना काम करता है
- event-based, polling-free operation के कारण बेहतर दक्षता
- runtime के दौरान dynamic memory allocation नहीं होता
- file descriptor अनंत रूप से consume नहीं होते
- केवल एक self-contained binary (वैकल्पिक रूप से control binary अतिरिक्त) की आवश्यकता होती है
- config file conversion और compilation की जरूरत नहीं; service बस script वाली एक सरल directory होती है
- service restart और logging chain का समर्थन
- system clock सटीक न होने पर भी सामान्य रूप से काम करता है
- FreeBSD पर
/etc/ttysके माध्यम से चलाया जा सकता है - musl libc के साथ अत्यंत छोटा static binary बनाया जा सकता है
सेवा प्रबंधन
-
हर service directory (default रूप से
/etc/nitroके भीतर) में निम्न फ़ाइलें हो सकती हैंsetup: service शुरू होने से पहले चलने वाली (वैकल्पिक) script; केवल सफल exit (0) पर ही service शुरू हो सकती हैrun: service execution script; जब तक यह समाप्त नहीं होती, service को सक्रिय माना जाता है; अगर यह implement न हो तो one-shot service माना जाता हैfinish:runके समाप्त होने के बाद चलने वाली (वैकल्पिक) script, जिसे exit status और signal value argument के रूप में दिए जाते हैंlog: किसी अन्य service directory की ओर इशारा करने वाला symbolic link;runका output उस service के input में pipe किया जाता है, जिससे logging chain का उपयोग संभव हैdown: यदि यह फ़ाइल मौजूद है, तो nitro डिफ़ॉल्ट रूप से इस service को शुरू नहीं करता- यदि directory name
'@'पर समाप्त होता है, तो इसे अनदेखा किया जाता है और parameter service के रूप में इस्तेमाल किया जा सकता है - service name 64 अक्षरों से छोटा होना चाहिए, और इसमें
/,,, या newline character शामिल नहीं हो सकते
-
runit की
chpstutility,runscript लिखने में उपयोगी है
विशेष सेवाएँ
LOG: उन सभी services के लिए default logging service जिनमें log link नहीं हैSYS:SYS/setupसभी services के शुरू होने से पहले चलता है, जिससे ordered service startup लागू किया जा सकता हैSYS/finish: पूरे shutdown चरण में प्रवेश से पहले चलता हैSYS/final: सभी processes समाप्त होने के बाद चलता हैSYS/fatal: fatal error होने पर exit के बजाय चलाया जाता है (यदि मौजूद हो)SYS/reincarnate: shutdown के बजाय चलाया जाता है, जैसे initramfs को दोबारा लागू करने जैसे उपयोगों के लिए
Parameterized services
'@'पर समाप्त होने वाली service directory को nitro अनदेखा करता है, लेकिन symbolic link याnitroctlcommand के माध्यम से इसे सीधे निर्दिष्ट किया जा सकता है'@'के बाद का parameter हर script को पहले argument के रूप में दिया जाता है- उदाहरण: यदि
agetty@/runऔरagetty@tty1symbolic link मौजूद हों, तोagetty@/run tty1चलाया जाता है nitroctl up agetty@tty2देने परagetty@/run tty2चलाया जा सकता है (चाहे directory मौजूद हो या नहीं)
- उदाहरण: यदि
ऑपरेशन मोड
- पूरा lifecycle boot, service execution (supervision), shutdown—इन तीन चरणों में बना है
- boot: यदि विशेष service
SYSमौजूद हो, तोsetupसे शुरू किया जाता है; इसके बाद सभी non-down services चलाई जाती हैं - यदि कोई service समाप्त हो जाए, तो उसे restart किया जाता है; लेकिन यदि हाल का restart बहुत तेज़ी से हुआ हो तो 2 सेकंड प्रतीक्षा की जाती है
nitroctl RebootयाShutdownसे shutdown signal भेजा जा सकता है- इस स्थिति में
SYS/finish→ सभी services को SIGTERM (अधिकतम 7 सेकंड प्रतीक्षा) → SIGKILL →SYS/final→ shutdown sequence
- इस स्थिति में
- container या unprivileged supervisor के उपयोग में केवल processes बंद किए जाते हैं
- boot: यदि विशेष service
nitroctl के माध्यम से नियंत्रण
- nitroctl CLI tool के ज़रिए दूर से nitro को नियंत्रित किया जा सकता है
कमांड उदाहरण:
- list: service सूची, state, PID, uptime, अंतिम exit status दिखाता है
- up/down/start/stop/restart: service start·stop·restart आदि नियंत्रण
- signal भेजना: p(SIGSTOP), c(SIGCONT), h(SIGHUP), a(SIGALRM), i(SIGINT), q(SIGQUIT), 1(SIGUSR1), 2(SIGUSR2), t(SIGTERM), k(SIGKILL)
- pidof: निर्दिष्ट service का PID दिखाता है
- rescan: service directory को फिर से पढ़ता है, और जोड़ी/हटाई गई services को लागू करता है
- Shutdown/Reboot: पूरे सिस्टम को बंद/रीबूट करता है
signal के माध्यम से नियंत्रण
- nitro process को सीधे signal भेजकर नियंत्रण किया जा सकता है
- SIGHUP: service rescan
- SIGINT: reboot
- SIGTERM: shutdown (यदि nitro pid 1 नहीं है)
Linux में init के रूप में nitro
- Nitro एक self-contained binary है जो Linux pid 1 के रूप में सीधे boot हो सकता है
- आवश्यकता होने पर
/dev,/runको mount करता है, और अन्य कार्यSYS/setupमें संभाले जाते हैं - Ctrl-Alt-Del event पर सुव्यवस्थित reboot trigger करता है
Docker container में init के रूप में Nitro का उपयोग
- Nitro को static build करके container में आसानी से शामिल किया जा सकता है
- default socket path का उपयोग करने के लिए container में
/runमौजूद होना चाहिए - यदि control socket को bind mount किया जाए, तो बाहर से nitroctl द्वारा remote control संभव है
FreeBSD पर Nitro
/etc/ttysमें नीचे की पंक्ति जोड़कर FreeBSD init से nitro को supervise कराया जा सकता है/etc/nitro "/usr/local/sbin/nitro" "" on
लेखक
- Leah Neukirchen leah@vuxu.org
आभार
- daemontools, freedt, runit, perp, s6 जैसे मौजूदा process supervision systems के विस्तृत विश्लेषण के आधार पर विकसित
लाइसेंस
- 0BSD लाइसेंस (विस्तृत जानकारी के लिए LICENSE फ़ाइल देखें)
अभी कोई टिप्पणी नहीं है.