2 puan yazan GN⁺ 2025-08-24 | Henüz yorum yok. | WhatsApp'ta paylaş
  • Nitro, gömülü sistemler, sunucular, masaüstü sistemler ve konteynerlerde kullanılabilen çok küçük bir süreç süpervizörü ve init sistemidir
  • Sistem durumunu yalnızca RAM'de saklar; bu sayede salt okunur dosya sistemlerinde de sorunsuz çalışır ve hızlı, verimli bir olay tabanlı tasarım sunar
  • Yapılandırma yöntemi basit bir betik dizini yapısıdır; karmaşık yapılandırma dosyaları veya ek derleme süreçleri olmadan servis yönetimi sağlar
  • Parametreli servisler, sağlam yeniden başlatma, her servis için güvenilir günlükleme gibi konteyner ve gömülü ortamlara optimize edilmiş özellikler sunar
  • nitroctl aracıyla uzaktan kontrol, sinyal tabanlı davranış kontrolü gibi yüksek esneklik ve denetim sağlar

Genel bakış

Nitro, Linux'ta pid 1 olarak da kullanılabilen çok küçük bir süreç süpervizörüdür

Başlıca kullanım alanları şunlardır

  • gömülü, masaüstü, sunucu gibi farklı amaçlı Linux makineleri için init
  • Linux initramfs'in init'i
  • Docker/Podman/LXC/Kubernetes gibi konteyner ortamlarının init'i
  • POSIX sistemlerde yetki gerektirmeden çalışan bir süpervizyon daemon'u

Yapılandırma, dizin tabanlı bir betik yapısı kullanır ve varsayılan konum /etc/nitro'dur

Gereksinimler

  • çekirdeğin Unix socket desteği gerekli
  • tmpfs veya yazılabilir bir /run dizini gerekli

Diğer sistemlere göre avantajları

  • tüm durum bilgileri yalnızca RAM'de tutulur; bu yüzden salt okunur kök dosya sistemlerinde ek hilelere gerek kalmadan çalışır
  • olay tabanlı, polling yapmayan çalışma biçimi ile verimlilik sağlar
  • çalışma sırasında dinamik bellek tahsisi yoktur
  • dosya tanımlayıcıları sınırsız biçimde tüketilmez
  • yalnızca tek bir self-contained ikili dosya gerekir (isteğe bağlı olarak ek bir kontrol ikilisiyle)
  • yapılandırma dosyası dönüştürme ve derleme gerekmez; servisler sadece betik içeren basit dizinlerdir
  • servis yeniden başlatma ve günlükleme zinciri desteği sunar
  • sistem saati doğru olmasa bile düzgün çalışır
  • FreeBSD'de /etc/ttys üzerinden çalıştırılabilir
  • musl libc ile çok küçük bir statik ikili üretilebilir

Servis yönetimi

  • her servis dizini (varsayılan olarak /etc/nitro altında) şu dosyaları içerebilir

    • setup: servis başlamadan önce çalıştırılan isteğe bağlı betik; servis yalnızca normal çıkışta (0) başlatılır
    • run: servis çalışma betiği; sonlanmadığı sürece servis ayakta kabul edilir, yoksa one-shot servis olarak işlenir
    • finish: run sona erdikten sonra çalışan isteğe bağlı betik; çıkış durumu ve sinyal değeri argüman olarak verilir
    • log: başka bir servis dizinine işaret eden sembolik bağ; run çıktısı o servisin girdisine pipe edilir (günlükleme zinciri için kullanılabilir)
    • down: bu dosya varsa nitro bu servisi varsayılan olarak ayağa kaldırmaz
    • dizin adı @ ile bitiyorsa yok sayılır ve parametreli servis olarak kullanılabilir
    • servis adı 64 karakterden kısa olmalı ve /, ,, satır sonu karakteri içeremez
  • runit'in chpst yardımcı aracı, run betikleri yazarken kullanışlıdır

