systemd

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page Systemd and the translation is 100% complete.
Outdated translations are marked like this.

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

init システムの切り替えは、システムの構成や、時としてソフトウェアのインストール可否に深く関わる、簡単には行えない操作です。一般的には、init システムはインストール時に (systemd または openrc stage3 tarball のどちらかをダウンロードすることによって) 選択され、どうしても必要な場合にのみ変更されるでしょう。Gentoo らしく、systemdOpenRC の他にもいくつかの init システムがサポートされています。

希望に反して systemd が依存関係として取り込まれようとしている場合は、Gentoo without systemd を参照してください。

インストール

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

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

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-sources を使った高速設定
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 cgroups
	[ ] 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 --->
	Networking options --->
		[*] Unix domain sockets
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  --->
	[*] 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 support (supports v3, v4 and v5)
	Pseudo filesystems --->
		[*] Tmpfs virtual memory file system support (former shm fs)
		[*]   Tmpfs POSIX Access Control Lists
		[*]   Tmpfs extended attributes

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

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

システムが BFQ スケジューラを使用している場合は、階層型スケジューリングサポートを有効にすることが BFQ の開発元によって推奨されています:

カーネル BFQ スケジューラ
IO Schedulers  --->
	<*> BFQ I/O scheduler
        [*]   BFQ hierarchical scheduling support

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

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

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

root #emerge --ask sys-kernel/genkernel

または

root #emerge --ask sys-kernel/dracut

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

ファイル /etc/dracut.conf.d/usrmount.conf
# Dracut modules to add to the default
add_dracutmodules+=" usrmount "

genkernel を利用する場合、カーネルをリビルドする前に、genkernel の設定ファイル /etc/initramfs.mounts 内で /usr が設定されていることを確かめてください。これで /usr が initramfs プロセス中にマウントされるようになります:

ファイル /etc/initramfs.mounts
/usr
root #genkernel --install all

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

LVM と initramfs を使う

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

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

+dns-over-tls Enable DNS-over-TLS support
+gcrypt Enable use of dev-libs/libgcrypt for various features
+kernel-install Enable kernel-install
+kmod Enable kernel module loading via sys-apps/kmod
+lz4 Enable lz4 compression for the journal
+openssl Enable use of dev-libs/openssl for various features
+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
+sysv-utils Install sysvinit compatibility symlinks and manpages for init, telinit, halt, poweroff, reboot, runlevel, and shutdown
+zstd Enable support for ZSTD compression
acl Add support for Access Control Lists
apparmor Enable support for the AppArmor application security system
audit Enable support for sys-process/audit
boot Enable EFI boot manager and stub loader
bpf Enable BPF support for sandboxing and firewalling.
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
elfutils Enable coredump stacktraces in the journal
fido2 Enable FIDO2 support
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
lzma Support for LZMA compression algorithm
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
secureboot Automatically sign efi executables using user specified key
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*
test Enable dependencies and/or preparations necessary to run tests (usually controlled by FEATURES=test but can be toggled independently)
tpm Enable TPM support
ukify Enable systemd-ukify
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 サービスとの干渉を避けるため、elogind 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を再インストールしてください)。

root #emerge --oneshot sys-apps/openrc
root #emerge --ask --depclean

それでもまだ sys-apps/sysvinitsys-apps/systemd をブロックしている場合は、sysvinit または sys-apps/openrc が world ファイルに含まれないようにしてください:

root #emerge --deselect sys-apps/openrc sys-apps/sysvinit

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 を削除することができます。

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

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.confsystemd 用 GRUB 設定の例
title=Gentoo with systemd
root (hd0,0)
kernel /vmlinuz root=/dev/sda2 init=/lib/systemd/systemd

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

GRUB

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

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

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

ファイル /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の例です:

ファイル /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 レガシーと GRUB の両方に対して通用します。

アップグレード

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

root #systemctl daemon-reexec

設定

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

systemd をインストールしたら、次を実行してください:

root #systemd-machine-id-setup
root #systemd-firstboot --prompt
root #systemctl preset-all
警告
systemd-firstboot が実行されていない場合は、次回ブート時に自動で実行されるでしょう。しかしながら、これは通常のブートプロセスに割り込むため、例えば SSH 経由でサーバにアクセスする場合など、対話的コンソールへアクセスできないユーザはシステムにアクセスできなくなってしまうでしょう。
メモ
対応する設定ファイルの変更によって更新できる設定もありますが、大半の設定は 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 で設定できます。

ファイル /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.confvirtualbox モジュール用の設定ファイル例
vboxdrv
vboxnetflt
vboxnetadp
vboxpci

ブート時のパーティションの自動マウント

