• 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 या लिखने योग्य /run directory आवश्यक

अन्य सिस्टमों की तुलना में फायदे

  • सभी 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 की chpst utility, run script लिखने में उपयोगी है

विशेष सेवाएँ

  • 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 या nitroctl command के माध्यम से इसे सीधे निर्दिष्ट किया जा सकता है
  • '@' के बाद का parameter हर script को पहले argument के रूप में दिया जाता है
    • उदाहरण: यदि agetty@/run और agetty@tty1 symbolic 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 बंद किए जाते हैं

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
    

लेखक

आभार

  • daemontools, freedt, runit, perp, s6 जैसे मौजूदा process supervision systems के विस्तृत विश्लेषण के आधार पर विकसित

लाइसेंस

  • 0BSD लाइसेंस (विस्तृत जानकारी के लिए LICENSE फ़ाइल देखें)

अभी कोई टिप्पणी नहीं है.

अभी कोई टिप्पणी नहीं है.