Systemd/ja

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

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

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

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

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

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

ディレクトリ
ディレクトリは、systemd やその他のアプリケーションによって、 ファイルや、ソケット、state ファイルの一時的な保存場所として利用されます.

systemd パッケージのインストール時に自動的に作成されますが、この変更の影響により、OpenRC においても自動マウントの対象となり、様々なソフトウェアパッケージがディレクトリを使用するようになる可能性があることに注意してください.

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

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

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

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

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

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

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

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

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

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

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

最後に、新しいフラグを使用してシステムを更新します. :

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

systemd でブートする
systemd を実行するため、カーネル（もしくは initramfs）が使用する を切り替えます.

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

Grub Legacy (0.x)
カーネルのコマンドライン引数として  を追加する必要があります. の一例からの抜粋はこのようになるでしょう:

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

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

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

genkernel-next の initrd を使用するときには,  ではなく   を指定してください.

カーネルのコンフィグ
カーネルのコンフィギュレーションに init の設定を書き込むこともできます. を参照してください. この技法は と  の両方に対して通用します.

root のパスワードの設定
この時点でシステムの root パスワードを設定することを忘れないでください. 何かがうまくいかなかったとき、systemd は root のパスワードを要求して、メンテナンスモードに入ります.

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

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

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

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

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

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

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

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

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

時刻と日付
時刻と日付は ユーティリティで設定できます. などを利用せず、systemd 付属の実装によって同期を行う機能も持ちます.

の使い方を知るには:

モジュールの自動読み込み
Automatic module loading is configured in a different file, or rather directory of files. The configuration files are stored in. On boot every file with a list of modules will be loaded. The file format is a list of modules separated by newlines and can have any name as long as it ends with. The module loading can be separated by program, service or whatever way that fits personal preference. An example is listed below:

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

systemd-networkd を設定するには、 の下に ファイルを作成します. 詳しくは systemd.network(5) をご覧ください. 以下は単純な DHCP 接続の構成例です:

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

NetworkManager
ネットワークの設定を構成するのによく使用されるのが NetworkManager です. X11 上のデスクトップから設定するには、次のコマンドを実行するだけです:

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

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

ログファイルの対応
systemd は、 や などの外部のログシステムに依存しない、独自の手法でログファイルを管理します. メッセージを閲覧するには を使います. ユーザーの好みの外部ツールを利用するよう設定することもでき、その他さまざまな個人の要求を満たす形に journald を設定する方法については、 をご覧ください.

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

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

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

ブートプロセスの冗長性の設定
When migrating to systemd users usually notice differences regarding verbosity of boot process:


 * The boot option  not only influences the kernel output, but also that of systemd itself. Then, while setting up systemd for the machine, drop the option to see any errors could arise more easily. After that, add it back to get a quiet (and faster) boot.
 * Even passing the  boot option, systemd can still be configured to show its status by also passing.
 * When not using the  boot option, some messages might be overwriting consoles. That is caused by the kernel configuration (see  and look for ). To tweak it pass the   boot parameter to the kernel (and update the value according to preference, for instance set a lower value like 1).

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

OpenRC サービス
Although systemd originally intended to support running old init.d scripts, that support is not suited well for a dependency-based RC like OpenRC and thus is completely disabled on Gentoo. OpenRC provides additional measures to ensure that init.d scripts can't be run when OpenRC was not used to boot the system (otherwise the results would be unpredictable).

Listing available services
All available service units can be listed using the  argument of :

The following file suffixes are of interest:

Alternatively the tool can be used to list all services (including implicit ones):

最後に起動に失敗したサービスを確認します. :

Enabling, disabling, starting, and stopping services
サービスを有効にする一般的な方法は次のコマンドを使用します. :

Services can be disabled likewise:

These commands enable services using their default name in default target (both specified in "Install" section of the service file). However, sometimes services either don't provide that information or users prefer to have another name/target.

Note that these commands only enable or disable the system to be started on a next boot; to start the service right now, use:

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

Installing custom unit files
Custom unit files can be placed in, where they will be recognized after running :

is reserved for service files installed by the package manager.

Customizing unit files
When only minor changes to a unit are needed, there's no need to create a full copy of the original unit file in. Overriding settings in a package management provided unit can be achieved by drop-in files in a directory named after the original unit (e.g. ) in.

A reload of systemd is needed to inform it of the changes:

Then the service needs to be restarted to apply the changes:

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

Enabling a service under a custom name
When the name provided by "Alias" in the unit's "[Install]" section does not meet the expectations and providing a permanent new value for this through a customization is not desired, a symlink can be created manually in. The name of the directory can either specify a target or another service which will depend on the new one.

