[Proje] RIS: Python ile Minimalist Init Sistemi Denemesi
Herkese merhaba,
Bir süredir sistem programlama ve init süreçleri üzerine çalışıyorum. PID 1’in sistem açılışındaki kritik rolünü teknik olarak deneyimlemek ve UNIX felsefesini (“tek bir işi yap ve en iyi şekilde yap”) Python ile nasıl uygulayabileceğimi keşfetmek adına bir süredir üzerinde çalıştığım RIS (Reimagined Init System) projesini sizlerle paylaşmak istiyorum.
Projem şu an geliştirme aşamasındadır. Init sistemlerinin çalışma prensiplerine meraklı olanların veya bu konuda tecrübesi olup “şurası şöyle olsa daha verimli olurdu” diyecek olanların fikirlerini duymaktan memnuniyet duyarım.
RIS Nedir?
RIS, GNU/Linux için Python ile yazılmış aşırı minimal ve hafif bir init sistemidir. Diğer init sistemlerinin aksine RIS, servis başlatma mantığını kendi içinde barındırmaz. Servis yöneticisi/başlatıcı tamamen dışarıdan sağlanır; bu sayede sistem son derece modüler ve sade kalır.
Proje Linki: Codeberg/ris
Teknik Özellikler
- İletişim (Pipe): RIS, komutları yönetmek için standart bir FIFO pipe (/var/run/ris.pipe) kullanır.
- Komut Seti:
- rl0 / shutdown / poweroff: Sistemi kapatır.
- rl6 / reboot: Sistemi yeniden başlatır.
- (Komutları echo komutu ile doğrudan pipe’a göndererek çalıştırabilirsiniz.)
- Sinyal Desteği: SIGTERM (shutdown) ve SIGINT (reboot) sinyalleri ile de işlem yapabilir.
- Loglama: Runtime loglarını /var/run/ris.log altında tutar; kapanışta bu logları /var/log/ris-[zaman-imzası].log olarak arşivler.
Kurulum ve Başlangıç
- Klonlayın: git clone javav12/ris: a modular init system for gnu/linux - Codeberg.org
- Yapılandırın: src/main.py dosyasındaki service_starter_pid kısmını kendi servis başlatıcınızın yoluyla değiştirin.
- Derleyin: sudo ./build.sh (Çıktı build klasöründe oluşacaktır).
- Hazırlık: /dev, /proc ve /sys dizinlerini mount eden bir script (example/prepare.sh gibi) oluşturun ve bunu hedef cihaza /init olarak kopyalayın.
- Kurun: Derlenmiş dosyayı /sbin/ris altına taşıyın.
Çalışma Şeması
┌───────────────────────────────────────────────────────────────────────────────────────────┐
│ │
│ │
│ │
│ LOGS │
│ ┌─────────────────────────────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ Runtime logs Archived Logs │ │
KERNEL Space ┌─────────────────────────┘ │ ┌────────────────────┐ ┌──────────────────────────────┐ │ │
┌──────────────┐ │ ┌──│───► │ /var/run/ris.log │ ┌─►│ /var/log/ris-[timestamp].log │ │ │
│ │ │ ┌────────────┐ │ │ └────────────┬───────┘ │ └──────────────────────────────┘ │ │
│ ┌────────┐ │ │ ┌────►│ Prepare.sh │ │ │ │ │ │ │
│ │ KERNEL ├──│─│─────┘ │ (/init) │ write│ └────── Archive ────┘ │ │
│ └────────┘ │ │ └─┬──────────┘ │ │ │ │
│ │ │ │ │ └─────────────────────────────────────────────────────────────────────────────┘ │
└──────────────┘ │ └─── exec ────────┐ │ │
│ ┌──▼──┴─┐ │
│┌─────────┐ ┌────►│ RIS │ │
││ Command │ │ └───┬───┘ │
│└─┬───────┘ │ │ ┌────────────────────────────┐ │
│ │ │ └──────► │ Service Starter (external) │ │
│ │ FIFO PIPE │ └────────────────────────────┘ │
│ │ ┌────────────┴──────┐ │
│ └────► │ /var/run/ris.pipe │ │
│ └───────────────────┘ │
└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
Katkıda Bulunma
Projeye katkı sağlamak isterseniz Pull Request gönderebilirsiniz. Kodun ruff standartlarına uygun olması (test edilmiş olması) yeterlidir.
Uyarı: Kod henüz geliştirme aşamasındadır (beta öncesi). Lütfen ana makinenizde denemeyin; her zaman bir sanal makine (VM) kullanın.
Değerli fikirlerinizi bekliyorum, iyi çalışmalar!