Özel servisler

  • LOG: log bağlantısı olmayan tüm servislerin günlükleri için varsayılan servis
  • SYS: SYS/setup, tüm servisler başlamadan önce çalışır; sıralı servis başlatma uygulanabilir
    • SYS/finish: genel kapanış aşamasına girilmeden önce çalışır
    • SYS/final: tüm süreçler sonlandıktan sonra çalışır
    • SYS/fatal: ölümcül hata oluşursa çıkış yerine çalışır (varsa)
    • SYS/reincarnate: shutdown yerine çalışır; örneğin initramfs'in yeniden uygulanması için kullanılabilir

Parametreli servisler

  • @ ile biten servis dizinleri nitro tarafından yok sayılır, ancak sembolik bağ veya nitroctl komutuyla doğrudan belirtilebilir
  • @ sonrasındaki parametre, her betiğe ilk argüman olarak aktarılır
    • örnek: agetty@/run ve agetty@tty1 sembolik bağı varsa agetty@/run tty1 çalıştırılır
    • nitroctl up agetty@tty2 girildiğinde agetty@/run tty2 çalıştırılabilir (dizinin var olup olmaması önemli değildir)

Çalışma modları

  • tüm yaşam döngüsü önyükleme, servis çalıştırma (süpervizyon), kapanış olmak üzere üç aşamadan oluşur
    • önyükleme: özel servis SYS varsa setup ile başlar, ardından down olmayan tüm servisler başlatılır
    • bir servis sonlanırsa yeniden başlatılır; ancak son yeniden başlatma çok yeniyse 2 saniye beklenir
    • nitroctl Reboot veya Shutdown ile kapanış sinyali gönderilebilir
      • bu durumda SYS/finish → tüm servislere SIGTERM (en fazla 7 saniye beklenir) → SIGKILL → SYS/final → kapanış sırası uygulanır
    • konteyner veya yetkisiz süpervizör kullanımında yalnızca süreçler sonlandırılır

nitroctl ile kontrol

  • nitroctl CLI aracıyla nitro uzaktan kontrol edilebilir

Komut örnekleri:

  • list: servis listesi, durum, PID, uptime, son çıkış durumu çıktılanır
  • up/down/start/stop/restart: servis başlatma, durdurma, yeniden başlatma gibi işlemler
  • sinyal gönderme: p(SIGSTOP), c(SIGCONT), h(SIGHUP), a(SIGALRM), i(SIGINT), q(SIGQUIT), 1(SIGUSR1), 2(SIGUSR2), t(SIGTERM), k(SIGKILL)
  • pidof: belirtilen servisin PID'sini çıktılar
  • rescan: servis dizinlerini yeniden okur, eklenen/kaldırılan servisleri yansıtır
  • Shutdown/Reboot: tüm sistemi kapatma veya yeniden başlatma

Sinyallerle kontrol

  • nitro sürecine doğrudan sinyal göndererek kontrol sağlanabilir
    • SIGHUP: servisleri yeniden tara (rescan)
    • SIGINT: yeniden başlat
    • SIGTERM: kapat (nitro pid 1 değilse)

Linux'ta init olarak nitro

  • Nitro, self-contained bir ikili olarak Linux'ta doğrudan pid 1 şeklinde önyüklenebilir
  • gerekirse /dev ve /run bağlanır; diğer işlemler SYS/setup içinde yapılır
  • Ctrl-Alt-Del olayı, düzenli bir yeniden başlatma sürecini tetikler

Docker konteynerinde init olarak Nitro kullanımı

  • Nitro statik olarak derlenebilir ve konteynere kolayca eklenebilir
  • varsayılan socket yolunun kullanılabilmesi için konteynerde /run bulunmalıdır
  • kontrol socket'i bind mount edilirse dışarıdan nitroctl ile uzaktan kontrol sağlanabilir

FreeBSD'de Nitro

  • FreeBSD init'in nitro'yu süpervize etmesi için /etc/ttys dosyasına aşağıdaki satır eklenebilir
    /etc/nitro "/usr/local/sbin/nitro" "" on
    

Yazar

Teşekkürler

  • daemontools, freedt, runit, perp, s6 gibi mevcut süreç süpervizyon sistemlerinin ayrıntılı analizi temel alınarak geliştirilmiştir

Lisans

  • 0BSD lisansı (ayrıntılar için LICENSE dosyasına bakın)

Henüz yorum yok.

Henüz yorum yok.