Systemd büyük bir hızla ,öncelikle güncel linux dağıtımlarında yerini almaya başladı.Systemd linux çekirdeği için geliştirilen ve klasik init sistemlerinin(openrc vs.) yerine geçecek olan daha hızlı ve kararlı bir sistem yönetim daemonu.
systemd pstree çıktısı
init pstree çıktısı
Yukardaki ekran görüntüleri örneklerinde de gördüğünüz gibi systemd 'nin sistem üzerindeki ilk daemon(ve proses) olduğu ve userspace üzerinde çalışacak olan tüm prosesler klasik init sistemlerinde olduğu gibi systemd'nin alt proseslerini oluşturmaktadir.Systemd'nin yapısını biraz daha iyi anlamak için aşağıdaki şema yardımcı olacaktır.
Systemd Bileşenleri
Binary Linux Dağıtımlarında eğer systemd'ye geçilmişse ayrıca birşey yapmanıza gerek yok.Fakat Gentoo Linux dağıtımında şu an stage 3'te öntanımlı gelmediği için kendiniz yardımcı araçlarla geçebilirsiniz.(ki gentoo geliştiricileri bunun için birçok şeyi hazırlamış bulunmakta.)
Kısa adımlarla systemd'ye geçişten bahsedebilirim:
- İlk olarak çekirdeğimize systemd için gerekli destekleri verelim.Gentoo geliştiricileri bu konuda kullanıcıları rahatlamak için güncel kernel sürümlerinde "kernel konfigürasyon menüsü"ne eklenen "Gentoo Linux" sekmesinin altında bulunan "Support for init systems, system and service managers" alt sekmesinin içinde bulunan "systemd" seçeneğini seçerek kernel için gerekli tüm destekleri kolayca verebilirsiniz.Bu seçenek sizin zorunlu olan destekleri tek tek elle vermek yerine hızlıca yapmanizi sağlayan bir kısayol.
Gerekli destekleri verdikten sonra kernelimizi ve modüllerimizi yeniden derleyin.
- Kullandığınız herhangi grafik arabirimi ya da hangi sistem ise "Gentoo" profilinizi "systemd" profiline değiştirerek gerekli profil değişiklerini tanımlayın.
# eselect profile list
Available profile symlink targets:
[1] default/linux/amd64/13.0
[2] default/linux/amd64/13.0/selinux
[3] default/linux/amd64/13.0/desktop
[4] default/linux/amd64/13.0/desktop/gnome *
[5] default/linux/amd64/13.0/desktop/gnome/systemd
[6] default/linux/amd64/13.0/desktop/kde
[7] default/linux/amd64/13.0/desktop/kde/systemd
[8] default/linux/amd64/13.0/developer
[9] default/linux/amd64/13.0/no-multilib
[10] default/linux/amd64/13.0/x32
[11] hardened/linux/amd64
[12] hardened/linux/amd64/selinux
[13] hardened/linux/amd64/no-multilib
[14] hardened/linux/amd64/no-multilib/selinux
[15] hardened/linux/amd64/x32
[16] hardened/linux/uclibc/amd64
Beşinci seçenekte olan "default/linux/amd64/13.0/desktop/gnome/systemd" profili ile değiştirelim.
# eselect profile set 5
- Bu adımda "systemd"yi yükleyelim.
# emerge --ask systemd
- Profilimizi değiştirdiğimiz için sistemi güncellemeden önce "sys-apps/dbus" uygulamasının "systemd" USE FLAG'ını deaktif(
/etc/portage/package.use dosyasınıza "sys-apps/dbus -systemd"
şeklindeki satırı ekleyin.) edin ve daha sonra sistemi güncelleyin.
# emerge -NuDa world
Sistemimize bu şekilde gerekli systemd desteğini vererek "systemd" ile açılmasına hazır hale getirdik.
- Yeniden başlatmadan önce sistemin systemd ile başlaması için ön yükleyicinizin kernel satırına(grub için) aşağıdaki gibi ekleyin:
( /boot/grub/menu.lst )
kernel /vmlinuz-3.7.10-r1 root=/dev/sda2 init=/usr/lib/systemd/systemd
Grub 2 için;
( /boot/grub/grub.cfg )
linux /vmlinuz-3.7.10-r1 root=UUID=21312312-12312312-1231121 init=/usr/lib/systemd/systemd
UEFI kullanan sistemler için 1.adımda kernel derlemeden önce "kernel konfigürasyon menüsü"nde
"Processor type and features" -> "Built-in kernel command line" içine aşağıdaki gibi ekleyebilirsiniz;
root=/dev/sda2 init=/usr/lib/systemd/systemd
6.Sistemi yeniden başlatın.
7.Sistem yeniden başladıktan sonra eski(Openrc vs.) init sistemi üzerinde tanımladığımız hostname,locale ayarları artık systemd üzerinde geçerli olmayacaktır.
Systemd hostname ayarlamak için;
# hostnamectl set-hostname benimpc
Systemd klavye ayarları için;
# localectl set-keymap trq
X11 için;
# localectl set-x11-keymap tr
Sistem locale ayarı için;
# localectl set-locale LANG=en_US.UTF-8
Türkçe için;
# localectl set-locale LANG=tr_TR.UTF-8
8.Yukardaki adımda sistem için gerekli tanımlamaları yaptık.Fakat herhangi bir grafik arabirimi kullanıyorsanız,bu açılmayacaktır.Systemd üzerinde de diğer init sistemlerinde olduğu gibi gerekli olan servisleri sistem açılışına ekleyebilir,servisleri çalıştırabilir,durumunu öğrenebilir ve bir servisi durdurabiliriz.
Systemd üzerinde sistem açılışında aktif olan servis ya da hizmetleri ve bunların durumlarını görmek için;
# systemctl
Aktif ve deaktif tüm servislerin durumunu görmek için;
# systemctl list-unit-files
Herhangi bir servisi sistem açılışına eklemek için;
# systemd enable vixie-cron.service
Herhangi bir servisi çalıştırmak için;
# systemctl start syslog-ng.service
NOT: systemd herhangi bir syslog yazılımına ihtiyaç duymamaktadır.Systemd üzerinde journal log bilgilerini tutmaktadır.
Herhangi bir servisin durumunu görmek için;
# systemctl status NetworkManager.service
Herhangi bir servisi durdurmak için;
# systemctl stop upower.service
Herhangi bir servisi yeniden başlatmak için;
# systemctl restart dhcpcd.service
NOT: Gerekli olan servisleri sistem açılışında aktif etmeyi ihmal etmeyin.Grafik arabirimini sistem açılışında başlaması için örnek olarak "xdm"i sistem açılışında aktif etmek için;
# systemctl enable xdm.service
Burada dikkat edilecek nokta openrc'den systemd'ye geçişte "/etc/conf.d/xdm" içerisinde yapmış olduğumuz herhangi bir "display manager" ayarımız geçersiz olacaktır.Geçerli olan "display manager"i xdm'nin açılışta çalıştırması istiyorsanız;
"/usr/lib/systemd/system/xdm.service" dosyası içindeki ,
[Service]
ExecStart=/usr/bin/xdm -nodaemon
--> satırını;
(GDM için)
[Service]
ExecStart=/usr/bin/gdm
---> şeklinde değiştirin.Bu şekilde sistem açılışında "gdm"yi aktifleştirebiliyoruz.
- Değinebileceğim diğer bir nokta ise açılışta otomatik yüklenmesi istediğiniz modüller ve network ayarları.
Sistem açılışında otomatik yüklenmesi istediğiniz modül ya da modülleri "/etc/modules-load.d" dizini içerisine isterseniz ayrı ayrı,istediğiniz sekilde isimlendirdiğiniz dosyaların içerisine ilk satıra ve ya tek bir dosya içerisinde her modül tek satırda olacak şekilde yazabilirsiniz.Örnek:
( /etc/modules-load.d/modullerim.conf )
bridge
tun
şeklinde ekleyebilirsiniz.
Network Ayarları kısmında ise ,kablolu ve otomatik ip alan bir networkte bulunuyorsanız, açılışta dhcpcd servisini aktif etmeniz yeterli.
# systemctl enable dhcpcd.service
Eğer network-manager kullanıyorsanız , sistem açılışında aktif etmek için;
# systemctl enable NetworkManager.service
Ya da farklı bir network modelinde çalışıp kendiniz oluşturmak için kolayca systemd servis dosyası yazabiliriz."/etc/systemd/system" dizini içerisine kendi istediğimiz modelde bir script yazarak açılışta aktif edebiliriz.Örnek olarak;
( /etc/systemd/system/mynetwork.service )
[Unit]
Description=network ayarlarim
After=network.target
[Service]
Type=oneshot
RemainAfterExit=yes
EnvironmentFile=/etc/conf.d/bridge.conf
ExecStart=/bin/ifconfig eth0 up
ExecStart=/bin/ifconfig eth1 up
ExecStart=/usr/bin/tunctl -b -u rico -t tap0
ExecStart=/bin/ifconfig tap0 up promisc
ExecStart=/sbin/brctl addbr br0
ExecStart=/sbin/brctl addif br0 eth0
ExecStart=/sbin/brctl addif br0 eth1
ExecStart=/sbin/brctl addif br0 tap0
ExecStart=/sbin/dhcpcd br0
ExecStop=/usr/bin/killall dhcpcd
ExecStop=/bin/ifconfig eth0 down
ExecStop=/bin/ifconfig eth1 down
ExecStop=/bin/ifconfig tap0 down
ExecStop=/sbin/brctl delif br0 tap0
ExecStop=/usr/bin/tunctl -d tap0
ExecStop=/sbin/brctl delif br0 eth0
ExecStop=/sbin/brctl delif br0 eth1
ExecStop=/bin/ifconfig br0 down
ExexStop=/sbin/brctl delbr br0
[Install]
WantedBy=multi-user.target
Systemd ile iyi keyifler :)