8.75. Systemd-255

systemd パッケージは、システムの起動、稼動、終了の制御を行うプログラムを提供します。

概算ビルド時間: 0.7 SBU
必要ディスク容量: 247 MB

8.75.1. systemd のインストール

デフォルトの udev ルールから、不要な 2 つのグループ rendersgx を削除します。

sed -i -e 's/GROUP="render"/GROUP="video"/' \
       -e 's/GROUP="sgx", //' rules.d/50-udev-default.rules.in

systemd-resolved の DNSSEC 検証におけるセキュリティぜい弱性を修正します。 またインスタンス化された systemd ユニット上において、実行中の systemd-analyze verify が壊れてしまうバグを修正します。

patch -Np1 -i ../systemd-255-upstream_fixes-1.patch

systemd をコンパイルするための準備をします。

mkdir -p build
cd       build

meson setup \
      --prefix=/usr                 \
      --buildtype=release           \
      -Ddefault-dnssec=no           \
      -Dfirstboot=false             \
      -Dinstall-tests=false         \
      -Dldconfig=false              \
      -Dsysusers=false              \
      -Drpmmacrosdir=no             \
      -Dhomed=disabled              \
      -Duserdb=false                \
      -Dman=disabled                \
      -Dmode=release                \
      -Dpamconfdir=no               \
      -Ddev-kvm-mode=0660           \
      -Dnobody-group=nogroup        \
      -Dsysupdate=disabled          \
      -Dukify=disabled              \
      -Ddocdir=/usr/share/doc/systemd-255 \
      ..

meson オプションの意味

--buildtype=release

本スイッチは、デフォルトのビルドタイプ (debug) をオーバーライドします。 そのままにしておくと、最適化されていない実行モジュールが生成されるためです。

-Ddefault-dnssec=no

本スイッチは、実験的な DNSSEC サポートを無効にします。

-Dfirstboot=false

本スイッチは、systemd サービスを、システムの初回構築用としてインストールしないようにします。 LFS ではすべて手作業で行うため、この機能が必要ないからです。

-Dinstall-tests=false

本スイッチはコンパイルされたテストをインストールしないようにします。

-Dldconfig=false

本スイッチは、システム起動時に ldconfig を実行するような systemd ユニットはインストールしないようにします。 LFS のようにソースから作り出すディストリビューションにとっては無用なものであり、起動時間も長くなります。 起動時の ldconfig 実行を有効にするには、本オプションを除いてください。

-Dsysusers=false

本スイッチは、システム起動初期に /etc/group ファイルと /etc/passwd ファイルを設定する systemd サービスをインストールしないようにします。 この二つのファイルは前章にて生成済です。 LFS システム上におけるこのデーモンは、ユーザーアカウントを手動で生成するまでは、利用することはできません。

-Drpmmacrosdir=no

本スイッチは systemd において利用される RPM マクロをインストールしないようにします。 LFS では RPM をサポートしていないためです。

-Dhomed=disabled-Duserdb=false

LFS が取り扱う範囲にそぐわない依存関係を持ったデーモンを削除します。

-Dman=disabled

man ページを生成することで発生する追加パッケージの導入を行わないようにします。 systemd の man ページは、生成済みの tarball を使ってインストールすることにします。

-Dmode=release

アップストリームにおいて試験的機能とみなされている機能を無効にします。

-Dpamconfdir=no

PAM 設定は LFS 上では機能しないため、これをインストールしないようにします。

-Ddev-kvm-mode=0660

デフォルトの udev ルールは、あらゆるユーザーが /dev/kvm にアクセスできるようにします。 当編集者としてこれは危険なことと考えています。 本オプションはその設定を上書きします。

-Dnobody-group=nogroup

nogroup がグループ GID 65534 であるグループ名として指定します。

-Dsysupdate=disabled

systemd-sysupdate ツールをインストールしないようにします。 これはバイナリディストロを自動的に更新する目的のものです。 したがってソースからビルドするという Linux システムにおいては、基本的に無用なものです。 またこれが利用可能でありながら適切に設定されていない場合には、起動時にエラーが表示されることになります。

-Dukify=disabled

systemd-ukify スクリプトをインストールしないようにします。 このスクリプトは実行時に Python モジュール pefile を必要としますが、これは LFS と BLFS のいずれにおいても提供していません。

