systemd
Switching init systems is a non trivial operation that has implications for how the system is configured, and sometimes for what software can be installed or not. Generally, an init system will be chosen at installation time (i.e. by downloading either a systemd or an openrc stage3 tarball), and only changed if necessary. In true Gentoo style, in addition to systemd and OpenRC, several init systems are supported.
If systemd is being unwantedly pulled in as a dependency, see Gentoo without systemd.
インストール
もし<=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 をご覧ください):
Gentoo Linux ---> Support for init systems, system and service managers ---> [*] systemd
カーネルのオプションを手動で設定する場合は、次のカーネルオプションが必須となるか、あるいは推奨されます。(なお、sys-kernel/gentoo-sourcesを使わない場合は手動で設定しなければなりません)
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
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のシステム上では、次のオプションも有効にしてください:
[*] 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の開発元によって推奨されています。
IO Schedulers ---> <*> BFQ I/O scheduler [*] BFQ hierarchical scheduling support
最新の一覧を必要とする人は、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/dracut や sys-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 を自動でマウントするよう設定しておいてください。
/etc/dracut.conf.d/usrmount.conf
# Dracut modules to add to the default add_dracutmodules+="usrmount"
genkernel-next を利用する場合、カーネルをリビルドする前に、genkernel の設定ファイル中の UDEV 変数が yes
に設定されていることを確かめてください。/usr が initramfs に組み込まれるようになります:
/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
USE フラグ
USE flags for sys-apps/systemd System and service manager for Linux
acl
|
Add support for Access Control Lists |
apparmor
|
Enable support for the AppArmor application security system |
audit
|
Enable support for sys-process/audit |
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 |
fido2
|
Enable FIDO2 support |
gcrypt
|
Enable use of dev-libs/libgcrypt for various features |
gnuefi
|
Enable EFI boot manager and stub loader (built using sys-boot/gnu-efi) |
gnutls
|
Prefer net-libs/gnutls as SSL/TLS provider (ineffective with USE=-ssl) |
homed
|
Enable portable home directories |
http
|
Enable embedded HTTP server in journald |
idn
|
Enable support for Internationalized Domain Names |
importd
|
Enable import daemon |
iptables
|
Use libiptc from net-firewall/iptables for NAT support in systemd-networkd; this is used only if the running kernel does not support nftables |
kmod
|
Enable kernel module loading via sys-apps/kmod |
lz4
|
Enable lz4 compression for the journal |
lzma
|
Support for LZMA (de)compression algorithm |
openssl
|
Enable use of dev-libs/openssl for various features |
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 (polkit) authentication support |
pwquality
|
Enable password quality checking in homed |
qrcode
|
Enable qrcode output support in journal |
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* |
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) |
tpm
|
Enable TPM support |
vanilla
|
Disable Gentoo-specific behavior and compatibility quirks |
xkb
|
Depend on x11-libs/libxkbcommon to allow logind to control the X11 keymap |
zstd
|
Enable support for ZSTD compression |
プロファイル
systemd
USE フラグを、システム全体に対して有効化してください。また、systemd-logind サービスとの干渉を避けるため、consolekit
USE フラグを無効にしなければなりません。別の方法として、systemd サブプロファイルに切り替えることで、適切な USE フラグを初期設定とすることも可能で、この場合 make.conf を変更する必要はありません。
root #
eselect profile list
最後に、新しいプロファイルを使用してシステムを更新します。:
root #
emerge -avDN @world
Once this command is complete, it is important follow the Configuration steps.
依存関係の問題
OpenRCをsystemdに置換中、いくつか依存関係の問題が発生するかもしれません。
もしsys-apps/sysvinitがsys-apps/systemdをブロックしている場合、sys-apps/systemdのsysv-utils
のUSEフラグを無効にしてみてください。もし必要ならば、あとでそのUSEフラグを有効にすることが出来ます(そしてsys-apps/systemdを再インストールしてください)。
root #
emerge --oneshot sys-apps/openrc
root #
emerge --ask --depclean
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/udevとvirtual/libudevはsystemdを妨げるかもしれません。portageにこの問題を解決させるためには、USEフラグを設定したあと、virtualsを再インストールしてみてください:
root #
emerge --oneshot virtual/udev virtual/libudev
ブートローダ
sysv-utils
のUSEフラグが有効になっている場合、この操作はもはや必要ではありません。最低でもGentoo内ではバージョン239から、デフォルトで有効になっています。systemd を実行するため、カーネル(もしくは initramfs)が使用する init を切り替えます。
切替中に、以前のサービスマネージャーに対して設定されたサービスが自動的に起動することはありません。ネットワークなどの機能を回復するには、それらのサービスを再び有効化する必要があります。この文書の下部に位置するサービスセクションの中で解説します。
移行作業がシステムを壊してしまった場合、この手順での init の変更を差し戻すことによって、いつでも初期のサービスマネージャー (OpenRC) を使用してのブートに復旧することが可能です。この記事の末部に記載しているトラブルシューティングを実行するには、この方法で元の状態に戻します。
以下のサブセクションでは、ブートマネージャまたはカーネルのいずれかで init を切り替える方法を文書化します。
GRUB Legacy (0.x)
カーネルのコマンドライン引数として init=/usr/lib/systemd/systemd
を追加する必要があります。grub.conf の一例からの抜粋はこのようになるでしょう:
/boot/grub/grub.conf
systemd 用 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 に追加してください:
dracut が systemd をとりこんで生成した initramfs を使用するときには、この作業は必要ありません。initramfs が systemd を起動することになります。
/etc/default/grub
GRUB2 に systemd を設定# Append parameters to the linux kernel command line GRUB_CMDLINE_LINUX="init=/usr/lib/systemd/systemd"
あなたが経験豊富なユーザーで、GRUB2 の設定ファイルを手書きする場合には、linux
もしくはlinux16
コマンドに init=
パラメーターを追加してください。
/boot/grub/grub.cfg
GRUB2 設定ファイルの一部の例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の例です:
/etc/yaboot.conf
systemdのための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 では、最も基本的なシステムの詳細を設定するのには、いくつかのシステム設定ファイルをサポートしています。
After installing systemd, run the following:
root #
systemd-firstboot --prompt --setup-machine-id
root #
systemctl preset-all
If systemd-firstboot is not ran, it will automatically run on next boot. However, it interrupts the normal boot process, preventing access to the system from users who don't have access to the interactive console - like accessing a server via SSH.
対応する設定ファイルの変更によって更新できる設定もありますが、大半の設定は systemd が実行されていなければ動作しないユーティリティを使って管理します。hostnamectl、 localectl、timedatectl などの必要なユーティリティを使用するには、コンピューターを再起動してください。この場合の 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 で設定できます。
/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の例は以下に示されています:
/etc/modules-load.d/virtualbox.conf
virtualbox モジュール用の設定ファイル例vboxdrv vboxnetflt vboxnetadp vboxpci
ネットワーク
systemd is compatible with various network management tools.
systemd-networkd
systemd-networkd は簡単な有線接続を設定する時に便利です。初期状態では無効にされています。
systemd-networkd を設定するには、/etc/systemd/network の下に
- .network ファイルを作成します。詳しくは systemd.network(5) をご覧ください。以下は単純な DHCP 接続の構成例です:
/etc/systemd/network/50-dhcp.network
[Match] Name=en* [Network] DHCP=yes
Wired connection with static IP address (uses CIDR notation for subnetting):
/etc/systemd/network/50-static.network
[Match] Name=enp1s0 [Network] Address=192.168.1.10/24 Gateway=192.168.1.1 DNS=192.168.1.1
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 フロントエンドです。
For more details see the dedicated article.
ログファイルの対応
systemd は、app-admin/syslog-ng や app-admin/rsyslog などの外部のログシステムに依存しない、独自の手法でログファイルを管理します。
もし望むならば、ロギングサービスを、sysklogやsyslog-ngのような外部ユーティリティにメッセージを渡すように設定することもできます。状況に応じてsystemd-journaldサービスを設定する方法については、man journald.confをご覧ください。
systemdの統合されたロギングサービスは、ログメッセージを安全に、バイナリフォーマットに書き込みます。ログはjournalctlを使用することで読むことが出来ます。これは、systemd-journalのロギングサービスとは分けられた実行可能形式です。
systemdが動作しているシステムでは大体デフォルトである、systemdのsystemd-journald.serviceをロギングとして使用している時、通常ユーザがjournalctlコマンドを実行すると、unable to view system logsと表示されるでしょう。システムログを非ルートユーザで閲覧するには、ユーザは以下の3つのユーザグループのどれかに参加していなければなりません:systemd-journal、admあるいは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のような小さい数を指定するなどの調整を行ってください。
Usage
Converting traditional home directories to systemd homed
See the systemd/homed subarticle.
サービス
systemd がシステムモードで動作している状態に移行するために、ある時点でシステムを再起動する必要があります。この文書に最初から最後まで目を通し、systemd に対して再起動の前に可能な限りの設定が行われたことを確認してください。journalctl は systemd が起動していなくても動作しますが、systemctl が機能するには systemd が必要です。サービスの有効化と開始などの設定は、systemd が動作しているシステムにログインした後で行います。
プリセットサービス
ほとんどのサービスは、systemdが最初にインストールされた時に無効にされています。"プリセット"ファイルが提供されますので、適当なデフォルトサービスのセットを有効にするためにこのファイルを使用できます。
root #
systemctl preset-all
OpenRC サービス
当初の systemd は、旧来の init.d スクリプトの実行を可能にするように考慮されていましたが、このサポート機能が OpenRC のような依存性を基づく RC に適したものでなかったため、Gentoo では完全に無効化されています。予期しない結果を引き起こさないよう、OpenRC が起動に使われなかったシステムでは、init.d スクリプトの動作を防ぐ保護措置が、OpenRC に組み込まれています。
利用可能なサービスの一覧表示
利用できるすべてのサービスを、systemctl の list-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
Services implementing ExecReload=
can be commanded to reload their configuration without restarting itself:
root #
systemctl reload foo.service
カスタムユニットファイルのインストール
カスタムユニットファイルは/etc/systemd/system内に置くことが出来ます。systemctl daemon-reloadを実行したあと、これらのファイルは認識されます:
root #
systemctl daemon-reload
/lib/systemd/systemは、パッケージマネージャによってインストールされたサービスファイル用に予約されています。
ユニットファイルのカスタマイズ
ユニットにわずかな変更のみが必要な場合、 /etc/systemd/system にある元のユニットファイル全体をコピーする必要はありません。/etc/systemd/system/ 内の、元のユニット名をもとにした *.d ディレクトリ (たとえば apache2.d) にファイルを置くことで、パッケージ管理で導入されたユニットの設定を上書きできます。
Both the drop-in directory and config file can be created using the systemctl edit utility or manually.
The editing utility can be invoked as:
root #
systemctl edit apache2.service
/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
Drop-ins add items obtained from the unit being overridden to list entries (e.g.
ExecStart=
). In order to remove the obtained items, it is necessary to first clear the list entry and then add the desired items. For example:
/etc/systemd/system/foo.service.d/override.conf
Clearing ExecStart= entry in a drop-in[Service] ExecStart= ExecStart=/usr/bin/bar
任意の名前でサービスを有効にする
ユニットの "[Install]" セクションの "Alias" で指定された名前が期待通りでなく、カスタマイズによって永続的な新たな名前を与えることも望まないときは、手動で /etc/systemd/system/*.wants/ 内にシンボリックリンクを作ることができます。
- .wants ディレクトリの名前には、ターゲットか、新たなサービスに依存する別のサービスを指定します。
例えば、mysqld.serviceをdb.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のサービスの一覧を示しています:
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.confとsysctl.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 |
ユーザサービス
ユーザ毎の systemd 実行単位としてサービスを管理することができます。これにより、ユーザは固有のサービスまたはタイマを設定することができます。
ユーザユニットは複数の場所に配置することができます。ユーザは $XDG_CONFIG_HOME/systemd/user/ に配置することができます。インストールされたパッケージは /usr/lib/systemd/user/ に配置します。
ユーザサービスは systemctl の --user
オプションを使用します。例えば、mpd ユーザサービスを開始するには:
user $
systemctl --user start mpd
タイマサービス
バージョン197からsystemdはタイマをサポートしたので、systemdのシステムではcronが不必要となりました。バージョン212からは永続的なサービスがサポートされたので、anacronさえ置き換えるようになりました。永続タイマは、タイマの実行予定時にシステムがシャットダウンされていたならば、次の予定時に実行されます。
以下は、特定のユーザとして実行するシンプルなタイマをどのように作成するかの例です。これは、ユーザがログインしていなくても実行されます。すべてのタイマ付きサービスはタイマと、タイマによって有効にされる以下のようなサービスファイルが必要です:
~/.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
~/.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
These unit files can be created either manually or using the systemctl edit utility:
user $
systemctl edit --force --full --user backup-work.timer
When creating the unit files manually, the files are to be placed in the ~/.config/systemd/user directory. It may need to be created for the relevant user:
user $
mkdir -p ~/.config/systemd/user
To have a timer run while the user is not logged in, be sure to enable lingering sessions:
user $
loginctl enable-linger <username>
まず、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でないことで検出されます。
次のようにそのためのスクリプトを変更します。:
~/.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
トラブルシューティング
Slow shutdowns or reboot times due to running services
- Problem
- Occasionally a systemd system or user service will cause the system to greatly delay poweroff/shutdown or reboot operation due to systemd default wait times for the operation blocking service to time out.
- Solution
- To greatly speed up this operation, the default timeout values can be reduced at the expense of the service (potentially) not cleanly finishing a task. In order to be effective, both of the following configuration changes must be put into effect to shorten the default timeout system and user services.
/etc/systemd/system.conf.d/system.conf
Reduce default timeout to 10s for hanging system services[Manager] DefaultTimeoutStopSec=10s
~/.config/systemd/user.conf
Reduce default timeout to 10s for hanging user services[Manager] DefaultTimeoutStopSec=10s
/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_KERNEL、CONFIG_SCHED_DEBUGそしてCONFIG_SCHEDSTATSを確実に有効にしてください。
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.confにunix-dgram('/dev/log');
を追加する必要はありません。これを行うと、syslog-ngが失敗します(少なくともsyslog-ng-3.7.2以上では)。source src { ...; };
の行を以下のように、syslog-ngの記事で示されているように更新してください:
/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ファイルで設定をする必要があります:
/etc/crypttab
暗号化されたブロックデバイス用の設定ファイルcrypt-home UUID=c25dd0f3-ecdd-420e-99a8-0ff2eaf3f391 -
cryptsetup
USEフラグをsys-apps/systemdに対し確実に有効にしてください。これで、起動時に各エントリに対し、サービス(上記の例ではcryptsetup@crypt-home.service
)を生成する、/lib/systemd/system-generators/systemd-cryptsetup-generatorがインストールされます。
開始に失敗したユニットの確認
開始に失敗したユニットを確認するには、次のコマンドを実行してください:
root #
systemctl --failed
デバッグモードを有効にする
より多くの情報を得るには、/etc/systemd/system.confで以下のように設定してください:
/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は以下のエラーをログに残すかもしれません:
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と答えます。
|
関連項目
- Comparison of init systems — init システムを対比させ比較します。
- Sakaki's EFI Install Guide - 特に、Configuring systemd and installing necessary toolsと名付けられたチャプタを見てください。
- systemdに強く依存しているパッケージ
- OpenRC to systemd Cheatsheet — 日常的に使用される OpenRC のコマンドと、それと同等の systemd コマンドのリストです。