Systemd/ja

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

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

amd64ベースのシステムについては、Gentooはパッケージを推奨しています.

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

カーネル
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"を参照してください.

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

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

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

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

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

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

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

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

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

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

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

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

もしがをブロックしている場合、の のUSEフラグを無効にしてみてください. もし必要ならば、あとでそのUSEフラグを有効にすることが出来ます（そしてを再インストールしてください）.

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

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

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

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

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

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

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

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

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

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

引数は、カーネルのコマンドラインの直後に追加されるべきです. の例です：

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

の使い方を知るには:

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

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

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

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

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

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

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

ログファイルの対応
systemd は、 や などの外部のログシステムに依存しない、独自の手法でログファイルを管理します.

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

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

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

{{RootCmd|gpasswd --add larry systemd-journal}}

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

よく使われる {{c|journalctl}} のオプション:

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

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

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


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

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

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

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

利用可能なサービスの一覧表示
利用できるすべてのサービスを、 の  引数を使用して一覧できます:

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

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

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

サービスの有効、無効、開始そして停止
サービスを有効にする一般的な方法は次のコマンドを使用します. :

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

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

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

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

カスタムユニットファイルのインストール
カスタムユニットファイルは内に置くことが出来ます. を実行したあと、これらのファイルは認識されます：

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

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

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

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

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

任意の名前でサービスを有効にする
ユニットの "[Install]" セクションの "Alias" で指定された名前が期待通りでなく、カスタマイズによって永続的な新たな名前を与えることも望まないときは、手動で 内にシンボリックリンクを作ることができます. ディレクトリの名前には、ターゲットか、新たなサービスに依存する別のサービスを指定します.

例えば、をとして内にインストールする場合：

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

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

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

ユーザサービス
It is possible to manage services as a per-user instance. This allows users to setup their own services or timers.

User units can be located at multiple places. Users are allowed to place them to. Installed packages place them to.

User services use   option. For example to start a user service:

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

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

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

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

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

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

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

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

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

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

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

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

トラブルシューティング

 * 上流のデバッグガイド
 * 上流のデバッグガイド
 * 上流のデバッグガイド

/dev/kmsg buffer overrun, some messages lost

 * 問題: システムを起動中、無限に次のメッセージが表示される： . ブートプロセスがログインに到達しないので、一向にコンソールへのログイン画面が表示されない.


 * 解決策: 大抵の場合、この問題は CONFIG_POWER_SUPPLY_DEBUG オプションがカーネルで有効になっているからです. 現在の回避策は、カーネルでこのオプションを無効にし、再コンパイルして、インストールそして新しいカーネルで起動することです. また、解決策はGentooフォーラムのこのスレッドにもあります. このフォーラムの一人のユーザによれば、この問題は、埋め込みシステムでI2C EEPROMを使用している時にも発生しました . この場合、解決策は、カーネルオプション CONFIG_I2C_DEBUG_CORE を無効にすることでした.

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

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

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

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

systemd-bootchart
CONFIG_DEBUG_KERNEL 、 CONFIG_SCHED_DEBUG そして CONFIG_SCHEDSTATS を確実に有効にしてください.

次に、を有効にしてください：

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

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

systemd用のsyslog-ngソース
設定ファイルであるに を追加する必要はありません. これを行うと、が失敗します（少なくともsyslog-ng-3.7.2以上では）. の行を以下のように、syslog-ngの記事で示されているように更新してください：

sys-fs/cryptsetupの設定
systemdはに従わないようです（を参照してください）. 従って、ファイルで設定をする必要があります：

USEフラグをに対し確実に有効にしてください. これで、起動時に各エントリに対し、サービス（上記の例では ）を生成する、がインストールされます.

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

デバッグモードを有効にする
より多くの情報を得るには、で以下のように設定してください：

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

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

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

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

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

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

参考

 * Sakaki's EFI Install Guide - 特に、Configuring systemd and installing necessary toolsと名付けられたチャプタを見てください.
 * systemdに強く依存しているパッケージ
 * systemdに強く依存しているパッケージ

外部資料

 * FAQ
 * Tips and tricks