最近のLinuxは、システム設定の方法が以前と大きく変わっていると感じることが多くなりました。たとえば、Linux起動時に自動開始するプログラムを設定するinit.d スクリプトやrc.local
は原則として使われなくなりましたし、システムログの参照には従来のless /var/log/syslog
などに替わってjounalctl
コマンドを使うようになりましたし、ブートローダーのGRUBや予定されたコマンドを実行するcronといった基本的なツールも別のツールで代替されることが増えています。
こうした変化の結果、古くからのUNIX/Linuxユーザー(管理者)は新たな技術を身につけることを求められていると言えます。また、新しいUNIX/Linuxユーザーにとっては、新旧の情報を分けて考えることが求められるのではないかと思います。たとえばApacheやMySQLのインストールや設定方法を調べているときに、情報が古いことに気づかずに参照してハマってしまう、といった危険性が考えられます。
システム設定方法の変化の根底にあるもの、それはsystemdです。ここではsystemdを理解するためのヒントとして、systemdの概念と歴史をまとめたいと思います。
systemdの概念
systemdは、新しいinitシステムと覚えるとわかりやすいと思います。initは、すべてのプロセスの元になるプロセスです。
systemdは従来のinitシステムに対し、起動を高速にし、設定をシンプルにすることを狙っています。Linuxでの同様の新しいinitシステムに、Ubuntuなどで用いられたUpstartがあります。また、MacOSでは新しいinitシステムとしてlaunchdが使われています。
pstree
systemdがすべてのプロセスの元になっていることは、Linuxにログインしてpstree
コマンドを実行すると実感できるでしょう。pstree
はプロセスをツリー(木)状に表示するコマンドです。
systemdを用いていない、CentOS 6.8でのpstree
実行例は、次のとおりです。initプロセスの下にほかのプロセスがあります。
$ pstree
init─┬─VBoxService───7*[{VBoxService}]
├─crond
├─dhclient
├─6*[mingetty]
├─ntpd
├─rpc.idmapd
├─rpc.mountd
├─rpc.statd
├─rpcbind
├─rsyslogd───3*[{rsyslogd}]
├─sshd───sshd───sshd───bash───pstree
└─udevd───2*[udevd]
systemdを用いている、ArchLinuxでのpstree
実行例は、次のとおりです。systemdプロセスの下にほかのプロセスがあります。
$ pstree
systemd-+-2*[agetty]
|-dbus-daemon
|-lvmetad
|-sshd---sshd---sshd---bash---pstree
|-systemd---(sd-pam)
|-systemd-journal
|-systemd-logind
|-systemd-network
|-systemd-resolve
`-systemd-udevd
systemdの歴史
systemdは、Red Hat社のLennart PoetteringやKay Sieversらによって2010年に最初のバージョンがリリースされました。systemdはLinuxのCgroupsという機能を使っており、当初からLinux用のinitシステムとして開発されています。
systemdと同様の新しいinitシステムとしては、MacOS用のlaunchdが2005年に、Linux用のUpstartが2006年に、それぞれ最初のバージョンがリリースされていました。
systemdは2011年5月にRed Hat社のFedoraに標準のinitシステムとなって徐々に広く使われるようになりました。一方で、その頃からsystemdへの批判も起こるようになりました。それでもその後、Red Hat系のCentOS、Red Hatのほか、ArchLinuxやDebianなどでもsystemdが標準になりました。さらに、いったんはUpstartを用いていたUbuntuも、systemdへ移行しました。
結果として、2018年時点では多くのLinuxディストリビュションでsystemdが用いられています。例外として、OpenRCという独自のinitシステムを用いているGentooがあります。
systemdへの批判
systemdの批判の例としては、私がsystemdを嫌う理由があります。systemd
は設定をシンプルにしているのではなく「複雑さのたらい回し」をしているのだと主張し、記事の著者はsystemdから逃れるためにLinuxの代わりにOpenBSDを使うようになったとしています。
私としては、傾聴すべき点もあるとは思いますが、Linuxの設定をシンプルにできるようになったのはsystemdの大きな利点だと考えます。たとえばLinuxのネットワーク設定は、systemdによってだいぶやりやすくなったと考えています。なお、第39回 init(8)とrc(8)に替わる起動および制御機能の模索 - BSD界隈四方山話によれば、OpendBSDなどのBSD系OSでも、systemdのようなinitシステムの開発が試みられているとのことです。
まとめ
systemdは、2010年に登場した新しいinitシステムです。現在では、多くのLinuxでsystemdが標準のinitシステムとなっています。