Systemd

From Gentoo Wiki
Jump to: navigation, search
This page is a translated version of the page Systemd and the translation is 100% complete.

Other languages:
English • ‎español • ‎italiano • ‎português do Brasil • ‎русский • ‎中文(中国大陆)‎ • ‎日本語 • ‎한국어

Warning: Display title "systemd/ja" overrides earlier display title "Systemd".

systemd は、 Linux システムに向けた、SysV 系 init および rc の現代的な代替品です。Gentoo においては、代替的な init システムとして提供されています。

Contents

インストール

重要
もし<=sys-apps/systemd-203からアップデートする場合、upgrade sub-articleを確認してください。

すべてのディストリビューションが構築されるその中心にあるのがLinuxカーネルです。カーネルレイヤーはユーザープログラムとハードウェアの間に存在します。Gentooではカーネルソースについて複数の選択肢があります。説明付きのすべてのカーネルソースのリストは、Kernel overview pageで見ることができます。

amd64ベースのシステムについては、Gentooはsys-kernel/gentoo-sourcesパッケージを推奨しています。

適切なカーネルソースを選択して、emergeでインストールします:

root #emerge --ask sys-kernel/gentoo-sources

カーネル

systemdはLinuxカーネルの比較的新しい機能を多用しています。現在、ebuildにて指定されたカーネルの下限バージョンは2.6.39です。sys-kernel/gentoo-sourcesの最近のバージョンでは、systemdが必須、あるいは任意とするカーネルオプションを簡便に選択する方法が用意されています (詳細については Kernel/Configuration をご覧ください):

KERNEL gentoo-sources を使った高速設定
Gentoo Linux --->
   Support for init systems, system and service managers --->
      [*] systemd

カーネルのオプションを手動で設定する場合は、次のカーネルオプションが必須となるか、あるいは推奨されます。(なお、sys-kernel/gentoo-sourcesを使わない場合は手動で設定しなければなりません)

KERNEL 必須オプション
General setup  --->
	[*] Control Group support  --->
		[*] Support for eBPF programs attached to cgroup
	[ ] Enable deprecated sysfs features to support old userspace tools
	[*] Configure standard kernel features (expert users)  --->
		[*] open by fhandle syscalls
		[*] Enable eventpoll support
		[*] Enable signalfd() system call
		[*] Enable timerfd() system call
	[*] Enable bpf() system call
[*] Networking support --->
Device Drivers  --->
	Generic Driver Options  --->
		[*] Maintain a devtmpfs filesystem to mount at /dev
File systems  --->
	[*] Inotify support for userspace
	Pseudo filesystems  --->
		[*] /proc file system support
		[*] sysfs file system support
KERNEL 推奨オプション
General setup  --->
	[*] Configure standard kernel features (expert users)  --->
		[*] Checkpoint/restore support
	[*] Namespaces support  --->
		[*] Network namespace
[*] Enable the block layer  --->
	[*] Block layer SG support v4
Processor type and features  --->
	[*] Enable seccomp to safely compute untrusted bytecode
Networking support --->
	Networking options --->
		<*> The IPv6 protocol
Device Drivers  --->
	Generic Driver Options  --->
		()  path to uevent helper
		[ ] Fallback user-helper invocation for firmware loading
Firmware Drivers  --->
	[*] Export DMI identification via sysfs to userspace
File systems --->
	<*> Kernel automounter version 4 support (also supports v3)
	Pseudo filesystems --->
		[*] Tmpfs virtual memory file system support (former shm fs)
		[*]   Tmpfs POSIX Access Control Lists
		[*]   Tmpfs extended attributes

UEFIのシステム上では、次のオプションも有効にしてください:

KERNEL UEFI サポート
[*] Enable the block layer  --->
	Partition Types  --->
		[*] Advanced partition selection
		[*]   EFI GUID Partition support
Processor type and features  --->
	[*] EFI runtime service support
Firmware Drivers  --->
        EFI (Extensible Firmware Interface) Support -->
	        <*> EFI Variable Support via sysfs

システムがBFQスケジュラーを使用している場合は、"Enable the block layer -> IO Schedulers"下にある"BFQ hierarchical scheduling support"を有効にすることがBFQの開発元によって推奨されています。

最新の一覧を必要とする人は、systemdのREADMEにある"REQUIREMENTS"を参照してください。

/etc/mtab