For example, to install as  in the :

To disable the service, just remove the symlink:

Native services
Some of Gentoo packages already install systemd unit files. For these services, it is enough to enable them. A quick summary of packages installing unit files can be seen on systemd eclass users list.

The following table lists systemd services matching OpenRC ones:

Timer services
Since version 197 systemd supports timers, making cron unnecessary on a systemd system. Since version 212 persistent services are supported, replacing even anacron. Persistent timers are run at the next opportunity if the system was powered down when the timer was scheduled.

The following is an example on how to make a simple timer that runs in the context of a user. It will even run if the user is not logged in. Every timed service needs a timer and a service file that is activated by the timer as follows:

Firstly, tell systemd to rescan the service files:

It is possible to trigger the backup manually by running the following command:

Start and stop the timer manually as follows:

Finally, to activate the timer at every system start, run:

To check the last results of running the service:

Emailing failures
If a timed service runs and fails an e-mail can be send out to inform the user or administrator. This is possible with the "OnFailure" stanza which specifies what should happen if a service fails. A failure is detected by a non-zero return code of the invoked script.

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

This requires to have the service installed, which can be found in kylemanna's systemd-utils repository.

Replacing cron
The above timer and service files can also be added to to make them available system-wide. The install section should then say  to enable the service at system start.

However, cron also runs the scripts in and other locations. Several packages place scripts there that they expect to be run daily. This behavior can be emulated with systemd by installing. Then activate the new cron replacement with the following commands:

Troubleshooting

 * Upstream debugging guide
 * Upstream debugging guide
 * Upstream debugging guide

/dev/kmsg buffer overrun, some messages lost

 * Problem: When booting the system displays an infinite loop of . The login screen to console never appears since the system never gets to that point in the boot process.


 * Solution: Most of the time this issue is caused when the CONFIG_POWER_SUPPLY_DEBUG option is enabled in the kernel. The current workaround is to disable this option in the kernel, then recompile, install, and boot the new kernel. The solution can also be found in this thread on the Gentoo forums. According to one user one the forum, this issue was also seen when using I2C EEPROM on an embedded system . The solution in this case was to disable the CONFIG_I2C_DEBUG_CORE kernel option.

Graphical sessions opened in random places
By default systemd only launches a process when it's going to be used. This causes some display managers (like GDM) to use the remaining TTYs for opening graphical sessions on demand, which can result in having consoles and graphical sessions placed randomly depending on the order they were used.

To stick with a more "classical" behavior (i.e, consoles placed from to  and graphical sessions using the remaining TTYs) force it to always launch  on those:

lvm
When switching from OpenRC to systemd and lvm is needed to properly mount the system volumes, activate the lvm service:

While it might not be needed for activation of the root volume (if lvm is integrated into the initramfs) it might not work for other lvm volumes, unless the service is activated.

systemd-bootchart
As systemd-bootchart attempts to start, reconfigure it to invoke systemd instead:

The result of the bootchart is a report in SVG format located in.

syslog-ng conflicts with systemd
systemd creates as datagram socket  so syslog-ng needs to be told to read from a unix-dgram instead of a unix-stream as otherwise syslog-ng would be using a "wrong" stream:

syslog-ng source for systemd
There is no need to add  to the  config file. It will cause to fail (at least on version syslog-ng-3.7.2). Update the  line mentioned in the syslog-ng article as follows:

sys-fs/cryptsetup configuration
systemd does not seem to respect (see ) so it needs to be configured through the  file:

Based on the system's file, a new service file might need to be created. To do this, enable the  USE flag for. It will install. Executing it will create a service file in, which can now be copied to , adjusted manually and added to the desired runlevel.

Check for units that failed to start
Check for units that failed to start with:

Enable Debug Mode
To get more informations set the following in :

Or enable the debug-shell, that opens a terminal at tty9. This helps to debug services during the boot process.

e4rat usage
Please remember to edit setting 'init' to, otherwise it will keep booting OpenRC.

GRSecurity hardening
With grsecurity enabled, systemd-networkd might log the following error:

The error raises due to systemd-networkd working under a non-root user with grsecurity refusing access to the complete structure for such users. To disable this option, disable the CONFIG_GRKERNSEC_SYSFS_RESTRICT kernel option.

logind may also have subtle permission issues with CONFIG_GRKERNSEC_PROC active, see.

shutdown -rF does not force fsck
The service is responsible of running  when needed. It doesn't honor 's  option, but instead honors the following kernel boot parameters.

External resources

 * FAQ
 * Tips and tricks