RHBA-2015:2092 systemd のバグ修正と機能強化のアップデート

Updated -

Red Hat Enterprise Linux 7 における systemd パッケージのアップデートにより、複数のバグが修正され、さまざまな機能強化が追加されました。

systemd パッケージには、Linux のシステムおよびサービスのマネージャーである systemd が含まれます。これは、SysV および LSB init スクリプトと互換性があります。積極的な並列化機能を提供し、起動サービスにソケットと D-Bus の有効化を使用し、デーモンのオンデマンド起動を提供し、Linux cgroups を使用したプロセスを記録します。また、システム状態のスナップショットと復元をサポートし、マウントポイントと自動マウントポイントを維持し、複雑なトランザクション依存ベースのサービス制御ロジックを実装します。また、sysvinit の一時的な代替としても機能します。

systemd パッケージはアップストリームのバージョン 219 にアップグレードされました。このアップグレードでは、以前のバージョンで発生したバグの修正と機能強化を多数提供しています。特に (BZ#1199644) では以下が提供されます。

  • systemd-tmpfiles ツールで、btrfs サブボリュームを作成する新しい "v" 行タイプのサポートが改善されました。基本的なファイルシステムが古いファイルシステムの場合は、通常のディレクトリを作成するためこれが自動的に低下します。特に、/var/lib/machines/ ディレクトリがない場合は、起動時にこの方法で作成されました。

  • /var/lib/containers/ ディレクトリは廃止され、/var/lib/machines/ に置き換えられました。"machines" という用語は、仮想マシンおよびコンテナーの両方に対する一般的な用語として systemd コンテキストで使用されています。したがって、ディレクトリには、QEMU/KVM から起動可能な未処理のイメージを含むことができるため、より適切であると見なされます。

  • "loginctl user-status" コマンドと "loginctl session-status" コマンドは、ステータスの出力のあとに、それぞれユーザーとセクションのログメッセージの中から最新の 10 行を表示します。同様に、"machinectl status" コマンドは、仮想マシンまたはコンテナーサービスに関連するログのうち、最新の 10 行を表示します。

  • "loginctl session-status" コマンドにこれ以上引数を追加しないと、呼び出し元セッションのステータスを表示します。同様に、"lock-session"、"unlock-session"、"activate"、"enable-linger"、および "disable-linger" コマンドは、呼び出し元のセッションまたはユーザーにそれぞれ適用するような場合に、セッションまたはユーザーのパラメーターがない状態で呼び出すことはできません。

  • systemd-tmpfiles ツールでは、ファイルに ACL を設定する "a" 行のサポートが改善されました。

  • アップグレードにより、systemd サービスは memory.usage_in_bytes cgroup 属性を公開し、"systemctl status" 出力が可能な場合は各サポートにそれを表示します。

  • ユーザーが 2 秒以内に Ctrl-Alt-Del を 7 回押すと、すぐに再起動します。この機能は、シャットダウンがハングして完了できない場合に、操作を迅速に進めるのに有用です。この種の再起動は、すべてのファイルシステムをアンマウントしているため、次の再起動時に fsck が実行しなくなります。

  • ユニットに対して既存のさまざまな "ConditionXYZ=" 設定に類似する "AssertXYZ=" 設定があります。失敗するとユニットが飛ばされ、そのジョブは継続しますが、このように宣言した失敗アサーションによりユニットの起動操作とそのジョブが失敗します。

  • systemctl ユーティリティで "edit" コマンドが改善しました。ユニットファイルで使用している場合は、(/usr/lib/ から /etc/ にコピーしてから) .d/ の一時的な設定抜粋でユニットファイルを拡張するか、ファイル全体を編集します。これにより ($EDITOR で設定した) ユーザーのエディターが呼び出され、編集後は修正した設定を再ロードします。

  • /etc/ ディレクトリのスタンドアロン設定ファイルを読み込むすべての systemd プログラムは、/etc/、/run/、/usr/local/lib/、/usr/lib/、および (--enable-split-usr オプションで設定されている場合は) /lib/ の /.conf.d/ 設定ディレクトリで対応するものをサポートします。特に、設定ファイル system.conf、user.conf、logind.conf、journald.conf、sleep.conf、bootchart.conf、coredump.conf、resolved.conf、timesyncd.conf、journal-remote.conf、および journal-upload.conf には、対応する設定ディレクトリがあります。ディストリビューションは /usr/lib/ 配下の設定ディレクトリを使用する必要があり、/etc/ 配下のディレクトリはシステム管理者に予約されています。

  • journalctl ユーティリティは、syslog 識別子 (別名 "tag") で一致する新しい "-t" オプションと "--identifier=" オプション、それに "--utc" オプションを改善して、UTC タイムゾーンでログのタイムスタンプを表示します。また、journalctl ユーティリティは "-n" オプションと "--lines=all" オプションを許可し、ページャーのラインキャッピングを無効にします。

  • "Type=oneshot" を設定したサービスでは ExecStart コマンドが必須ではなくなりました。

  • udev ルールは、TAG-="foobar" を設定したデバイスのタグを削除します。

  • "rescue" という単語がカーネルのコマンドラインに指定された場合、システムはレスキューモード (別名 rescue.target) で起動します。以前のバージョンでは、カーネルのコマンドラインで "1" または "systemd.unit=rescue.target" を指定した場合に限り利用できました。カーネルコマンドラインにおけるこの新しいオプションは、既存の "emergency" カーネルコマンドラインオプションも使用します。

  • このアップデートにより、logind デーモンは、PAM セッションとして web クライアントを登録する Cockpit などのプロジェクトで、新しいセッションタイプ "web" を使用します。

  • OnCalendar= 設定を最低 1 つは使用しているタイマーユニットは、timer-sync.target に到達した場合に限り起動します。この方法では、ローカルの Network Time Protocol (NTP)クライアントなどによって修正されるまで、システム時計は経過しません。これは、システム時計が無効な場合に、RTC がない組み込みマシンで特に便利です。

  • systemd-analyze ユーティリティでは、ユニットファイルのオフライン検証に新しいコマンド "verify" が追加されました。

  • 新しいシステムグループ "input" が追加され、すべての入力デバイスのノードにこのグループが割り当てられました。これにより、システムレベルのソフトウェアが入力デバイスとコンポーネントにアクセスことができるようになり、"audio" および "video" に対して提供されています。

  • "systemctl is-system-running" コマンドが追加され、システム全体のステータスを確認できるようになりました。たとえば、完全に起動していて実行しているかどうかを確認します。

  • ユニットファイルの [Install] セクションには、デフォルトのインスタンスを定義するための新しいフィールド DefaultInstance= が追加されました。これにより、インスタンスを指定せずに、テンプレートユニットが有効かどうかを作成します。

  • Linux Standard Base (LSB) init スクリプトは、$network の依存関係を公開し、簡易版の network.target ではなく、network-online.target の依存関係を取得します。これにより、LSB 処理は、SysV システムで使用されるロジックに近くなります。

  • PrivateDevices= ユニットファイルの設定は、機能バウンディングセットから CAP_MKNOD 機能を削除します。これにより DevicePolicy=closed が暗黙的に指定されます。

  • systemd におけるネイティブの tcpwrap サポートは廃止されました。tcpwrap を使用する必要がある場合は、従来の inetd デーモンの場合と同様に、tcpd デーモンを使用して socket-activated サービスを呼び出すことを検討してください。

  • 新しい条件チェック ConditionArchitecture= が追加され、 uname() の "machine" フィールドによって報告されたように、システムアーキテクチャーに基づいてユニットに条件が追加されます。

  • このアップデートにより、シャットダウンおよびブートで rfkill 状態を保存および復元する新しいツールが追加されます。

  • systemctl ユーティリティに "list-timers" コマンドが追加され、次に経過した時間で、インストールしたタイマーユニットの一覧を印刷します。

  • 依存関係タイプ JoinsNamespaceOf= が追加されました。これにより、PrivateNetwork= または PrivateTmp= が使用されている場合は、同じ /tmp とネットワークの名前空間内で 2 つのサービスを実行できます。

  • systemctl ユーティリティは、"list-units" や "list-sockets" などのさまざまな "list-xyz" コマンドと、複数のユニット名を取得するコマンドをサポートします。

  • 新しい PrivateDevices= スイッチがサービスユニットに追加されました。これにより、名前空間の /dev ディレクトリを使用してサービスを実行できます。このディレクトリには、物理デバイスに対するデバイスノードが含まれません。特に、API エントリーポイントとなる /dev/null、/dev/urandom、/dev/zero などのデバイスだけが含まれます。

  • また、このアップデートでは、TCP ソケットに対する双方向プロキシーとして機能する新しいツール "systemd-socket-proxyd" が追加されます。このツールは、ソケットのアクティベーションサポートをサービスに追加するために使用され、仮想マシンなどのソケットのアクティベーションはサポートされません。

  • systemd-run ユーティリティと systemd-analyze ユーティリティには、SSH を介したリモートホストに接続する "-H" オプションへのサポートが追加されました。これにより、リモートシステムにおけるジョブのキューイングが有効になるため、 systemd-run に対して特に有用です。

  • 新しいコマンド "cat" が systemctl ユーティリティに追加されました。これにより、ユニットのオリジナルユニットファイルが出力され、追加の「一時的な」ユニットファイルの抜粋のコンテンツが連結するため、設定全体が表示されます。

  • fstab ファイルのマウントポイントは事前には確認されていないため、initramfs にはマウントされませんでした。このバグはこのリベースで修正され、fstab のマウントポイントは期待通り確認されマウントされました。

  • 各ユーザーの $XDG_RUNTIME_DIR ランタイムディレクトリは個々の tmpfs インスタンスになりました。これにより、それぞれのユーザーに対して個別にサイズが制限されたプールが導入されます。したがって、$XDG_RUNTIME_DIR を満たすことで、特権のないクライアントがシステムやその他のユーザーに悪影響を及ぼすことはできなくなりました。新しい logind.conf 設定 RuntimeDirectorySize= が追加され、すべてのユーザーにデフォルトのサイズ制限を制御することができるようになりました。デフォルトは、利用可能な物理メモリーの 10% になります。 これは、引き続き、/dev/shm ディレクトリと /tmp directories ディレクトリは、システムと特権のないユーザーによって使用される共有リソースとなるため、tmpfs のクォータの代替ではありません (tmpfs はカーネルがサポートしていません)。

  • PID 1 はシステムワイドのシステムステータスエンジンを維持します。ステータスは、"starting"、"running"、"degraded"、"maintenance"、および "stopping" になります。これらのステータスはシステムの起動、通常のラインタイム、最低 1 回は失敗したサービスを持つランタイム、レスキューモードおよびエマージェンシーモード、そしてシステムのシャットダウンにバインドされます。ユニット名が渡されていないと、このステータスは "systemctl status" 出力で表示されます。この機能はシステムのステータス、特に、多くのシステムまたはコンテナーのステータスを瞬時に特定するために使用されます。

  • 起動時にクリーンではないファイルシステムを fsck がどのように扱うかを制御するために新しい fsck.repair= kernel オプションが追加されました。

  • RELOADING=1 を送信して再ロードを開始、もしくは STOPPING=1 を送信してシャットダウンする前に、サービスがマネージャーを通知することができるようになりました。これにより、マネージャーはデーモンの初期状態を追跡して表示し、プロセスが実行しても D-Bus 接続が閉じている時は競合状態を閉じます。

  • systemd サービスでは、PID 1 の各サービスに対してファイル記述子を保存する方法を提供されるようになりました。デーモンの再起動時に、デーモンが必要とするファイル記述子が失わなれないようにするために使用されます。このファイル記述子は、ソケットアクティベーションのファイル記述子が渡されるのと同じように、次の呼び出しでデーモンに渡されます。このアップデートにより、ファイル記述子は journald によって使用されるので、journald を再起動したときにすべてのシステムの stdout および stderr が失われないようになります。sd_notify() 関数の拡張子である sd_pid_notify_with_fds() API から PID 1 にファイル記述子を保存できるようになります。制限は、サービスが PID 1 に保存するファイル記述子の数に適用され、デフォルトは 0 です。したがって、これが明示的に有効にならない限り、ファイル記述子は保存されません。

  • systemd サービスは /sys/fs/cgroup ファイルを読み書き可能でマウントしなくなり、システムの起動時にカーネルがサポートするすべてのコントローラーをマウントした後、読み取り専用として /sys/fs/cgroup を再マウントします。一部の cgroup コントローラーがコンパイルされておらず、systemd によってマウントされていない場合は、このコントローラーをマウントする前に、/sys/fs/cgroup を再マウントして再度書き込み可能にする必要があります (mount /sys/fs/cgroup/ -o rw,remount)。

このアップデートにより、以下のバグが修正されます。

  • 適切な systemd ルールがないと、ホットプラグメモリーが自動的にオンラインになりませんでした。新たな udev ルールが 40-redhat.rules に追加されました。これにより、新たに追加されたメモリーが自動的にオンラインになります。 (BZ#1105020)

  • Small Computer System Interface (SCSI) の包括的なモジュールが、iprutils init スクリプトによって無条件にロードされていました。Red Hat Enterprise Linux version 7.1 以降、この init スクリプトは削除され、sg モジュールをロードしないユニットファイルに置き換えられました。このアップデートにより、新しい udev ルールが 40-redhat.rules に追加され、SCSI デバイスが検出された場合に sg モジュールの自動ロードが提供されます。(BZ#1193817)

  • 一部のサードパーティの init スクリプトではネットワークが明示的に要求されないにも関わらず、開始番号は高く設定されていました。以前のシステムでは、これによりネットワークアクセスを保証していました。このアップデートにより、起動番号が 10 以上のすべてのサービスに対して、network-online.target への依存関係が追加されます。(BZ#1189253)

  • メジャー番号とマイナー番号が追加されているデバイスと、番号が追加されていないデバイスに異なるデータベース名が使用されていました。また、さまざまなイベントに異なるパスが使用されていましたが、これは、デバイス番号がコピーされたかどうかによって異なります。その結果、udev ユーティリティまたは systemd サービスが、/dev/disk/by-id/ ディレクトリに予期せぬシムリンクを作成していました。このアップデートでデバイス番号が常にコピーされるようになったため、udev と systemd が予期したとおりに動作します。(BZ#1157344)

  • 特定の Mellanox ネットワークカードがファームウェアに適切に接続していませんでした。これにより、udev ユーティリティが異なる 2 つのポートに同じ名前を提供していました。命名規則が変更になり、期待通りに、ポートごとに固有の名前が割り当てられるようになりました。(BZ#1160345)

  • 一部のマウントに依存関係を簡単に設定する方法はありませんでした。これにより、起動して root パスワードを求めずにマシンを一時停止の状態にしていました。このアップデートにより、systemd fstab オプション "x-systemd.requires" と "x-systemd.requires-mounts-for" が追加され、介入せずにシステムが起動できるようになりました。(BZ#1164334)

  • 一度に複数のゲストを移行すると失敗し、"did not receive reply" エラーが発生する可能性がありました。このアップデートにより、同じに複数のゲストを処理する場合の systemd サービスの応答が改善されたため、この問題は発生しなくなりました。(BZ#1172387)

  • systemd サービスが、 journald ログに、不必要なエラーメッセージ "Failed to reset devices.list on /machine.slice: Invalid argument" を出力していました。このアップデートにより、このメッセージの log_level 値が下げられ、このようなメッセージがログに記録されなくなりました。(BZ#1178848)

  • すべてのタイプのネットワークマウントに対して有効ではないと、iSCSI デバイスに作成された LVM ボリュームのユーザークォータが有効ではありませんでした。このアップデートによって、NFS などの完全なネットワークシステムのクォータは有効ではなくなり、期待通りに、LVM ボリュームに対してユーザークォータが有効になりました。(BZ#1207153)

  • "systemd-run" コマンドを実行して作成されたスコープユニットファイルでは、systemd サービスが応答しませんでした。このアップデートで、"systemd-run" コードで意図せぬセグメントが複数削除されたため、systemd がハングしなくなりました。(BZ#1215823)

  • systemd サービスが、IPv6 接続が有効であるかどうかを正しく検出しない場合がありました。その結果、systemd は IPv6 ループバックデバイスを追加してエラーを報告していました。このアップデートにより検出プロセスが改善され、IPv6 が無効な場合に、systemd が IPv6 ループバックデバイスを追加しなくなりました。(BZ#1225228)

  • pam_systemd ユーティリティは、ユーザースイッチの XDG_RUNTIME_DIR 環境変数を変更していませんでした。その結果、XDG_RUNTIME_DIR を使用するアプリケーションが別のユーザーのデータにアクセスすると、"access denied" メッセージを受け取っていました。このアップデートによって、セッション中にユーザーを切り替えると、pam_systemd が XDG_RUNTIME_DIR の設定を解除します。その結果、アプリケーションが別のユーザーのデータにアクセスしないようになります。(BZ#1226472)

  • /run/log/journal ファイルのアクセス権が間違っているため、journalctl コマンドを実行してユーザーセッションログを表示することができませんでした。このアップデートによって、/run/log/journal のアクセス権が変更されたため、adm グループと wheel グループのメンバーがそのファイルを読み取れるようになりました。その結果、journalctl コマンドは期待した通り動作するようになりました。(BZ#1240511)

さらに、このアップデートにより以下の機能強化が追加されます。

  • 管理者は、"systemctl enable" コマンドを実行して、ユニットファイルの [Install] セクションに指定されたターゲットに対してのみユニットファイルを有効にすることができました。 もしくは、.wants/ ディレクトリおよび .require/ ディレクトリへのリンクを手動で作成する必要がありました。このアップデートにより、"systemctl add-wants" コマンドと "systemctl add-requires" コマンドが追加されました。これにより、ターゲットに対してユニットファイルを有効にします (systemctl add-wants sysinit.target cups.service)。(BZ#1135988)

  • このアップデートでは、OSI モデル (PHY) の識別子の物理層に基づいて udev 識別子が提供されました。これにより、ID_SAS_PATH と ID_PATH の両識別子が Serial Attached SCSI (SAS) ディスクドライブに対して設定されます。(BZ#957112)

  • 新しい systemd-debug-generator がカーネル行で使用される 3 つの新しいオプションで追加されました。

    • 次の起動でユニットをマスクする systemd.mask
    • ブートトランザクションに余分なユニットを 1 つ追加する systemd.wants
    • デバッグシェルを有効にする systemd.debug-shell

    詳細は systemd-debug-generator(8) の man ページを参照してください。(BZ#1015485)

  • ブリッジに対する sysctl.conf ファイルの設定は、起動時にのみ適用されていました。ただし、カーネルブリッジモジュールは後でロードされるため、この設定は適用されていませんでした。その結果、仮想マシンにブリッジした接続が適切には機能していませんでした。このアップデートで udev ルールが追加され、ブリッジモジュールの後に追加された設定もロードされるようになりました。これにより、ブリッジした接続は期待通りに動作します。(BZ#1182105)

  • この機能強化アップデートにより systemd-journal-upload コマンドと systemd-journal-remote コマンドが追加されました。systemd-journal-upload コマンドによりリモートログコンソリデータにログが出力され、systemd-journal-remote コマンドでリモートログコンソリデータでログを受け取れるようになりました。(BZ#1193375)

  • この機能強化アップデートにより、systemd-213 CPUQuota 機能がバックポートされました。CPUQuota は、実行したプロセスに指定した CPU 時間のクォータを割り当てます。CPUQuota は、末尾に "%" を追加したパーセンテージの値を取得します。パーセントは、1 つの CPU で利用できる全 CPU 時間に対して、ユニットが取得する最大 CPU 時間を指定します。(BZ#1193470)

  • このアップデートで、KillMode=mixed による強制終了プロシージャー設定が追加されました。この設定により、SIGTERM シグナルはメインプロセスにのみ送信し、SIGKILL はすべてのデーモンプロセスに送信します。また、KillMode=mixed は、"systemd --user" で終了する競合状態、つまり、SIGTERM を送信する際に、システムの systemd インスタンスがユーザーの systemd インスタンスに対して競合を修正します。(BZ#1193824)

  • 参加していないシステムには添付されているコンソールがなく、デフォルトのレスキューモードに入ることが有用ではなかったため、このアップデートで、ユーザーは "-y" fsck 復元オプションをコマンドラインで使用できるようになりました。このオプションを使用して、すべてのファイルシステムのエラーを修正できるようになりました。(BZ#1227922)

systemd のユーザーは、このアップデートしたパッケージにアップグレードすることが推奨されます。このパッケージでは、バグの修正と、機能強化が追加されました。このアップデートを有効にするには、システムを再起動する必要があります。

このエラータの詳細は RHBA-2015-2092 を参照してください。

Was this helpful?

We appreciate your feedback. Leave a comment if you would like to provide more detail.
It looks like we have some work to do. Leave a comment to let us know how we could improve.
Close

Welcome! Check out the Getting Started with Red Hat page for quick tours and guides for common tasks.