開発元は、 /etc/mtab ファイルが /proc/self/mounts へのシンボリックリンクである環境のみをサポートしています。また、このシンボリックリンクが存在しない場合、mount (bug #434090) および df (bug #477240) にも問題が発生します。かつて一部のユーティリティがマウントオプションなどを書き込んでいたため、/etc/mtab は通常のファイルであることが期待されていましたが、現在ではあらゆるソフトウェアが対策を終えているものと思われます。とはいえ念のため、ファイルをリンクに変更する作業を行う前に、 bug #477498 を閲覧の上、システムが既知の問題を抱えていないことをお確かめください。

シンボリックリンクを作成するには、以下を実行します:

root #ln -sf /proc/self/mounts /etc/mtab

/usr がブート時に存在することを確実にする

/usr を分割したシステム構成では、initramfs を使用して /usr を systemd の起動以前にマウントします。現在のところ、sys-kernel/genkernel/usr をサポートしていないため、sys-kernel/dracutsys-kernel/genkernel-next を利用することになります。移行作業のための時間を確保しておいてください:

root #emerge --ask -c sys-kernel/genkernel
root #emerge --ask sys-kernel/dracut
root #emerge --ask sys-kernel/genkernel-next

dracut を使用する際、自動的に有効になっていなければ、usrmount モジュールを選択し、/usr を自動でマウントするよう設定しておいてください。

FILE /etc/dracut.conf.d/usrmount.conf
# Dracut modules to add to the default
add_dracutmodules+="usrmount"

genkernel-next を利用する場合、カーネルをリビルドする前に、genkernel の設定ファイル中の UDEV 変数が yes に設定されていることを確かめてください。/usr が initramfs に組み込まれるようになります:

FILE /etc/genkernel.conf
# Use udev instead of mdev as the default device manager for the initramfs.
# If systemd and perhaps lvm is used, then this _must_ be turned on.
UDEV="yes"
root #genkernel --install all

その他の方法については Initramfs guide をご覧ください。

LMV と initramfs を使う

sys-fs/lvm2 が使われているシステムを initramfs でブートする場合、initramfs の作成には sys-kernel/genkernel-next が必須です:

root #genkernel --lvm <target>

<target> は、 initramfs もしくは initramfs が暗黙的に作成される他の genkernel ターゲットです。詳細は genkernel --help の出力を参照してください:

user $genkernel --help

LVM を使用するシステムでは、LVM ボリュームをマウントするため、systemd と共に lvmetad デーモンが起動されなければなりません。lvmetad/etc/lvm/lvm.conf で有効化できます:

FILE /etc/lvm/lvm.conflvm.conf に必要な変更の一部分
# Set use_lvmetad to '1' for systemd
use_lvmetad = 1
Note
/etc/lvm/lvm.conf を修正するほかにも、lvmetad.socket ユニットを利用して lvmetad.service を起動することでも対処できるのではないかと考えられますが、現行バージョンの sys-fs/lvm2 にはこれらのファイルが含まれていません。

USE フラグ

USE flags for sys-apps/systemd System and service manager for Linux

acl Add support for Access Control Lists
apparmor Enable AppArmor support
audit Enable support for sys-process/audit
build !!internal use only!! DO NOT SET THIS FLAG YOURSELF!, used for creating build images and the first half of bootstrapping [make stage1]
cgroup-hybrid Default to hybrid (legacy) cgroup hierarchy instead of unified (modern).
cryptsetup Enable cryptsetup tools (includes unit generator for crypttab)
curl Enable support for uploading journals
dns-over-tls Enable DNS-over-TLS support
elfutils Enable coredump stacktraces in the journal
gcrypt Enable sealing of journal files using gcrypt
gnuefi Enable EFI boot manager and stub loader (built using sys-boot/gnu-efi)
homed Enable portable home directories
http Enable embedded HTTP server in journald
hwdb Enable support for the hardware database
idn Enable support for Internationalized Domain Names
importd Enable import daemon
kmod Enable kernel module loading via sys-apps/kmod
lz4 Enable lz4 compression for the journal
lzma Support for LZMA (de)compression algorithm
nat Enable support for network address translation in networkd
pam Add support for PAM (Pluggable Authentication Modules)DANGEROUS to arbitrarily flip
pcre Add support for Perl Compatible Regular Expressions
pkcs11 Enable PKCS#11 support for cryptsetup and homed
policykit Enable PolicyKit authentication support
pwquality Enable password quality checking in homed
qrcode Enable qrcode output support in journal
repart Enable support for growing/adding partitions
resolvconf Install resolvconf symlink for systemd-resolve
seccomp Enable seccomp (secure computing mode) to perform system call filtering at runtime to increase security of programs
selinux !!internal use only!! Security Enhanced Linux support, this must be set by the selinux profile or breakage will occur
split-usr Enable behavior to support maintaining /bin, /lib*, /sbin and /usr/sbin separately from /usr/bin and /usr/lib*
static-libs Build static versions of dynamic libraries as well
sysv-utils Install sysvinit compatibility symlinks and manpages for init, telinit, halt, poweroff, reboot, runlevel, and shutdown
test Enable dependencies and/or preparations necessary to run tests (usually controlled by FEATURES=test but can be toggled independently)
vanilla Disable Gentoo-specific behavior and compatibility quirks
xkb Depend on x11-libs/libxkbcommon to allow logind to control the X11 keymap

プロファイル

systemd USE フラグを、システム全体に対して有効化してください。また、systemd-logind サービスとの干渉を避けるため、consolekit USE フラグを無効にしなければなりません。別の方法として、systemd サブプロファイルに切り替えることで、適切な USE フラグを初期設定とすることも可能で、この場合 make.conf を変更する必要はありません。

root #eselect profile list

最後に、新しいプロファイルを使用してシステムを更新します。:

root #emerge -avDN @world

依存関係の問題

OpenRCをsystemdに置換中、いくつか依存関係の問題が発生するかもしれません。

もしsys-apps/sysvinitsys-apps/systemdをブロックしている場合、sys-apps/systemdsysv-utilsのUSEフラグを無効にしてみてください。もし必要ならば、あとでそのUSEフラグを有効にすることが出来ます(そしてsys-apps/systemdを再インストールしてください)。

sys-fs/udev blocking sys-apps/systemd などの依存関係問題が発生するとき、sys-fs/udev が world ファイルに登録されていることが原因かもしれません。deselect を試みてください:

root #emerge --deselect sys-fs/udev

sys-apps/systemd には udev が含まれます。systemd がvirtual/udev の提供者となるため、インストール後に sys-fs/udev を削除することができます。

もしシステムセットがsys-fs/eudevを提供している場合、virtual/udevvirtual/libudevはsystemdを妨げるかもしれません。portageにこの問題を解決させるためには、USEフラグを設定したあと、virtualsを再インストールしてみてください:

root #emerge --oneshot virtual/udev virtual/libudev

ブートローダ

重要
sysv-utilsのUSEフラグが有効になっている場合、この操作はもはや必要ではありません。最低でもGentoo内ではバージョン239から、デフォルトで有効になっています。

systemd を実行するため、カーネル(もしくは initramfs)が使用する init を切り替えます。

Warning
切替中に、以前のサービスマネージャーに対して設定されたサービスが自動的に起動することはありません。ネットワークなどの機能を回復するには、それらのサービスを再び有効化する必要があります。この文書の下部に位置するサービスセクションの中で解説します。
Note
移行作業がシステムを壊してしまった場合、この手順での init の変更を差し戻すことによって、いつでも初期のサービスマネージャー (OpenRC) を使用してのブートに復旧することが可能です。この記事の末部に記載しているトラブルシューティングを実行するには、この方法で元の状態に戻します。

以下のサブセクションでは、ブートマネージャまたはカーネルのいずれかで init を切り替える方法を文書化します。

GRUB Legacy (0.x)

カーネルのコマンドライン引数として init=/usr/lib/systemd/systemd を追加する必要があります。grub.conf の一例からの抜粋はこのようになるでしょう:

FILE /boot/grub/grub.confsystemd 用 GRUB 設定の例
title=Gentoo with systemd
root (hd0,0)
kernel /vmlinuz root=/dev/sda2 init=/lib/systemd/systemd

システムが OpenRC を使用して起動してしまうことがあれば、init の代わりに real_init を試してみてください。

GRUB 2

grub-mkconfig を利用する場合は、この init オプションを GRUB_CMDLINE_LINUX に追加してください:

Note
dracut が systemd をとりこんで生成した initramfs を使用するときには、この作業は必要ありません。initramfs が systemd を起動することになります。
FILE /etc/default/grubGRUB2 に systemd を設定
# Append parameters to the linux kernel command line
GRUB_CMDLINE_LINUX="init=/usr/lib/systemd/systemd"

あなたが経験豊富なユーザーで、GRUB2 の設定ファイルを手書きする場合には、linux もしくはlinux16 コマンドに init= パラメーターを追加してください。

FILE /boot/grub/grub.cfgGRUB2 設定ファイルの一部の例
linux /vmlinuz-3.10.9 root=UUID=508868e4-54c6-4e6b-84b0-b3b28b1656b6 init=/lib/systemd/systemd

YABOOT

Yabootは、PowerPCベースのLinuxを動かしているハードウェア、特にNew World ROM マッキントッシュシステムのためのブートローダです。

init=/lib/systemd/systemd引数は、カーネルのコマンドラインの直後に追加されるべきです。yaboot.confの例です:

FILE /etc/yaboot.confsystemdのためのyabootの設定例
image=/vmlinux 
   append="init=/lib/systemd/systemd" 
   label=Linux 
   read-only 
   initrd=/initramfs 
   initrd-size=8192

変更を有効にするため、yaboot.confを変更したら毎回ybinコマンドを実行しなければなりません。


カーネルのコンフィグ

カーネルのコンフィギュレーションに init の設定を書き込むこともできます。Processor type and features -> Built-in kernel command line を参照してください。この技法は GRUB と GRUB2 の両方に対して通用します。

アップグレード

systemdには、(再起動を必要とせずに)動作しているシステム上でアップデートする機能があります。systemdのアップグレード版がemergeされたら、次のコマンドを実行してください:

root #systemctl daemon-reexec

設定

systemd では、最も基本的なシステムの詳細を設定するのには、いくつかのシステム設定ファイルをサポートしています。

Note
対応する設定ファイルの変更によって更新できる設定もありますが、大半の設定は systemd が実行されていなければ動作しないユーティリティを使って管理します。hostnamectllocalectltimedatectl などの必要なユーティリティを使用するには、コンピューターを再起動してください。この場合の systemd を使用した再ブートは安全に行えます。

マシンID

ジャーナリングを機能させるためにマシンIDを作成してください。これは次のコマンドの過程で行なえます:

root #systemd-machine-id-setup
注意
systemd-machine-id-setupコマンドは、systemd-networkdサービスにも影響を与えます。もしこのコマンドを実行しないと、ネットワークインターフェイスが立ち上がらなかったり、ネットワークアドレスが適用されなかったりと異常動作が起こるでしょう。

ホスト名

ホスト名を設定するには、/etc/hostname を作成または編集して、希望のホスト名を入力してください。

systemd を使って起動したときには、hostnamectl と呼ばれるツールが利用でき、/etc/hostname/etc/machine-info の編集が行えます。ホスト名を変更するには以下を実行してください:

root #hostnamectl set-hostname <HOSTNAME>

他のオプションについては man hostnamectl を参照してください。


ロケール

通常、ロケールは systemd をインストールする作業の中で、OpenRC から正しい形で移行されます。ロケールを変更する必要があれば、Gentoo ハンドブックの手順通りに、/etc/locale.conf で設定できます。

FILE /etc/locale.confシステムロケールの設定
LANG="en_US.utf8"

systemd を使って起動した後には、localectl ツールが、ロケールおよびコンソールやX11のキーマップの設定を行います。システムロケールを変更するには、以下のコマンドを実行してください:

root #localectl set-locale LANG=<LOCALE>

仮想コンソールのキーマップを変更するには:

root #localectl set-keymap <KEYMAP>

最後に X11 のキー配列を設定するには:

root #localectl set-x11-keymap <LAYOUT>

必要があれば model、variant、options も指定できます:

root #localectl set-x11-keymap <LAYOUT> <MODEL> <VARIANT> <OPTIONS>


以上のどれかを実行したあとは、変更が有効になるように環境を更新してください:

root #env-update && source /etc/profile

時刻と日付

時刻、日付そしてタイムゾーンは timedatectl ユーティリティで設定できます。net-misc/ntp などを利用せず、systemd 付属の実装によって同期を行う機能も持ちます。

timedatectl の使い方を知るには:

root #timedatectl --help

モジュールの自動読み込み

モジュールの自動読み込みは、異なるファイル、あるいはディレクトリ内のファイルで設定します。設定ファイルは/etc/modules-load.d内に保存されます。起動時に、モジュールの一覧を格納しているすべてのファイルが読み込まれます。ファイルの形式は改行区切りのモジュールの一覧で、.confで終わる限り、どのような名前でも構いません。モジュールの読み込みはプログラムやサービス、あるいは個人的な好みに合うもので区切ることも可能です。virtualbox.confの例は以下に示されています:

FILE /etc/modules-load.d/virtualbox.confvirtualbox モジュール用の設定ファイル例
vboxdrv
vboxnetflt
vboxnetadp
vboxpci

ネットワーク

systemd-networkd

systemd-networkd は簡単な有線接続を設定する時に便利です。初期状態では無効にされています。

systemd-networkd を設定するには、/etc/systemd/network の下に

  • .network ファイルを作成します。詳しくは systemd.network(5) をご覧ください。以下は単純な DHCP 接続の構成例です:
FILE /etc/systemd/network/50-dhcp.network
[Match]
Name=en*
 
[Network]
DHCP=yes
root #systemctl enable systemd-networkd.service
root #systemctl start systemd-networkd.service

初期設定では systemd-networkd は resolv.conf を更新しないことに注意が必要です。systemd に DNS 設定を管理させるには、resolv.conf をシンボリックリンクに置き換え、systemd-resolved を起動してください。

root #ln -snf /run/systemd/resolve/resolv.conf /etc/resolv.conf
root #systemctl enable systemd-resolved.service
root #systemctl start systemd-resolved.service

NetworkManager

ネットワークの設定を構成するのによく使用されるのが NetworkManager です。グラフィカルなデスクトップから設定するには、次のコマンドを実行するだけです:

root #nm-connection-editor

デスクトップではなく、コンソールから設定する必要がある場合には、nmcli を試してみる、もしくは nmtui の設定手続きに従います:

root #nmtui

nmtui は、コンソールで設定を行うユーザーを手助けする curses フロントエンドです。

ログファイルの対応

systemd は、app-admin/syslog-ngapp-admin/rsyslog などの外部のログシステムに依存しない、独自の手法でログファイルを管理します。

もし望むならば、ロギングサービスを、sysklogやsyslog-ngのような外部ユーティリティにメッセージを渡すように設定することもできます。状況に応じてsystemd-journaldサービスを設定する方法については、man journald.confをご覧ください。

systemdの統合されたロギングサービスは、ログメッセージを安全に、バイナリフォーマットに書き込みます。ログはjournalctlを使用することで読むことが出来ます。これは、systemd-journalのロギングサービスとは分けられた実行可能形式です。

{{Important/ja|systemdが動作しているシステムでは大体デフォルトである、systemdのsystemd-journald.serviceをロギングとして使用している時、通常ユーザがjournalctlコマンドを実行すると、unable to view system logsと表示されるでしょう。システムログを非ルートユーザで閲覧するには、ユーザは以下の3つのユーザグループのどれかに参加していなければなりません:systemd-journaladmあるいはwheel。通常ユーザにログの閲覧を許可する最も単純な方法は、systemd-journalグループを使用する方法です。以下のコマンドを実行してユーザを追加してください。ここでlarryを、グループに追加したいユーザに変更してください:

root #gpasswd --add larry systemd-journal

これで、journalctl --systemを使用して、先程のコマンドで追加されたユーザとしてシステムログを読むことが出来ます。

よく使われる journalctl のオプション:

journalctl のコマンドラインオプション 結果
オプション無しのjournalctl すべてのログの項目を表示します。最も手っ取り早いです。
-b, --boot 最近の起動からのすべてのログの項目を表示します。
-r, --reverse 新しいログを最初に表示します(逆順)。
-f, --follow 最後の数個のログ項目を表示し、新たにログが生成される毎にそれらを表示します。これは、テキストログユーティリティでtail -fを実行するのに似ています。
-p, --priority= メッセージを表示する(最低)優先度を指定します。選択肢:"emerg" (0), "alert" (1), "crit" (2), "err" (3), "warning" (4), "notice" (5), "info" (6), "debug" (7).
--since=, --until= 項目を時間で指定します。 使用可能な書式は"YYYY-MM-DD hh:mm:ss"、あるいは文字列"yesterday"、"today"そして"tomorrow"です
-n, --lines= 項目数を指定します。
-k, --dmesg カーネルメッセージのみ表示します。
-u, --unit= 特定のsystemdのユニットだけを表示します。
--system システムサービスとカーネルログを閲覧します。 既定では、ルートユーザのみ実行が可能です。どのように通常ユーザにシステムジャーナルを読む権限を与えるかについては、man journalctlを参照してください。

詳しい情報、そしてここに記載されていない数多くのオプションについては、man journalctl をご覧ください。

/tmp が tmpfs に

/etc/fstab において、他のファイルシステムが /tmp に明示的にマウントされない限り、systemd は /tmp を tmpfs としてマウントします。これによって、/tmp は起動するごとに空になり、システムの RAM サイズの 50% の大きさに制限されることになります。この振る舞いが最適であるとされる理由や、これを変更する方法については、API File Systems を一読してください。

ブートプロセスの冗長性の設定

systemd へ移行中のユーザーは、ブートプロセスの冗長性に差があることに気がつきます:

  • カーネルコマンドラインオプション quiet が、カーネルの出力だけではなく、systemd からの出力にも影響します。発生したエラーの発見を容易にするため、systemd の設定作業を行っている間は、quiet オプションを除去してください。作業後に元に戻しておきましょう。画面が静かになるのに加えて、ブート時間の短縮にも役立ちます。
  • カーネルコマンドラインオプション quiet を指定している場合でも、systemd.show_status=1 の指定によって、systemd が状態を報告するように設定できます。
  • カーネルコマンドラインオプション quiet を使用しないとき、コンソールにメッセージが上書きされることがあるかも知れません。これはカーネルの特定の設定によるものかもしれません。(man 5 proc を開き、/proc/sys/kernel/printk を調べましょう)。改善するには、カーネルに loglevel=5 カーネルコマンドラインパラメータを渡し、必要に応じて1のような小さい数を指定するなどの調整を行ってください。

サービス

systemd がシステムモードで動作している状態に移行するために、ある時点でシステムを再起動する必要があります。この文書に最初から最後まで目を通し、systemd に対して再起動の前に可能な限りの設定が行われたことを確認してください。journalctl は systemd が起動していなくても動作しますが、systemctl が機能するには systemd が必要です。サービスの有効化と開始などの設定は、systemd が動作しているシステムにログインした後で行います。

プリセットサービス

ほとんどのサービスは、systemdが最初にインストールされた時に無効にされています。"プリセット"ファイルが提供されますので、適当なデフォルトサービスのセットを有効にするためにこのファイルを使用できます。

root #systemctl preset-all

OpenRC サービス

当初の systemd は、旧来の init.d スクリプトの実行を可能にするように考慮されていましたが、このサポート機能が OpenRC のような依存性を基づく RC に適したものでなかったため、Gentoo では完全に無効化されています。予期しない結果を引き起こさないよう、OpenRC が起動に使われなかったシステムでは、init.d スクリプトの動作を防ぐ保護措置が、OpenRC に組み込まれています。

利用可能なサービスの一覧表示

利用できるすべてのサービスを、systemctllist-units 引数を使用して一覧できます:

root #systemctl list-units
UNIT                               LOAD   ACTIVE SUB       DESCRIPTION
boot.automount                     loaded active waiting   EFI System Partition Automount
proc-sys-fs-binfmt_misc.automount  loaded active waiting   Arbitrary Executable File Formats File System Automount Point
...

以下のファイル名の接尾辞が関心の対象となるでしょう:

接尾辞 説明
.service 普通サービスファイル(デーモンを直に起動するだけのものなど)
.socket ソケットリスナー(inetd と同様です)
.path サービスのファイルシステムトリガー(ファイルが更新されたときにサービスを実行するなど)

代わりにsystemctlツールを使用して、(暗黙なものも含む)すべてのサービスの一覧を表示できます:

root #systemctl --all --full

最後に、起動に失敗したサービスを確認する方法です:

root #systemctl --failed

サービスの有効、無効、開始そして停止

サービスを有効にする一般的な方法は次のコマンドを使用します。:

root #systemctl enable foo.service

サービスは、同様に無効にすることが出来ます:

root #systemctl disable foo.service

これらのコマンドは、既定のターゲットの既定の名前を使用してサービスを有効にします(この2つとも、サービスファイルの"install"セクション内で指定されます)。しかしながら、時々サービスがこの情報を提供しなかったり、ユーザが他の名前/ターゲットを好む場合があります。

これらのコマンドは、サービスを次の起動時から有効あるいは無効にすることに注意してください。サービスを直ちに開始するには、次のコマンドを使用してください:

root #systemctl start foo.service

サービスは、同様に停止することができます。:

root #systemctl stop foo.service

カスタムユニットファイルのインストール

カスタムユニットファイルは/etc/systemd/system内に置くことが出来ます。systemctl daemon-reloadを実行したあと、これらのファイルは認識されます:

root #systemctl daemon-reload

/lib/systemd/systemは、パッケージマネージャによってインストールされたサービスファイル用に予約されています。

ユニットファイルのカスタマイズ

ユニットにわずかな変更のみが必要な場合、 /etc/systemd/system にある元のユニットファイル全体をコピーする必要はありません。/etc/systemd/system/ 内の、元のユニット名をもとにした *.d ディレクトリ (たとえば apache2.d) にファイルを置くことで、パッケージ管理で導入されたユニットの設定を上書きできます。

FILE /etc/systemd/system/apache2.d/mem-limit.confサービスファイルの設定を追加/上書きする例
[Service]
MemoryLimit=1G

systemdに変更を伝えるため、systemdの再読み込みが必要です:

root #systemctl daemon-reload

そして、変更を適用するために、サービスを再スタートする必要があります:

root #systemctl restart apache2

サービスのプロパティの変更が適用されたことを確認します。:

root #systemctl show --property=MemoryLimit apache2
MemoryLimit=1074000000

任意の名前でサービスを有効にする

ユニットの "[Install]" セクションの "Alias" で指定された名前が期待通りでなく、カスタマイズによって永続的な新たな名前を与えることも望まないときは、手動で /etc/systemd/system/*.wants/ 内にシンボリックリンクを作ることができます。

  • .wants ディレクトリの名前には、ターゲットか、新たなサービスに依存する別のサービスを指定します。

例えば、mysqld.servicedb.serviceとしてmulti-user.target内にインストールする場合:

root #ln -s /lib/systemd/system/mysqld.service /etc/systemd/system/multi-user.target.wants/db.service

サービスを無効にするなら、単にシンボリックリンクを削除してください:

root #unlink /etc/systemd/system/multi-user.target.wants/db.service

既に存在するサービス

Gentooのパッケージの中には、既にsystemdユニットファイルをインストールしているものがあります。これらに関しては、サービスを有効にするだけで十分です。ユニットファイルをインストールするパッケージの早見表は、systemd eclassユーザリストで確認できます。

以下の表は、OpenRCのサービスに合致するsystemdのサービスの一覧を示しています:

Service migration chart
Gentooパッケージ OpenRCサービス systemdユニット 注意
sys-apps/openrc bootmisc systemd-tmpfiles-setup.service 常に有効。tmpfiles.dを使用。
consolefont systemd-vconsole-setup.service 常に有効。vconsole.confを使用。
devfs
dmesg
fsck fsck*.service マウントによって暗黙的に使用
functions.sh 注意を参照 bug #373219
hostname (ビルドイン) /etc/hostname
hwclock 注意を参照 systemdの一部として常に有効(つまり、内蔵で、ユニットではありません)
keymaps systemd-vconsole-setup.service 常に有効。vconsole.confを使用。
killprocs
local
localmount local-fs.target 実際のユニットは/etc/fstabから暗黙的に作成されます。
modules systemd-modules-load.service 常に有効。/etc/modules-load.d/*.confを使用。
mount-ro
mtab
netmount remote-fs.target
numlock
procfs (ビルドイン)
root remount-rootfs.service
savecache n/a OpenRC内蔵
staticroute
swap swap.target 実際のユニットは/etc/fstabから暗黙的に作成されます。
swclock
sysctl systemd-sysctl.service sysctl.confsysctl.d/
sysfs (ビルドイン)
termencoding systemd-vconsole-setup.service 常に有効。vconsole.confを使用。
urandom systemd-random-seed-load.service
systemd-random-seed-save.service
app-admin/rsyslog rsyslog rsyslog.service
app-admin/syslog-ng syslog-ng syslog-ng.service
media-sound/alsa-utils alsasound alsa-store.service (デフォルトで有効)
alsa-restore.socket (デフォルトで有効)
net-misc/dhcpcd dhcpcd dhcpcd.service
net-misc/netifrc net.* net@.service net.*スクリプトのsystemdラッパー(net-misc/netifrc由来)
netctl@.service net-misc/netctlは元々Arch Linuxのツールです。
NetworkManager.service <networkmanager-0.9.8.4:dispatcher.dスクリプトが機能するよう、NetworkManager-dispatcher.serviceを有効にしてください。
システムが動作しているインターネット接続を検出するために、NetworkManager-wait-online.serviceを有効にしてください。
他のすべてのマネージャ(例:wicd、dhcpcd)と、wpa_supplicantを無効にしてください。
dhcpcd.service net-misc/dhcpcdが提供
systemd.networkd.service systemdの一部
net-misc/openntpd ntpd ntpd.service
net-misc/openssh sshd sshd.service sshdをデーモンとして実行
sshd.socket sshdをinetdライクなものをベースとして実行(入接続それぞれに対し)
net-wireless/wpa_supplicant wpa-supplicant wpa_supplicant.service D-Busによってコントロールされているデーモン(例えばNetworkManager用)
wpa_supplicant@.service インターフェイス固有のwpa_supplicant(wpa_supplicant@wlan0.serviceのようなものに使用されます)
net-print/cups cupsd cups.service クラシックな、起動時に立ち上がるサービス
cups.socket ソケットアクティベーション、パケットアクティベーション(cupsは必要な時に限って開始します)
cups.path
net-wireless/bluez bluetooth bluetooth.service
sys-apps/dbus dbus dbus.service
dbus.socket
sys-apps/irqbalance irqbalance irqbalance.service デーモンモードのみ対応
sys-apps/microcode-ctl microcode_ctl microcodeモジュールとして設定してください。これによって、microcodeが自身を読み込めるようになります。"Processor type and features" -> "CPU microcode loading support"と遷移し、intelかamdプロセッサのシステムによって正しいオプションを追加するのを忘れないでください。
sys-fs/udev udev udev.service
udev-mount (ビルドイン) /devはtmpfsとしてマウントされます。
udev-postmount udev-trigger.service
udev-settle.service
sys-power/acpid acpid acpid.service このサービスのほとんどの機能はsystemd自体が行います。従ってこのサービスを無効にすることを検討してください。
x11-apps/xdm (xdm) xdm.service OpenRCは、x11-base/xorg-serverによってインストールされた、一般的なxdm init.dを使用します。systemdでは、それぞれのDM(gdm.service、kdm.service...)に対応するユニットファイルを有効にする必要があります。
net-firewall/iptables iptables iptables-store.service
iptables-restore.service

タイマサービス

バージョン197からsystemdはタイマをサポートしたので、systemdのシステムではcronが不必要となりました。バージョン212からは永続的なサービスがサポートされたので、anacronさえ置き換えるようになりました。永続タイマは、タイマの実行予定時にシステムがシャットダウンされていたならば、次の予定時に実行されます。

以下は、特定のユーザとして実行するシンプルなタイマをどのように作成するかの例です。これは、ユーザがログインしていなくても実行されます。すべてのタイマ付きサービスはタイマと、タイマによって有効にされる以下のようなサービスファイルが必要です:

FILE ~/.local/share/systemd/user/backup-work.timer毎週平日にタイマを動かす例
[Unit]
Description=daily backup work
RefuseManualStart=no
RefuseManualStop=no
 
[Timer]
Persistent=false
OnCalendar=Mon-Fri *-*-* 11:30:00
Unit=backup-work.service
 
[Install]
WantedBy=default.target
FILE ~/.local/share/systemd/user/backup-work.serviceバックアップを取るサービスの例
[Unit]
Description=daily backup work
RefuseManualStart=no
RefuseManualStop=yes
 
[Service]
Type=oneshot
ExecStart=/home/<user>/scripts/backup-work.sh

まず、systemdにサービスファイルを再スキャンするよう伝えます:

user $systemctl --user daemon-reload

あるユーザとして、以下のコマンドを実行することで、手動でバックアップを取ることも可能です:

user $systemctl --user start backup-work.service

以下のコマンドで、手動でタイマを開始あるいは停止します:

user $systemctl --user start backup-work.timer
user $systemctl --user stop backup-work.timer

最後に、システムの開始毎にタイマを有効にするには、次のコマンドを実行してください:

user $systemctl --user enable backup-work.timer

サービス実行の最後の結果を確認します:

user $systemctl --user list-timers

失敗をEメールで通知

もし、タイマが有効になっているサービスが実行され失敗した場合、ユーザや管理者にEメールで通知することが出来ます。これは、もしサービスが失敗した場合に何をするかを指定する"OnFailure"の項を使用することで可能です。失敗は、呼び出されたスクリプトの終了コードが0でないことで検出されます。

次のようにそのためのスクリプトを変更します。:

FILE ~/.local/share/systemd/user/backup-work.serviceバックアップを取るサービスの例
[Unit]
Description=daily backup work
RefuseManualStart=no
RefuseManualStop=yes
OnFailure=failure-email@%i.service
 
[Service]
Type=oneshot
ExecStart=/home/<user>/scripts/backup-work.sh

これは、failure-email@.serviceサービスがインストールされている必要があります。このサービスは kylemannaのsystemd-utilsのリポジトリにあります。

cronの置き換え

以上のタイマやサービスファイルは、システム全体で利用可能にするために/lib/systemd/systemに追加することも出来ます。その場合、installセクションで、システムが開始した時にサービスを有効にするためにWantedBy=multi-user.targetと記述するべきです。

しかしながら、cronは/etc/cron.dailyや他の場所にあるスクリプトも実行します。いくつかのパッケージは、毎日実行されることを期待してスクリプトをそれらの場所に置きます。この振る舞いは、sys-process/systemd-cronをインストールすることで、systemdでエミュレート出来ます。その場合、以下のコマンドで新しい代替のcronを有効にしてください:

root #systemctl enable cron.target
root #systemctl start cron.target

トラブルシューティング

/dev/kmsg buffer overrun, some messages lost

問題
システムを起動中、無限に次のメッセージが表示される:/dev/kmsg buffer overrun, some messages lost。ブートプロセスがログインに到達しないので、一向にコンソールへのログイン画面が表示されない。
解決策
大抵の場合、この問題はCONFIG_POWER_SUPPLY_DEBUGオプションがカーネルで有効になっているからです。現在の回避策は、カーネルでこのオプションを無効にし、再コンパイルして、インストールそして新しいカーネルで起動することです。また、解決策はGentooフォーラムのこのスレッドにもあります。このフォーラムの一人のユーザによれば、この問題は、埋め込みシステムでI2C EEPROMを使用している時にも発生しました[1]。この場合、解決策は、カーネルオプションCONFIG_I2C_DEBUG_COREを無効にすることでした。

グラフィカルセッションがランダムな場所に開かれる

既定で、systemdはgettyプロセスを、使用される予定の時だけ始動させます。これによっていくつかの(GDMのような)ディスプレイマネージャが、残りのTTYをグラフィカルセッションのために必要に応じて使用し、結果としてコンソールやグラフィカルセッションが、使用される順番によってランダムに配置されることになります。

より“古典的な”挙動 (つまりtty1からtty6までで起動されるコンソールと残りのTTYで起動するグラフィカルセッション) を使い続けるには、 getty を常にTTY上で起動するよう systemd に強制します:

root #systemctl enable getty@tty{2,3,4,5,6}.service

LVM

OpenRCからsystemdに切り替え中、LVMが適切にシステムボリュームにマウントされている必要があるならば、LVMサービスを有効にしてください:

root #systemctl enable lvm2-monitor.service

ルートボリュームを有効にする必要はないかもしれません(もしLVMがinitramfsに統合されているなら)が、サービスが有効でない限り、他のLVMボリュームが動作しないかもしれません。

systemd-bootchart

CONFIG_DEBUG_KERNELCONFIG_SCHED_DEBUGそしてCONFIG_SCHEDSTATSを確実に有効にしてください。

KERNEL systemd-bootchartのサポートを有効にする
File systems  --->
	Pseudo filesystems --->
	[*] /proc file system support
Kernel hacking  --->
	[*] Kernel debugging
	[*] Collect scheduler debugging info
	[*] Collect scheduler statistics

次に、systemd-bootchart.serviceを有効にしてください:

root #systemctl enable systemd-bootchart

この変更の結果として、毎回の起動後に、/run/log/にSVG形式のbootchartレポートが作成されます。これは最新のウェブブラウザで閲覧することが出来ます。

systemd-bootchartの代替として、サービスの開始は以下のコマンドでビジュアライズ化することが出来ます:

root #systemd-analyze plot > plot.svg

systemd用のsyslog-ngソース

設定ファイルである/etc/syslog-ng/syslog-ng.confunix-dgram('/dev/log');を追加する必要はありません。これを行うと、syslog-ngが失敗します(少なくともsyslog-ng-3.7.2以上では)。source src { ...; };の行を以下のように、syslog-ngの記事で示されているように更新してください:

FILE /etc/syslog-ng/syslog-ng.conf
# openrcでのデフォルト
#source src { system(); internal(); };
 
# systemd
source src { systemd-journal(); internal(); };

sys-fs/cryptsetupの設定

systemdは/etc/conf.d/dmcryptに従わないようです(bug #429966を参照してください)。従って、/etc/crypttabファイルで設定をする必要があります:

FILE /etc/crypttab暗号化されたブロックデバイス用の設定ファイル
crypt-home UUID=c25dd0f3-ecdd-420e-99a8-0ff2eaf3f391 -

cryptsetupUSEフラグをsys-apps/systemdに対し確実に有効にしてください。これで、起動時に各エントリに対し、サービス(上記の例ではcryptsetup@crypt-home.service)を生成する、/lib/systemd/system-generators/systemd-cryptsetup-generatorがインストールされます。

開始に失敗したユニットの確認

開始に失敗したユニットを確認するには、次のコマンドを実行してください:

root #systemctl --failed

デバッグモードを有効にする

より多くの情報を得るには、/etc/systemd/system.confで以下のように設定してください:

FILE /etc/systemd/system.conf
LogLevel=debug

あるいは、tty9のターミナルで開かれるデバッグシェルを有効にしてください。これは、ブートプロセス中のサービスをデバッグするのに役立ちます。

root #systemctl enable debug-shell.service

e4ratの使い方

/etc/e4rat.confの'init'設定を/lib/systemd/systemdに編集するのを忘れないでください。そうでないと、OpenRCを起動し続けるでしょう。

GRSecurityのハードニング

grsecurityが有効になっていると、systemd-networkdは以下のエラーをログに残すかもしれません:

CODE systemd-networkdのエラー
could not find udev device: Permission denied

このエラーは、systemd-networkdが非ルートユーザの下で活動していて、grsecurityがそのユーザに対して完全な/sys構造に対するアクセスを拒否しているからです。このオプションを無効にするには、カーネルオプションCONFIG_GRKERNSEC_SYSFS_RESTRICTを無効にしてください。

logindも、CONFIG_GRKERNSEC_PROCが有効になっているとちょっとした権限問題が発生するかもしれません。bug #472098を確認してください。

shutdown -rFがfsckを強制しない

systemd-fsckサービスが、必要になったらfsckを行う事になっています。このサービスはshutdown-rFオプションに従いません。しかし、その代わりに以下のカーネル起動パラメータに従います。

起動パラメータ 対応しているオプション 説明
fsck.mode auto
force
skip
動作のモードを操作します。既定ではautoとなっていて、ファイルシステムチェッカーが必要と認識した時にファイルシステムチェックが行われます。forceは完全なファイルシステムチェックを状況にかかわらず行います。skipはいかなるファイルシステムチェックも行いません。
fsck.repair preen
yes
no
動作のモードを指定します。既定ではpreenとなっていて、安全に解決できる問題を自動的に修復します。yesはfsckの質問にすべてyesと答え、noはすべての質問にnoと答えます。

参考

外部資料

参照