RPi2でpulseaudioを導入しようとしたところ、pulseaudioをサービスとして使用するには、systemdを利用するほうが従来のsysvinitよりも簡単に行えそうだということがわかった。 ただ単に、初期化スクリプトがsystemd用のもののみ用意されていたというだけの事なのだが。
勉強も兼ねてyoctoでsystemdを導入する。
SysVinitとsystemd
Linuxにおいてユーザーランドのシステム初期化は昔からSysVinitが利用されてきた。 しかし比較的新し目のシステムではsystemdが導入され、大きな流れで見るとsystemdに移行しつつあるようにも思える。
SysVinitとsystemdについてはここが解りやすいと思う。
ざっくり言うと以下のような点でsystemdに利点がある。
- 各サービスについて、より細かい制御ができる
- システム起動時の処理を並列化しやすいため、起動時間を短縮できる
- サービスをオンデマンド化できる
systemdを実際に使用してみるにはここがわかりやすい。
systemdの有効化
yoctoのdev-manualによると、local.confに下記を追加すると、systemdが有効になるらしい。
DISTRO_FEATURES_append = " systemd" VIRTUAL-RUNTIME_init_manager = "systemd" DISTRO_FEATURES_BACKFILL_CONSIDERED = "sysvinit" VIRTUAL-RUNTIME_initscripts = ""
dhcpについて
IPアドレスを自動取得する場合、busyboxのudhcpcかdhclientを使用することになるが、 pokyの起動シーケンスではnetwork managerによってどちらかのdhcp-clientが自動的に起動されるため udhcpc、dhclientともに自動的に起動しないようになっている。 具体的には、sysvinitの場合は起動スクリプトが/etc/init.dに置かれないようになっているし、systemdの場合はunitがmaskされている。
systemdに切り替えるとsysvinitでは自動的に起動していたeth0が起動しなくなるので、 それを回避するためには、別途ネットワークの設定を行う必要がある。
※connmanの記事は移動しました