それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

systemdの起動プロセスとinitについて

systemd の起動について

/sbin/init (rootプロセス) として systemd が起動する。 此のときに systemd はdefaut.target というユニットをトリガーとしてシステムの起動が始まる。

以前は、sysV init と呼ばた機能がinit からコールされてたがそれが systemd になった。

また、systemd では 起動スクリプトのようなものは存在せず、直接起動するのが特徴。そのためsh を経由するようなシェルスクリプト依存はまったくないのが特徴。

systemd のイベント・ターゲットについて

Systemdでは「ターゲット」が依存関係の解決を図るキモになっている。すべてのDaemonを依存関係ごとに整理して、そのターゲットを基準に起動処理を走らせる。

ここでいうターゲットとは主にイベントのことで、デバイスが接続された、ネットワークがオンになった、ファイルシステムがマウントした等など。

より正確に言えば、Systemdはイベントが起動のトリガーになっていて、イベントに処理を紐付けるように動作します。しかし複数のイベント待ちから複数のユニット起動は記述や管理が煩雑になる。そこで、Systemdでは複数のイベントが終了したタイミングをまとめたターゲットを使うようになっている。

私たちは基本的にターゲットに処理を紐付けるようにサービス(デーモン)を定義します。

よく見るターゲットを辿ってみる

takuya@:~$ ll  /lib/systemd/system/default.target
lrwxrwxrwx 1 root root  16 2017-01-05 08:42 /lib/systemd/system/default.target -> graphical.target
takuya@:~$ ll  /lib/systemd/system/runlevel5.target
lrwxrwxrwx 1 root root 16 2017-01-05 08:42 /lib/systemd/system/runlevel5.target -> graphical.target

ここから、 次のことがわかる。

システムは graphical login を defaut.target にしている。runlevel は前方互換のために作られてて、run5 がgraphical とされていて、そういうことね。これもなるほどね。

詳しくはこのファイルたちをみていけば、依存関係がどう書かれているのかがよくわかるはず。

参考資料

Systemd入門(1) - Unitの概念を理解する - めもめも