パッケージをコンパイルします。

ninja

パッケージをインストールします。

ninja install

man ページをインストールします。

tar -xf ../../systemd-man-pages-255.tar.xz \
    --no-same-owner --strip-components=1   \
    -C /usr/share/man

systemd-journald に対して必要となる /etc/machine-id ファイルを生成します。

systemd-machine-id-setup

基本的なターゲット構造を設定します。

systemctl preset-all

8.75.2. systemd の構成

インストールプログラム: busctl, coredumpctl, halt (systemctl へのシンボリックリンク), hostnamectl, init, journalctl, kernel-install, localectl, loginctl, machinectl, mount.ddi (systemd-dissect へのシンボリックリンク), networkctl, oomctl, portablectl, poweroff (systemctl へのシンボリックリンク), reboot (systemctl へのシンボリックリンク), resolvconf (resolvectl へのシンボリックリンク), resolvectl, runlevel (systemctl へのシンボリックリンク), shutdown (systemctl へのシンボリックリンク), systemctl, systemd-ac-power, systemd-analyze, systemd-ask-password, systemd-cat, systemd-cgls, systemd-cgtop, systemd-confext (systemd-sysext へのシンボリックリンク), systemd-creds, systemd-delta, systemd-detect-virt, systemd-dissect, systemd-escape, systemd-hwdb, systemd-id128, systemd-inhibit, systemd-machine-id-setup, systemd-mount, systemd-notify, systemd-nspawn, systemd-path, systemd-repart, systemd-resolve (resolvectl へのシンボリックリンク), systemd-run, systemd-socket-activate, systemd-stdio-bridge, systemd-sysext, systemd-tmpfiles, systemd-tty-ask-password-agent, systemd-umount (systemd-mount へのシンボリックリンク), telinit (systemctl へのシンボリックリンク), timedatectl, udevadm
インストールライブラリ: libnss_myhostname.so.2, libnss_mymachines.so.2, libnss_resolve.so.2, libnss_systemd.so.2, libsystemd.so, libsystemd-shared-255.so (/usr/lib/systemd ディレクトリ内), libudev.so
インストールディレクトリ: /etc/binfmt.d, /etc/init.d, /etc/kernel, /etc/modules-load.d, /etc/sysctl.d, /etc/systemd, /etc/tmpfiles.d, /etc/udev, /etc/xdg/systemd, /usr/lib/systemd, /usr/lib/udev, /usr/include/systemd, /usr/lib/binfmt.d, /usr/lib/environment.d, /usr/lib/kernel, /usr/lib/modules-load.d, /usr/lib/sysctl.d, /usr/lib/systemd, /usr/lib/tmpfiles.d, /usr/share/doc/systemd-255, /usr/share/factory, /usr/share/systemd, /var/lib/systemd, /var/log/journal

概略説明

busctl

D-Bus のバスを監視するために用います。

coredumpctl

systemd journal よりコアダンプを抽出します。

halt

普通は shutdown にオプション -h をつけて実行します。 ただし既にランレベルが 0 である場合を除きます。 カーネルに対してシステムの停止を指示します。 システムが停止したことは /var/log/wtmp ファイルに記録されます。

hostnamectl

システムのホスト名および関連設定を確認し変更します。

init

カーネルがハードウェアを初期化した後に起動される最初のプロセスです。 init は、この後の起動処理を担い、設定ファイルに応じたブートプロセスと他の全てのプロセスを起動します。 つまり systemd を起動するということです。

journalctl

Systemd のジャーナルの内容を確認します。

kernel-install

カーネルや initramfs イメージを /boot ディレクトリに対して追加、削除します。

localectl

システムロケールやキーボードレイアウト設定を確認し変更します。

loginctl

Systemd のログインマネージャーの状態を確認し制御します。

machinectl

Systemd の仮想マシンとコンテナー登録マネージャー (Container Registration Manager) の状態を確認し制御します。

networkctl

systemd-netword から見えるネットワークリンクの状態を確認 (introspect) し設定します。

oomctl

systemd の Out Of Memory デーモンを制御します。

portablectl

ローカルシステムにおいてポータブルサービスのアタッチ、デタッチを行います。

poweroff

カーネルに対してシステム停止を指示し、コンピューターの電源を落とします。(halt参照)

