hiroの長い冒険日記

主にコンピュータ周辺の興味を持った内容を綴ります

systemd ... SysVinit との違いと動作について その5

前回は、systemd の service unit の先頭文字が a 〜 k までの 41 units について、機能を調べてみた。
hiro20180901.hatenablog.com
今回は、l 〜 r までの 23 units について調べてみた。

$ systemctl list-unit-files [l-r]*.service
UNIT FILE                  STATE  
lightdm.service            enabled
module-init-tools.service  static 
motd.service               masked 
mountall-bootclean.service masked 
mountall.service           masked 
mountdevsubfs.service      masked 
mountkernfs.service        masked 
mountnfs-bootclean.service masked 
mountnfs.service           masked 
networking.service         enabled
polkit.service             static 
procps.service             static 
quotaon.service            static 
rc-local.service           static 
rc.local.service           static 
rc.service                 masked 
rcS.service                masked 
reboot.service             masked 
rescue.service             static 
rmnologin.service          masked 
rsync.service              enabled
rsyslog.service            enabled
rtkit-daemon.service       enabled

23 unit files listed.

lightdm

LXDE (The Lightweight X11 Desktop Environment) 用の window manager。debianlxde (meta) package の depend で install されている。これが display-manager.service に symbolic link されていて、graphical.target の Wants となっている事から、graphical.target で起動する際に LXDE が使用される状態となっている。

module-init-tools

kmod.service と同様に systemd-modules-load.service への symbolic link となっていて、one shot で実行されている。kmod と module-init-tools は static で起動されていない。

motd (message of the day)

terminal の login message を作成する unit。/dev/null に symbolic link されていて masked。実際に使いたい時に作成するという事か。標準で /etc/motd には debian の message が書かれている。

mount*

mount*.service は全て masked。mountall と mountdevsubfs、mountnfs でググると SysVinit の sh script が引っかかるので、SysVinit の時代に存在した init script かも。

networking

debian 系の /etc/network/interfaces を使って network の設定を行う unit で、今は systemd-networkd を有効にしているので無効にしても構わないはず。

$ systemctl list-units *network*
UNIT                     LOAD   ACTIVE SUB     DESCRIPTION                   
networking.service       loaded active exited  Raise network interfaces      
systemd-networkd.service loaded active running Network Service               
systemd-networkd.socket  loaded active running Network Service Netlink Socket
network.target           loaded active active  Network                       

LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.

4 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.

$ sudo systemctl disable networking.service
Synchronizing state of networking.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install disable networking

$ systemctl list-units *network*
UNIT                     LOAD   ACTIVE SUB     DESCRIPTION                   
networking.service       loaded active exited  Raise network interfaces      
systemd-networkd.service loaded active running Network Service               
systemd-networkd.socket  loaded active running Network Service Netlink Socket
network-online.target    loaded active active  Network is Online             
network.target           loaded active active  Network                       

LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.

5 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.

$ systemctl list-unit-files *network*
UNIT FILE                             STATE   
dbus-org.freedesktop.network1.service enabled 
networking.service                    disabled
systemd-networkd-wait-online.service  disabled
systemd-networkd.service              enabled 
systemd-networkd.socket               enabled 
network-online.target                 static  
network-pre.target                    static  
network.target                        static  

8 unit files listed.

ん? network-online.target が active になった。networking.service はちゃんと disable になっている。再起動してみると

$ systemctl list-units *network*
UNIT                     LOAD   ACTIVE SUB     DESCRIPTION                   
systemd-networkd.service loaded active running Network Service               
systemd-networkd.socket  loaded active running Network Service Netlink Socket
network.target           loaded active active  Network                       

LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.

3 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.

networking.service と network-online.service が消えた。接続は問題ないので、このまま様子を見る。

polkit

wiki.archlinux.jp

