D-Bus Yapılandırması

Bu belge, systemd kullanmayan sistemlerde (OpenRC tabanlı) D-Bus servisinin kurulumu, yapılandırılması ve başlatılmasını anlatır. D-Bus, Linux ortamında uygulamalar arasında mesajlaşma sağlayan bir IPC (Inter-Process Communication) sistemidir.

Adım 1: Kullanıcı ve Grup Oluşturma

echo "messagebus:x:109:" >> /etc/group
echo "messagebus:x:103:109::/nonexistent:/usr/sbin/nologin" >> /etc/passwd

Adım 2: Sistem UUID ve machine-id Ayarı

if [ ! -f /etc/machine-id ] ; then
    dbus-uuidgen --ensure=/etc/machine-id
fi

Açıklama:

- `/etc/machine-id` dosyası sistemin benzersiz kimliğini tutar.
- `dbus-uuidgen --ensure` komutu, dosya yoksa oluşturur, varsa korur.
- Bu kimlik, D-Bus servislerinin ve bazı uygulamaların doğru çalışması için zorunludur.

Adım 3: dbus-daemon-launch-helper İzin Kontrolü

if busybox ls /bin/su -la | grep "^...s" >/dev/null ; then
    chmod 4755 /usr/libexec/dbus-daemon-launch-helper
fi

Açıklama:

- `dbus-daemon-launch-helper`, kullanıcı bazlı D-Bus daemonlarını başlatır.
- SUID bitinin (4) set edilmesi, root yetkisi ile çalışmasını sağlar.

Adım 4: D-Bus Yapılandırma Yenileme

dbus-send --system --type=method_call --dest=org.freedesktop.DBus / \
    org.freedesktop.DBus.ReloadConfig >/dev/null 2>&1 || :

Açıklama:

- Bu komut, D-Bus sistem servisine yeni yapılandırmaları yüklemesini söyler.
- `--system` parametresi sistem bus’ını hedef alır.
- Hata oluşursa komut sessizce geçer (`|| :`).

Adım 5: D-Bus Servisini Başlatma (OpenRC)

D-Bus için OpenRC init script’i /etc/init.d/dbus şu mantıkla çalışır:

#!/sbin/openrc-run
#----------------------------------------------------------------------------------------------
name="System Message Bus"
description="An IPC message bus daemon"

extra_started_commands="reload"

supervisor=supervise-daemon
command="/usr/bin/dbus-daemon"
command_args="--system --nofork --nopidfile --syslog-only ${command_args:-}"
command_background="yes"
pidfile="/run/$RC_SVCNAME.pid"

depend() {
    need localmount
    after bootmisc
}

start_pre() {
    mkdir -p /run/dbus
    /usr/bin/dbus-uuidgen --ensure=/etc/machine-id
}

stop_post() {
    [ ! -S /run/dbus/system_bus_socket ] || rm -f /run/dbus/system_bus_socket
}

reload() {
    ebegin "Reloading $name configuration"
    /usr/bin/dbus-send --print-reply --system --type=method_call \
            --dest=org.freedesktop.DBus \
            / org.freedesktop.DBus.ReloadConfig > /dev/null
    eend $?
}

Açıklama:

- `supervise-daemon`: OpenRC’nin daemon’u denetlemesini sağlar.
- `command` ve `command_args`: D-Bus daemonunu sistem bus modunda başlatır.
- `start_pre()`: Servis başlamadan önce gerekli dizini oluşturur ve machine-id’yi doğrular.
- `stop_post()`: Servis durduğunda socket dosyasını temizler.
- `reload()`: Yapılandırma değişikliklerini uygulamak için D-Bus’a mesaj yollar.
- `depend()`: Servisin başlatılması için gerekli bağımlılıklar (localmount, bootmisc) belirtilir.
- `pidfile`: Servisin PID bilgisini tutar.

Servis Dosyasının Yaptıklar:

- D-Bus için sistem kullanıcı ve grup oluşturulur.
- machine-id ve gerekli izinler ayarlanır.
- OpenRC init script’i `/etc/init.d/dbus`, servisin başlatılmasını, durdurulmasını ve yeniden yüklenmesini yönetir.
- `rc-service dbus start` ile sistemde mesajlaşma servisi aktif olur.

Kaynaklar:

- D-Bus resmi sitesi:https://www.freedesktop.org/wiki/Software/dbus/
- D-Bus belgeleri:https://dbus.freedesktop.org/doc/dbus/
- OpenRC belgeleri:https://wiki.gentoo.org/wiki/OpenRC
- dbus-daemon ve dbus-send man sayfaları:https://manpages.debian.org/dbus-user-session