reboot

カーネルに対してシステム再起動を指示します。(halt参照)

resolvconf

systemd-resolved に対する DNS サーバーやドメイン設定を登録します。

resolvectl

ネットワーク名前解決マネージャーに対して制御コマンドを送信します。 あるいはドメイン名、IPv4、IPv6 アドレス、DNS レコードやサービスなどを解決します。

runlevel

現時点とその直前のランレベルを表示します。 最新のランレベルは /run/utmp ファイルに記録されます。

shutdown

すべてのプロセスとすべてのログインユーザーへの通知を行なった上で、システムを安全に停止します。

systemctl

Systemd システムとサービスマネージャーの状態について確認し制御します。

systemd-ac-power

システムが外部電源につながっているかどうかを報告します。

systemd-analyze

起動処理パフォーマンスを解析します。 また問題のある systemd ユニットを特定します。

systemd-ask-password

Linux コマンドラインから指定されたメッセージを用いて、システムパスワードやユーザーのパスフレーズを確認します。

systemd-cat

systemd journal に対してプロセスの STDOUT と STDERR に接続します。

systemd-cgls

指定された Linux コントロールグループ (control group) の階層を再帰的に表示します。

systemd-cgtop

最上位のローカル Linux コントロールグループ (control group) を表示し、CPU、メモリ、ディスクI/Oロードの並びにより示します。

systemd-creds

資格情報を表示し処理します。

systemd-delta

/etc ディレクトリにある設定ファイルを同定したり比較したりします。 この設定ファイルは /usr ディレクトリにあるデフォルト設定をオーバーライドします。

systemd-detect-virt

システムが仮想化環境で動作しているかどうかを検出し、それに応じて udev を調整します。

systemd-dissect

OS ディスクイメージの調査に用いられます。

systemd-escape

systemd ユニット名での文字エスケープを行います。

systemd-hwdb

ハードウェアデータベース (hwdb) を管理します。

systemd-id128

id128(UUID)文字列を生成し表示します。

systemd-inhibit

システム停止、休止、アイドル禁止ロックを行うプログラムを実行します。 プロセスが正常起動するまでは、システムシャットダウンのような処理は行いません。

systemd-machine-id-setup

システムインストールツールがマシンIDを初期化するために利用します。 このマシンIDは /etc/machine-id ファイル内にあるものから、インストール時にランダムに生成されます。

systemd-mount

ディスクの一時的あるいは自動マウントを行ないます。

systemd-notify

init システムに対してステータス変更が発生したことを通知するデーモンスクリプトが利用します。

systemd-nspawn

軽量な名前空間コンテナー (light-weight namepspace container) においてコマンドや OS 全体の実行に用いられます。

systemd-path

システムパスやユーザーパスを検索します。

systemd-repart

systemd が OS イメージ内(たとえばコンテナーなど)で用いられている場合に、パーティションテーブルに対してパーティションの拡張や追加を行うために用いられます。

systemd-resolve

ドメイン名、IPV4 と IPv6 アドレス、DNSリソースレコード、サービスの名前解決を行います。

systemd-run

一時的な .service ユニットや .scope ユニットを生成および起動し、その指定コマンドを実行します。 これは systemd ユニットの検証を行うことができます。

systemd-socket-activate

ソケットデバイスの情報を読み取って、ソケットに対するコネクション上にてプロセスを起動します。

systemd-sysext

システム拡張イメージを有効にします。

systemd-tmpfiles

tmpfiles.d ディレクトリにて指定された設定ファイルの内容に基づいて、テンポラリファイルなどの生成削除等を行います。

systemd-umount

マウントポイントをアンマウントします。

systemd-tty-ask-password-agent

未定となっている Systemd のパスワード変更指示の一覧を表示し処理します。

telinit

init コマンドに対してランレベルを何にするかを指示します。

timedatectl

システムクロックとその設定を確認し変更します。

udevadm

汎用的な udev 管理ツール。 udevd デーモンの制御、udev データベースデータの提供、uevent の監視、uevent の完了までの待機、udev 設定のテスト、指定デバイスに対する uevent の起動、といったことを行います。

libsystemd

主となる systemd ユーティリティライブラリ。

libudev

Udev デバイス情報にアクセスするためのライブラリ。