systemd は systemd-gpt-auto-generator を介して、各種パーティションを標準化された場所に自動的にマウントすることができます。これにより、ブート後に基本的なパーティションを fstabカーネルコマンドラインroot= パラメータも使わずに、自動的にマウントさせることができます。この機能を使用するためには、まず systemd を initramfs に含めなくてはなりません。systemd がインストールされているシステム上で Dracut で生成された initramfs イメージに関しては、これはデフォルトでそうなっています。そして、各パーティションが正しい Partition Type GUID を持たなくてはなりません。最も重要な GUID のリストは systemd-gpt-auto-generator のマニュアルで読むことができ、完全なリストは wikipedia で読むことができます。

現在のパーティションの Partition Type GUID を一覧表示するには:

root #lsblk -o NAME,LABEL,PARTLABEL,PARTTYPE,PARTTYPENAME,MOUNTPOINT

systemd-gpt-auto-generator は以下の場所にパーティションを自動マウントすることができます。正しい GUID はシステムの CPU アーキテクチャに応じて異なることに注意してください:

  • / - SD_GPT_ROOT_....
  • /boot/ - /efi/ も XBOOTLDR パーティションも無い場合 SD_GPT_ESP、それ以外の場合 SD_GPT_XBOOTLDR
  • /efi/ - /efi/ がルートに存在する場合 SD_GPT_ESP、それ以外の場合 ESP は /boot/ にマウントされます
  • /home/ - SD_GPT_HOME
  • /srv/ - SD_GPT_SRV
  • /usr/ - SD_GPT_USR_....
  • /var/ - SD_GPT_VAR
  • /var/tmp/ - SD_GPT_TMP
  • スワップ - SD_GPT_SWAP

以下は 1 個の EFI システムパーティションと 1 個の x86-64 root パーティションからなる、最も基本的なパーティションレイアウトの例です。

root #lsblk -o NAME,LABEL,PARTLABEL,PARTTYPE,PARTTYPENAME,MOUNTPOINT
NAME        LABEL    PARTLABEL            PARTTYPE                             PARTTYPENAME                 MOUNTPOINT
nvme1n1
├─nvme1n1p1 ESP      EFI System Partition c12a7328-f81f-11d2-ba4b-00a0c93ec93b EFI System                   /boot
└─nvme1n1p2 Gentoo   Gentoo               4f68bce3-e8cd-4db1-96e7-fbcaf984b709 Linux root (x86-64)          /

EFI システムパーティションの PARTTYPEc12a7328-f81f-11d2-ba4b-00a0c93ec93b で、これは /efi/ または /boot/ のうち、どちらのマウントポイントが利用可能か、そしてディスク上に Extended Boot Loader Partition (PARTTYPE=bc13c2ff-59e6-4262-a352-b275fd6f7172) があるかに応じて、どちらかにマウントされるでしょう。x86-64 root パーティションの PARTTYPE4f68bce3-e8cd-4db1-96e7-fbcaf984b709 です。

Partition Type GUID が正しくない場合は、fdisk などのパーティショニングツールを使用して、データの損失を伴うことなく変更することができます。パーティションタイプを変更するためには、システムはオフラインでなくてはならないことに注意してください! 以下の手順を完了するためには、システムレスキューイメージまたは第 2 の OS を使用しなくてはなりません。

fdisk でパーティションタイプを変更したいパーティションを含むディスクを開いてください。この例では /dev/nvme1n1 を使用します:

root #fdisk /dev/nvme1n1
 
Welcome to fdisk (util-linux 2.39.3).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
 
 
Command (m for help):

p コマンドで現在のパーティションレイアウトを一覧表示してください:

Command (m for help): p
 
Disk /dev/nvme1n1: 1.82 TiB, 2000398934016 bytes, 3907029168 sectors
Disk model: Samsung SSD 970 EVO Plus 2TB
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: B25D5B33-4A10-F940-826C-3CB24ADC7D86
 
Device           Start        End    Sectors  Size Type
/dev/nvme1n1p1    2048    1052671    1050624  513M EFI System
/dev/nvme1n1p2 1052672 3907028991 3905976320  1.8T Linux root (x86-64)

t コマンド、変更したいパーティション番号、希望するパーティションタイプの別名を入力して、任意のパーティションの Partition Type GUID を変更してください:

Command (m for help): t
Partition number (1,2, default 2): 2
Partition type or alias (type L to list all): L
Partition type or alias (type L to list all): 23
 
Changed type of partition 'Linux root (x86-64)' to 'Linux root (x86-64)'.

Partition Type GUID を変更するべきすべての追加のパーティションに対して上のステップを繰り返してください。完了したら、w コマンドで変更を保存してください:

Command (m for help): w
メモ
systemd-gpt-auto-generator は、システムを起動している EFI システムパーティションと同じディスク上にあるパーティションだけを自動マウントするでしょう。
ヒント
一部のツールは、カーネルコマンドラインに root= 引数がまったく無いと、おかしな動作をするかもしれません。そのようなツールを正常動作させるためには、カーネルコマンドラインに root=/dev/gpt-auto-root を追加してください。この手法は、ハイバネーションのためにスワップパーティションではなくルートパーティション上のスワップファイルを使用している場合にも有用です。つまり、カーネルコマンドライン上で resume=/dev/gpt-auto-root resume_offset=xxxxxxxxx として復帰先を指定することができます。

