OpenRC

Openrc sistem açılışında çalışacak uygulamaları çalıştıran servis yöneticisidir.

Çalıştırılması

Openrc servis yönetiminin çalışması için boot parametrelerine yazılması gerekmektedir. /boot/grub.cfg içindeki linux /vmlinuz init=/usr/sbin/openrc-init root=/dev/sdax olan satırda init=/usr/sbin/openrc-init yazılması gerekmektedir. Artık sistem openrc servis yöneticisi tarafından uygulamalar çalıştırılacak ve sistem hazır hale getirilecek.

openrc Kullanımı

Servis etkinleştirip devre dışı hale getirmek için rc-update komutu kullanılır. Aşağıda udhcpc internet servisi örnek olarak gösterilmiştir. /etc/init.d/ konumunda udhcpc dosyamızın olması gerekmektedir.

# servis etkinleştirmek için
rc-update add udhcpc boot
# servisi devre dışı yapmak için
rc-update del udhcpc boot
# Burada udhcpc servis adı, boot ise runlevel adıdır.

Elle /etc/runlevels/ altında bulunan boot, default, nonetwork, shutdown, sysinit dizinlerine /etc/init.d/ dizininin altındaki dosyaları ln komutuyla kısayol yaparsak rc-update add komutunun yaptığı görevi yapmış oluruz. Kısayolu silersek rc-update del komutunun görevini yapmış oluruz.

/etc/runlevels/ altında bulunan boot, default, nonetwork, shutdown, sysinit dizinler servis dosyalarımızın hangi sırayla çalışacağını belirleyen dizinlerdir. Mesela boot dizini ilk açılış sırasında çalışacak olan servis dosyalarının konulacağı dizindir.

Servisleri başlatıp durdurmak için ise rc-service komutu kullanılır.

rc-service udhcpc start
# veya şu şekilde de çalıştırılabilir.
/etc/init.d/udhcpc start

Servislerin durumunu öğrenmek için rc-status komutu kullanılır. Ayrıca sistemdeki servislerin sonraki açılışta hangisinin başlatılacağını öğrenmek için parametresiz olarak rc-update kullanabilirsiniz.

# şu an hangi servislerin çalıştığını gösterir
rc-status
# sonraki açılışta hangi servislerin çalışacağını gösterir
rc-update

Sistemi kapatmak veya yeniden başlatmak için openrc-shutdown komutunu kullanabilirsiniz.

openrc-shutdown -p 0     # kapatmak için
openrc-shutdown -r 0     # yeniden başlatmak için

Servis Dosyası

Openrc servis dosyaları basit birer bash betiğidir. Bu betikler openrc-run komutu ile çalıştırılır ve çeşitli fonksiyonlardan oluşabilir. Servis dosyaları /etc/init.d içerisinde bulunur. Servisleri ayarlamak için ise /etc/conf.d içerisine aynı isimle ayar dosyası oluşturabiliriz.

Çalıştırılacak komut, komut parametreleri ve pidfile dosyamızı aşağıdaki gibi belirtebiliriz.

description="Ornek servis"
name="ornek-servis"
command=/usr/bin/ornek-servis
command_args=--parametre
pidfile=/run/ornek-servis.pid
command_background=true
start_stop_daemon_args="--quiet"
output_log="/var/log/ornek-servis.log"
error_log="/var/log/ornek-servis.err"

Eğer bu scriptin sadece boot sırasında bir kere çalışması yetiyorsa, o zaman command_background=true ayarını kaldırın. OpenRC aslında "oneshot" türü servisleri destekler. Böyle bir senaryoda pidfile=/run/ornek-servis.pid gerek yok. Mesajların gözükmemesi için start_stop_daemon_args="--quiet" kullanılır.

Bununla birlikte start, stop, status, reload, start_pre, stop_pre gibi fonksiyonlar da yazabiliriz.

start(){
    ebegin "Starting ${RC_SVCNAME}"
    start-stop-daemon --start --pidfile "/run/servis.pid" --exec /usr/bin/ornek-servis --parametre
}

Servis bağımlılıklarını belirtmek için ise depend fonksiyonu kullanılır.

depend() {
  need localmount
  after dbus
}