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