ネットワーク

systemd はさまざまなネットワーク管理ツールに対応しています。

systemd-networkd

systemd システム上での有線ネットワークのセットアップの詳細については、systemd/systemd-networkd 記事を参照してください。

systemd-resolved

systemd システム上でのアドレス名解決 (DNS) のセットアップの詳細については、systemd/systemd-resolved 記事を参照してください。

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のロギングサービスとは分けられた実行可能形式です。

重要
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).
-S, --since=, -U, --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 homed に変換する

systemd-homed サブ記事を参照してください。

サービス

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

ExecReload= を実装するサービスには、サービス自体を再開することなく、設定を再読み込みするように命令することができます:

root #systemctl reload foo.service

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

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

root #systemctl daemon-reload

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

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

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

ドロップインディレクトリと設定ファイルは、systemctl edit ユーティリティを使用するか、または手動で作成することができます。

編集ユーティリティは次のようにして呼び出すことができます:

root #systemctl edit apache2.service
ファイル /etc/systemd/system/apache2.service.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
メモ
ドロップインは、上書きされるユニットから取得されたアイテムをリストエントリ (ExecStart= など) に追加します。取得したアイテムを削除するためには、先にリストエントリを空にして、その後に希望するアイテムを追加する必要があります。例えば:
ファイル /etc/systemd/system/foo.service.d/override.confドロップイン内で ExecStart= エントリを空にする
[Service]
ExecStart=
ExecStart=/usr/bin/bar

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

ユニットの [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

ユーザサービス

ユーザ毎の systemd 実行単位としてサービスを管理することができます。これにより、ユーザは固有のサービスまたはタイマを設定することができます。

ユーザユニットは複数の場所に配置することができます。ユーザは $XDG_CONFIG_HOME/systemd/user/ に配置することができます。インストールされたパッケージは /usr/lib/systemd/user/ に配置します。

ユーザサービスは systemctl--user オプションを使用します。例えば、mpd ユーザサービスを開始するには:

user $systemctl --user start mpd

タイマサービス

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

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

ファイル ~/.config/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
ファイル ~/.config/systemd/user/backup-work.serviceバックアップを取るサービスの例
[Unit]
Description=daily backup work
RefuseManualStart=no
RefuseManualStop=yes
 
[Service]
Type=oneshot
ExecStart=/home/<user>/scripts/backup-work.sh

これらのユニットファイルは、手動か、systemctl edit ユーティリティを使って作成することができます:

user $systemctl edit --force --full --user backup-work.timer

ユニットファイルを手動で作成するときは、ファイルは ~/.config/systemd/user ディレクトリ内に配置してください。関連するユーザのためにディレクトリを作成する必要があるかもしれません:

user $mkdir -p ~/.config/systemd/user

ユーザがログインしていない間もタイマを実行させるには、残留セッションを有効化しておいてください:

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でないことで検出されます。

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

ファイル ~/.config/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

トラブルシューティング

動作中のサービスのせいでシャットダウンや再起動が遅い

問題
ブロックしているサービスがタイムアウトするのを systemd が待つ時間のデフォルト設定のために、systemd のシステムサービスまたはユーザサービスがシステムの電源オフ/シャットダウンまたは再起動操作を非常に遅くすることがある。
解決策
この操作を高速化するためには、サービスがタスクを正しく完了しないかもしれないリスクを負う代わりに、デフォルトタイムアウト値を減らすことができます。効率化するには、システムサービスとユーザサービスのデフォルトタイムアウトを短縮する、以下の設定変更の両方を反映させる必要があります。
ファイル /etc/systemd/system.conf.d/system.conf反応しないシステムサービスのデフォルトタイムアウトを 10s に減らす
[Manager]
DefaultTimeoutStopSec=10s
ファイル ~/.config/systemd/user.conf反応しないユーザサービスのデフォルトタイムアウトを 10s に減らす
[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_KERNELCONFIG_SCHED_DEBUGそしてCONFIG_SCHEDSTATSを確実に有効にしてください。

カーネル 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の記事で示されているように更新してください:

ファイル /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 -

cryptsetupUSEフラグを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は以下のエラーをログに残すかもしれません:

コード 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と答えます。

追加の systemd バイナリ

特定の USE フラグを設定することで、多数の追加の systemd バイナリをビルドすることができます。以下は、不完全ですが、USE フラグからバイナリへの対応表です。

USE フラグ ビルドされる追加のバイナリ
curl /lib/systemd/systemd-journal-upload
http /lib/systemd/systemd-journal-gatewayd
/lib/systemd/systemd-journal-remote

関連項目

外部資料

参照