Polkit はシステム全体の権限をコントロールするのに使われます。非特権プロセスが特権プロセスと通信するための組織立った手段を提供します。sudo などのシステムと対照的に、Polkit は全てのプロセスに root 権限を与えるようなことはせず、より細かいレベルで中心システムのポリシーを制御することができます。

sudo だと root 権限を与えるか否かの2択になるし、group/user の制御だけでは細かい部分までは出来ない。特定の機能まで細やかに権限を決められる機能だと理解した。LXDE 用の認証 agent の lxpolkit が動作している。

$ systemctl list-unit-files polkit*
UNIT FILE      STATE 
polkit.service static

1 unit files listed.

$ systemctl list-units polkit*
UNIT           LOAD   ACTIVE SUB     DESCRIPTION                                
polkit.service loaded active running Authorization Manager                      

LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.

1 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.

polkit.service は static だが running となっている。polkit.service の中を見ると dbus 経由で起動しているので、他の service や target から Wants されていないので static、でも dbus 経由で起動しているので running、という事か。

procps

systemd-sysctl.service への symbolic link となっている。起動時の早い段階(sysinit.target の前) に one shot で実行されて、通常は static になっている模様。名称が procps なのは理由が分からないが、SysVinit 時代の起動時に sysctl (procps に含まれる) で行っていた事を代替したからだろうか。昔の initrd の中身を見ないと分からないが、紐解いて見てみたい。昔の kernel も見ておきたいが何時になるか。

quotaon

strage の使用量を制限する為の unit。debian だと quota package に quotaon、quotaoff が入っているので、これらが無いと機能しない。quotaon.service は systemd package から入っているが、本来は quota package から入るべき unit file だと思う。static で読み込まれていない。ArchWiki が参考になる。
wiki.archlinux.jp

rc-local (rc.local)

rc.local は rc-local への symbolic link。rc-local.service は、/etc/rc.local が存在し実行できる場合に multi-user.target の network.service の後に実行されるみたいだが、systemd-rc-local-generator も絡んでいるようでよく分からない。
www.freedesktop.org
ただ、SysVinit との互換の為に存在していて、非推奨の機能なので、使うことはないだろう。

rc、rcS

/dev/null に symbolic link されていて masked。ググっても情報なく分からず。多分 SysVinit との互換性の為に残していると思われる。

reboot、rescue

reboot 及び rescue は、前回調べた emergency と同様に、systemctl の引数として渡して状態を遷移する為の unit。

reboot.service は /dev/null に symbolic link されていて masked だが、reboot.target が存在していている。rescue.service は中身のある unit。

後で emergency と一緒に仕組みを調べてみる。

rmnologin

/dev/null に symbolic link されていて masked。/etc/nologin を削除するらしいが、SysVinit 互換の為の unit だろう。

rsync

同期 command の rsync daemon を起動する為の unit。multi-user.target から WantedBy されているので enabled だが、systemctl list-units では出てこない。systemctl list-dependency でも行頭のマークの色が消えている。/etc/rsyncd.conf が存在していないので起動していないのかも。

rsyslog

log を記録する為の rsyslog daemon を起動する為の unit。multi-user.target から WantedBy されて起動している。

rtkit-daemon (RealtimeKit Scheduling Policy Service)

graphical.target から WantedBy されて起動している。この unit は rtkit package に含まれている。
パッケージ: rtkit (0.12-4)_リアルタイムポリシー監視デーモン (Debian sid package)

realtimekit は user process/thread の優先度を上げて UI の操作性を向上させるための dbus system service なので、dbus に関係する unit である。

結果

  • systemd service の先頭文字が l 〜 r の unit について機能を調べてみた。
  • 相変わらず /dev/null に link されている service が多い。移行時の利便性はともかく、systemd のみで install した際には、rc-local のような非推奨の機能は削除しても良いと思うが...
  • systemd-networkd.service を有効にしたので、networking.service を無効に設定した。特に問題ない。
  • systemd の中身も見ないと分からない部分がありそう。これも後日。