systemdについて
前回の続きで、systemdを少し調べてみる。systemdはsysvinitに代わってRedhatやDebianで採用されているが、「Linus様がSystemdにぶちきれる」とかboycott systemdとか、物議を醸しているようだ。
CentOS 6.5だと、PID 1は当然initだけど、CentOS 7はsystemdになっているのがわかる。
$ pstree -h init─┬─acpid ├─agetty ├─crond ├─6*[mingetty] ├─ntpd ├─rpc.statd ├─rpcbind ├─rsyslogd───3*[{rsyslogd}] ├─sshd───sshd───sshd───bash───pstree └─udevd───2*[udevd]
[vagrant@localhost ~]$ pstree systemd─┬─NetworkManager─┬─dhclient │ └─3*[{NetworkManager}] ├─VBoxService───7*[{VBoxService}] ├─agetty ├─auditd───{auditd} ├─avahi-daemon───avahi-daemon ├─crond ├─dbus-daemon───{dbus-daemon} ├─firewalld───{firewalld} ├─iprdump ├─iprinit ├─iprupdate ├─lvmetad ├─master─┬─pickup │ └─qmgr ├─polkitd───5*[{polkitd}] ├─rsyslogd───2*[{rsyslogd}] ├─sshd───sshd───sshd───bash───pstree ├─systemd-journal ├─systemd-logind ├─systemd-udevd └─tuned───4*[{tuned}]
/sbin/initがsystemdへのシンボリックリンクになっているのね。
[vagrant@localhost ~]$ ls -l /sbin/init lrwxrwxrwx. 1 root root 22 Aug 1 08:41 /sbin/init -> ../lib/systemd/systemd
systemdは高速起動が売りの一つとのことだけど、systemd-analyzeってコマンドで起動時間や何処で時間を食っているかなどを調べることができる。
[vagrant@localhost ~]$ systemd-analyze time Startup finished in 431ms (kernel) + 1.326s (initrd) + 7.844s (userspace) = 9.603s [vagrant@localhost ~]$ systemd-analyze blame 2.167s firewalld.service 1.825s kdump.service 1.584s tuned.service 1.442s vboxadd.service 1.166s network.service 1.102s lvm2-monitor.service :
また、ログ周りもsyslogdからjournaldという独自の実装に変わっている。
[vagrant@localhost ~]$ sudo journalctl -- Logs begin at Fri 2014-09-05 01:45:16 EDT, end at Sat 2014-09-06 00:32:19 EDT. -- Sep 05 01:45:16 localhost.localdomain systemd-journal[80]: Runtime journal is using 4.0M (max 24.5M, leaving 36.7M of free 241.1M, current limit 24.5M). Sep 05 01:45:16 localhost.localdomain systemd-journal[80]: Runtime journal is using 4.0M (max 24.5M, leaving 36.7M of free 241.1M, current limit 24.5M). Sep 05 01:45:16 localhost.localdomain kernel: Initializing cgroup subsys cpuset Sep 05 01:45:16 localhost.localdomain kernel: Initializing cgroup subsys cpu Sep 05 01:45:16 localhost.localdomain kernel: Initializing cgroup subsys cpuacct Sep 05 01:45:16 localhost.localdomain kernel: Linux version 3.10.0-123.6.3.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.2 20140120 (Red Hat 4.8.2-16) (GCC) ) #1 SMP Wed Aug 6 21:12:36 UTC 2014 Sep 05 01:45:16 localhost.localdomain kernel: Command line: BOOT_IMAGE=/vmlinuz-3.10.0-123.6.3.el7.x86_64 root=/dev/mapper/centos-root ro rd.lvm.lv=centos/swap vconsole.font=latarcyrheb-sun16 vconsole.keymap=jp106 rd.lvm.lv=centos/root crashkernel=auto rhgb quiet LANG=en_US.UTF-8 :
オプションに"-b"を指定すればブート時のもの、_SYSTEMD_UNIT=sshd.serviceまたは'which sshd'(デーモンのパス)を指定すればそのログのみが取り出せる。
[vagrant@localhost ~]$ sudo journalctl _SYSTEMD_UNIT=sshd.service -- Logs begin at Fri 2014-09-05 01:45:16 EDT, end at Sat 2014-09-06 00:34:34 EDT. -- Sep 05 01:45:24 localhost.localdomain sshd[1099]: Server listening on 0.0.0.0 port 22. Sep 05 01:45:24 localhost.localdomain sshd[1099]: Server listening on :: port 22. Sep 05 01:45:30 localhost.localdomain sshd[2202]: Accepted publickey for vagrant from 10.0.2.2 port 49275 ssh2: RSA dd:3b:b8:2e:85:04:06:e9:ab:ff:a8:0a:c0:0 Sep 05 01:48:34 localhost.localdomain sshd[3895]: Accepted publickey for vagrant from 10.0.2.2 port 49326 ssh2: RSA dd:3b:b8:2e:85:04:06:e9:ab:ff:a8:0a:c0:0
systemdのメインコマンドはsystemctl。これでサービス(systemd用語ではユニットというのかな)の有効・無効などを制御できる。serviceコマンドのレベルでは互換性を保っているようなので、取りあえずは戸惑いなく使えるのかなぁ。それに加えて、systemctl rebootとかpoweroffってのもできる。ふむ、/usr/sbin/rebootなどがsystemctlへのシンボリックリンクになっている。結構システム全体に影響あるんだなぁ。
あと話は脱線するけど、systemd-detect-virtというハイパーバイザを認識するコマンドがある。
[vagrant@localhost ~]$ systemd-detect-virt oracle
どんな実装になっているのかな。gitリポジトリを眺めてみたところ、このへんだね。CPUIDやDMIを使って検出するようね。VirtualBoxの場合は、/sys/class/dmi/id/sys_vendorが"innotek GmbH"であれば、VirtualBoxと判定されるようだ。
関連して、hostnamectlってコマンドもあるようだ。Chassisは"vm"になりそうなものの、"n/a"になっているね。
[vagrant@localhost ~]$ sudo hostnamectl Static hostname: localhost.localdomain Icon name: computer Chassis: n/a Machine ID: 42223b0ecc4b406f8c15a34a4ad16be9 Boot ID: c140fb95493041e7ab58a6ddbe4b74f6 Virtualization: oracle Operating System: CentOS Linux 7 (Core) CPE OS Name: cpe:/o:centos:centos:7 Kernel: Linux 3.10.0-123.6.3.el7.x86_64 Architecture: x86_64