「Dracut」の版間の差分
→カーネルパラメータのスペース: 微修正 |
同期 |
||
| (3人の利用者による、間の30版が非表示) | |||
| 1行目: | 1行目: | ||
{{Lowercase title}} |
{{Lowercase title}} |
||
[[Category: |
[[Category:Initramfs]] |
||
[[en:Dracut]] |
[[en:Dracut]] |
||
[[pt:Dracut]] |
|||
{{Related articles start}} |
{{Related articles start}} |
||
{{Related|booster}} |
|||
{{Related|mkinitcpio}} |
{{Related|mkinitcpio}} |
||
{{Related|Unified カーネルイメージ}} |
|||
{{Related articles end}} |
{{Related articles end}} |
||
{{Note|メーリングリストに [https://lists.archlinux.org/pipermail/arch-dev-public/2019-May/029570.html Mkinitcpio を Dracut で置き換える計画] について投稿されています。}} |
|||
[https:// |
[https://github.com/dracutdevs/dracut/wiki dracut] はカーネルによって使用される初期イメージを生成し、ルートファイルシステムにアクセスするのに必要なブロックデバイスモジュール (IDE、SCSI、[[RAID]] など) をプリロードします。{{Pkg|linux}} のインストール時に [[mkinitcpio]] と ''dracut'' のどちらを使うか選択できます。''dracut'' は Fedora、RHEL、Gentoo、Debian などのディストリビューションで使われています。Arch はデフォルトで [[mkinitcpio]] を使用します。 |
||
dracut の |
''dracut'' のプロジェクトドキュメントは[https://github.com/dracutdevs/dracut/wiki こちら]で読むことができます。 |
||
== インストール == |
== インストール == |
||
{{Pkg|dracut}} パッケージを[[インストール]]してください。最新の開発バージョンの場合は {{AUR|dracut-git}} をインストールしてください。 |
|||
{{Tip|dracut が動作することが確認できたのであれば、{{Pkg|mkinitcpio}} は |
{{Tip|''dracut'' が動作することが確認できたのであれば、{{Pkg|mkinitcpio}} は[[アンインストール]]できます。}} |
||
== 使用方法 == |
== 使用方法 == |
||
dracut |
{{ic|dracut}} は使いやすく、[[dm-crypt/システム全体の暗号化#LVM on LUKS|LVM on LUKS]] のような非標準的なセットアップを使用する場合でも、通常はユーザー設定を必要としません。 |
||
実行中のカーネルの initramfs を生成するには: |
|||
# dracut /boot/initramfs-linux.img |
# dracut --hostonly --no-hostonly-cmdline --add-confdir no-network /boot/initramfs-linux.img |
||
hostonly モードを永続的に有効にするには (コマンドラインに含める必要がないように) dracut 設定に以下を追加します。 |
|||
{{ic|/boot/initramfs-linux.img}} は出力するイメージファイルを指定します。標準のカーネルを使っていない場合は、ファイルの名前を変更する必要があります。例えば {{Pkg|linux-lts}} カーネルの場合、出力ファイルの名前は {{ic|/boot/initramfs-linux-lts.img}} としてください。ただし、[[ブートローダー]]の設定も一緒に変更するのであればファイルの名前は好きにつけることができます。 |
|||
{{hc|/etc/dracut.conf.d/hostonly.conf|2= |
|||
==== 追加フラグ ==== |
|||
hostonly="yes" |
|||
}} |
|||
{{Note|場合によっては、特にシステムを初めてインストールする場合、上記のコマンドは機能しません。次のコマンドを使用してください。 |
|||
{{ic|--hostonly}} フラグはローカルホスト環境を起動するのに必要なファイルのみ含んだイメージを生成します。フラグを付けない場合はより多くのファイルを含む汎用イメージが生成されます。このフラグを使うことで生成イメージの容量を減らすことができますが、他のコンピュータでイメージを使用したり別のルートファイルシステムに切り替えることができなくなります。その場合は新しいイメージの生成が必要です。 |
|||
# dracut --regenerate-all |
|||
}} |
|||
フォールバック initramfs を生成するには、以下を実行します。 |
|||
# dracut /boot/initramfs-linux-fallback.img |
|||
{{ic|/boot/initramfs-linux.img}} は、出力イメージファイルを指します。別のカーネルを使用している場合は、ファイル名を変更することを検討してください。たとえば、{{Pkg|linux-lts}} カーネルの場合、出力ファイルは {{ic|/boot/initramfs-linux-lts.img}} という名前にする必要があります。ただし、[[ブートローダー]] 設定で同じファイル名を使用する限り、これらのファイルには好きな名前を付けることができます。 |
|||
{{Note|これらのコマンドで作成されたファイルには、インストールされている[[マイクロコード]]イメージが埋め込まれています。}} |
|||
=== 追加オプション === |
|||
{{ic|--force}} フラグは、イメージファイルが既に存在する場合に上書きします。 |
|||
{{ic|--kver}} オプションは、使用するカーネルを指定します。このオプションの引数は、{{ic|/usr/lib/modules}} にあるディレクトリの名前と一致する必要があります。 |
|||
{{man|8|dracut}} には他のフラグの説明が載っています。 |
{{man|8|dracut}} には他のフラグの説明が載っています。 |
||
== 設定 == |
== 詳細設定 == |
||
初期 RAM ディスクフェーズ中の様々なタスクの実行方法には、2つの異なるアプローチがあることに注意することが重要です。 |
|||
; ''シェル (bash/busybox/dash) ベース''の初期 RAM ディスク: init スクリプトが開始され、次に初期 RAM ディスクのファイルシステムをスキャンして実行される dracut スクリプトを検索します。 |
|||
; ''systemd ベース(デフォルト)''の初期 RAM ディスク: systemd は初期 RAM ディスクフェーズの開始時にすでに開始されています。実行されるタスクは、通常の systemd ユニットファイルによって決定されます。[https://www.freedesktop.org/software/systemd/man/latest/bootup.html systemdブートアッププロセス]を参照してください。 |
|||
具体的なバリアントは、systemd dracut モジュールの有無によって決定されます。詳細については、[[#dracut モジュール]]を参照してください。 |
|||
{{ic|dracut}} は、コマンドラインで直接引数を渡すことによって構成できます ({{man|8|dracut|OPTIONS}} を参照) 特定のフラグのセットを使用して常に {{ic|dracut}} を実行する場合は、{{ic|/etc/dracut.conf.d/}} に{{ic|.conf}} ファイルに指定された設定を保存できます。例: |
|||
{{hc|/etc/dracut.conf.d/myflags.conf| |
{{hc|/etc/dracut.conf.d/myflags.conf|2= |
||
hostonly="yes" |
|||
compress="lz4" |
compress="lz4" |
||
add_drivers+=" i915 " |
add_drivers+=" i915 " |
||
omit_dracutmodules+=" |
omit_dracutmodules+=" systemd network " |
||
}} |
}} |
||
{{man|5|dracut.conf}} でより多くの設定オプションを確認できます。各オプションのより詳細な説明は、{{man|8|dracut}} にあります。以下では、いくつかの一般的なオプションについて説明します。 |
|||
=== Dracut モジュール === |
|||
''dracut'' は、initramfs を構築するためにモジュール式のアプローチを採用しています ({{man|7|dracut.modules}} を参照) ''dracut'' の組み込みモジュールはすべて {{ic|/lib/dracut/modules.d}} にあり、{{ic|dracut --list-modules}} で一覧表示できます。追加のモジュールは、{{aur|dracut-sshd-git}} などの外部パッケージによって提供できます。残念ながら、''dracut'' の組み込みモジュールにはドキュメントがありませんが、その名前はそれ自体で説明できる場合があります。 |
|||
一部のモジュールはデフォルトでアクティブ/非アクティブであり、{{ic|--add}}/{{ic|--omit}} コマンドライン引数または {{ic|1= add_dracutmodules+=""}}/{{ic|1= omit_dracutmodules+=""}} 永続設定エントリ行を使用してアクティブ化/非アクティブ化できます。 |
|||
{{hc|/etc/dracut.conf.d/myflags.conf|2= |
|||
# ... |
|||
add_dracutmodules+=" ''dracut modules to activate'' " |
|||
omit_dracutmodules+=" ''dracut modules to deactivate'' " |
|||
# ... |
|||
}} |
|||
次の表に、dracut モジュール、必要なパッケージ(''dracut'' のオプションの依存関係)およびモジュールの説明を示します。 |
|||
ほとんどの dracut モジュールは、他の dracut モジュールに依存しています。例として、bluetooth dracut モジュールは dbus dracut モジュールに依存しています。以下の表は、直接的な dracut モジュールの依存関係のみを示しています。つまり、特定の dracut モジュールの {{ic|module-setup.sh}} にリストされている、特定のモジュールに必要なパッケージを示しています。 |
|||
追加の dracut モジュールのドキュメントについては、[https://github.com/dracut-ng/dracut-ng/wiki/modules アップストリームの dracut wiki] を参照してください。 |
|||
{| class="wikitable" |
|||
! dracut モジュール |
|||
! 必要なパッケージ |
|||
! 説明 |
|||
|- |
|||
| bluetooth |
|||
| {{Pkg|bluez}} |
|||
| [[Bluetooth]] (keyboard) |
|||
|- |
|||
| btrfs |
|||
| {{Pkg|btrfs-progs}} |
|||
| ブロックデバイスで [[btrfs]] をスキャンします |
|||
|- |
|||
| busybox |
|||
| {{Pkg|busybox}} |
|||
| [[BusyBox]] (自己責任で) の使用を許可します |
|||
|- |
|||
| crypt |
|||
| {{Pkg|cryptsetup}} |
|||
| 暗号化された [[dm-crypt]] ファイルシステムのサポート |
|||
|- |
|||
| dash |
|||
| {{Pkg|dash}} |
|||
| [[dash]] (自己責任で) の使用を許可します |
|||
|- |
|||
| dmraid |
|||
| {{Pkg|dmraid}}, {{Pkg|multipath-tools}} |
|||
| DMRAID Dracut モジュールサポート |
|||
|- |
|||
| multipath |
|||
| {{Pkg|multipath-tools}} |
|||
| MultiPath Dracut モジュールサポート |
|||
|- |
|||
| dmsquash-live-ntfs |
|||
| {{Pkg|fuse3}}, {{Pkg|ntfs-3g}} |
|||
| ライブ [[NTFS]] |
|||
|- |
|||
| lvm |
|||
| {{Pkg|lvm2}} |
|||
| [[LVM]] のサポート |
|||
|- |
|||
| mdraid |
|||
| {{Pkg|mdadm}} |
|||
| ソフトウェア [[RAID]] デバイスとも呼ばれるMDデバイスをサポートします |
|||
|- |
|||
| memstrack |
|||
| {{AUR|memstrack}} |
|||
| memstrack をサポート |
|||
|- |
|||
| nvdimm |
|||
| {{Pkg|ndctl}} |
|||
| NVDIMM をサポート |
|||
|- |
|||
| plymouth |
|||
| {{Pkg|plymouth}} |
|||
| [[Plymouth]] ブートスプラッシュ |
|||
|- |
|||
| rescue |
|||
| |
|||
| 救助モード用のさまざまなユーティリティ (Ping、SSH、VI、FSCK などなど) が含まれています。 |
|||
|- |
|||
| resume |
|||
| |
|||
| initramfs が低電力状態から再開できるようにします |
|||
|- |
|||
| rngd |
|||
| |
|||
| 早期ブートでランダムジェネレーターサービスを開始します |
|||
|- |
|||
| syslog |
|||
| {{AUR|rsyslog}} |
|||
| [[rsyslog]] でロギングを有効にする |
|||
|- |
|||
| squash |
|||
| {{Pkg|squashfs-tools}} |
|||
| squashed initramfs を構築するためのサポート |
|||
|- |
|||
| tpm2-tss |
|||
| {{Pkg|tpm2-tools}} |
|||
| [[Trusted Platform Module]] |
|||
|- |
|||
| base |
|||
| |
|||
| 必要なユーティリティを備えたベースモジュール |
|||
|- |
|||
| bash |
|||
| {{Pkg|bash}} |
|||
| Bash が複数存在する場合、Bash を優先的に使用 |
|||
|- |
|||
| biosdevname |
|||
| {{AUR|biosdevname}} |
|||
| BIOS に基づいたネットワークデバイス名を使用 |
|||
|- |
|||
| caps |
|||
| |
|||
| init 実行前にケーパビリティを削減可能 |
|||
|- |
|||
| convertfs |
|||
| |
|||
| / を /usr に統合 (次回起動時に実行) |
|||
|- |
|||
| crypt-gpg |
|||
| {{Pkg|gnupg}} |
|||
| GPG を使用した暗号化・SmartCard のサポート (GPG キーが必要な場合あり) |
|||
|- |
|||
| crypt-loop |
|||
| |
|||
| 暗号化されたループバックデバイスのサポート (対称鍵) |
|||
|- |
|||
| dbus |
|||
| |
|||
| dbus-broker または dbus-daemon の仮想パッケージ |
|||
|- |
|||
| dbus-broker |
|||
| {{Pkg|dbus-broker}} |
|||
| {{Pkg|dbus-broker}} を dbus サービスプロバイダとして使用 |
|||
|- |
|||
| dbus-daemon |
|||
| {{Pkg|dbus}} |
|||
| {{Pkg|dbus}} を dbus サービスプロバイダとして使用 |
|||
|- |
|||
| debug |
|||
| |
|||
| デバッグ機能を有効化 |
|||
|- |
|||
| dm |
|||
| |
|||
| device-mapper のサポートを追加 |
|||
|- |
|||
| dmsquash-live-autooverlay |
|||
| |
|||
| ルートファイルシステムの親ブロックデバイスの空き領域に overlayfs 用パーティションを作成 |
|||
|- |
|||
| dracut-systemd |
|||
| |
|||
| 基本的な systemd 用 dracut モジュール |
|||
|- |
|||
| drm |
|||
| |
|||
| DRM (Direct Rendering Manager) サポートのカーネルモジュールを含む |
|||
|- |
|||
| ecryptfs |
|||
| |
|||
| ecryptfs ファイルシステムのサポートを追加 |
|||
|- |
|||
| fido2 |
|||
| |
|||
| FIDO2 セキュリティトークンを使用して暗号化ファイルシステムを解読可能 |
|||
|- |
|||
| fips |
|||
| |
|||
| FIPS セキュリティ標準を適用 |
|||
|- |
|||
| fs-lib |
|||
| |
|||
| fsck.* や mount などのファイルシステムツールのライブラリ |
|||
|- |
|||
| fstab-sys |
|||
| |
|||
| rootfs より前に任意のパーティションをマウント |
|||
|- |
|||
| i18n |
|||
| |
|||
| キーマップ、コンソールフォントなどを含む |
|||
|- |
|||
| img-lib |
|||
| |
|||
| イメージの展開ツールを含むライブラリ |
|||
|- |
|||
| integrity |
|||
| |
|||
| 拡張検証モジュール (EVM) のサポートを追加 |
|||
|- |
|||
| kernel-modules |
|||
| |
|||
| ルートファイルシステムおよびブート時に必要なデバイスのカーネルモジュール |
|||
|- |
|||
| kernel-modules-extra |
|||
| |
|||
| 追加のカーネルモジュール (out-of-tree) |
|||
|- |
|||
| lunmask |
|||
| |
|||
| 必要な LUN デバイスのみを選択してマスク |
|||
|- |
|||
| lvmmerge |
|||
| |
|||
| LVM スナップショットをマージ |
|||
|- |
|||
| lvmthinpool-monitor |
|||
| |
|||
| LVM thin pool を監視 |
|||
|- |
|||
| masterkey |
|||
| |
|||
| 他の鍵の解読用マスターキーと keyutils を含む |
|||
|- |
|||
| modsign |
|||
| |
|||
| 署名付きカーネルモジュールのサポートを追加 |
|||
|- |
|||
| overlayfs |
|||
| |
|||
| OverlayFS のカーネルモジュール |
|||
|- |
|||
| pcsc |
|||
| |
|||
| PCSC スマートカードのサポート |
|||
|- |
|||
| pkcs11 |
|||
| |
|||
| PKCS#11 ライブラリを含む |
|||
|- |
|||
| pollcdrom |
|||
| |
|||
| CD-ROM ポーリングを有効化 |
|||
|- |
|||
| qemu |
|||
| |
|||
| QEMU 環境用のカーネルモジュールを含む |
|||
|- |
|||
| rescue |
|||
| |
|||
| ping、ssh、vi、fsck.* などのレスキュー用ユーティリティ |
|||
|- |
|||
| rootfs-block |
|||
| |
|||
| ルートファイルシステムを含むブロックデバイスのマウント処理 |
|||
|- |
|||
| securityfs |
|||
| |
|||
| securityfs をブート初期にマウント |
|||
|- |
|||
| selinux |
|||
| |
|||
| SELinux ポリシーのロードを処理 |
|||
|- |
|||
| shutdown |
|||
| |
|||
| シャットダウン時に実行されるフックを設定 |
|||
|- |
|||
| systemd |
|||
| |
|||
| 早期 init システムとして systemd を使用 |
|||
|- |
|||
| terminfo |
|||
| |
|||
| terminfo ファイルを含む |
|||
|- |
|||
| udev-rules |
|||
| |
|||
| udev と基本ルールのセット |
|||
|- |
|||
| uefi-lib |
|||
| |
|||
| UEFI ツールを含むライブラリ |
|||
|- |
|||
| usrmount |
|||
| |
|||
| /usr のマウントを処理 |
|||
|- |
|||
| virtfs |
|||
| |
|||
| 仮想ファイルシステム (9p) のサポート |
|||
|- |
|||
| virtiofs |
|||
| |
|||
| virtiofs ファイルシステムのサポート |
|||
|- |
|||
| warpclock |
|||
| |
|||
| adjtime が LOCAL に設定されている場合にシステム時間をリセット |
|||
|- |
|||
| watchdog |
|||
| |
|||
| watchdog デバイス管理を含む (systemd 非使用時のみ動作) |
|||
|- |
|||
| watchdog-modules |
|||
| |
|||
| 起動時にロードされる watchdog 用カーネルモジュール |
|||
|} |
|||
これは、[[ネットワーク設定#IPアドレス|IPアドレス]] が初期ブート時に利用可能になることが想定される場合に使用される Dracut モジュールについての説明です。 |
|||
{| class="wikitable" |
|||
! ネットワーキング dracut モジュール |
|||
! 必要なパッケージ |
|||
! 説明 |
|||
|- |
|||
| cifs |
|||
| {{Pkg|cifs-utils}} |
|||
| [[Samba]] のサポート |
|||
|- |
|||
| nbd |
|||
| {{Pkg|nbd}} |
|||
| ネットワークブロックデバイスのサポート |
|||
|- |
|||
| network-manager |
|||
| {{Pkg|networkmanager}} |
|||
| [[NetworkManager]] のサポート |
|||
|- |
|||
| nfs |
|||
| {{Pkg|nfs-utils}} |
|||
| [[NFS]] のサポート (NFSv3 および NFSv4) |
|||
|- |
|||
| nvmf |
|||
| {{Pkg|nvme-cli}}, {{Pkg|jq}} |
|||
| NVMe over Fibre Channel および NVMe-over-Fabrics のサポート |
|||
|- |
|||
| iscsi |
|||
| {{Pkg|open-iscsi}} |
|||
| [[ISCSI]] のサポート |
|||
|- |
|||
| ssh-client |
|||
| {{Pkg|openssh}} |
|||
| SSH および SCP のインストール (設定ファイルや指定された鍵も含む) |
|||
|- |
|||
| network-legacy |
|||
| {{Pkg|dhclient}}, {{Pkg|iproute2}}, {{Pkg|iputils}} |
|||
| レガシーな[[ネットワーク]]のサポート |
|||
|- |
|||
| connman |
|||
| {{Pkg|connman}} |
|||
| [[ConnMan]] ネットワークのサポート |
|||
|- |
|||
| kernel-network-modules |
|||
| |
|||
| ネットワークデバイス用のカーネルモジュールを含み、ロードする |
|||
|- |
|||
| livenet |
|||
| |
|||
| SquashFS イメージのライブアップデートを取得 |
|||
|- |
|||
| network |
|||
| |
|||
| ネットワークサービスプロバイダーの仮想モジュール |
|||
|- |
|||
| url-lib |
|||
| |
|||
| curl および SSL 証明書を含むライブラリ |
|||
|- |
|||
| qemu-net |
|||
| |
|||
| QEMU 環境向けネットワークカーネルモジュールを含む |
|||
|- |
|||
| systemd-network-management |
|||
| |
|||
| systemd のネットワーク管理を追加 (systemd-networkd, systemd-resolved などのネットワーク関連モジュールを含む) |
|||
|- |
|||
| systemd-networkd |
|||
| |
|||
| [[Systemd-networkd]] |
|||
|- |
|||
| net-lib |
|||
| |
|||
| ''ip'' を含むネットワークライブラリ |
|||
|} |
|||
==== TPM2 ==== |
|||
[[Trusted Platform Module#systemd-cryptenroll|systemd-cryptenroll]] を介して TPM2 で ''luks2'' 暗号化ボリュームをアンロックする ''systemd'' の機能を使用するには、{{Pkg|tpm2-tools}} パッケージをインストールし、かつ {{ic|tpm2-tss}} ''dracut'' モジュールを有効化してください。 |
|||
=== カーネルモジュールの早期ロード === |
|||
Dracut では、{{ic|--force_drivers}} 引数または {{ic|1= force_drivers+=""}} 設定エントリで早期ロードを有効化します (initramfs の段階で {{ic|modprobe}} によってロードされます)。例えば: |
|||
{{hc|/etc/dracut.conf.d/myflags.conf|2= |
|||
# ... |
|||
force_drivers+=" nvidia nvidia_modeset nvidia_uvm nvidia_drm " |
|||
# ... |
|||
}} |
|||
=== カーネルコマンドラインオプション === |
|||
カーネルコマンドラインオプションは、{{ic|/etc/dracut.conf.d/}} の ''.conf'' ファイルで {{ic|1=kernel_cmdline=}} フラグで設定できます。Dracut は自動的にこのファイルを読み込み、{{ic|01-default.conf}} ファイルを作成し、initramfs ディレクトリ {{ic|/etc/cmdline.d/}} 内に配置します。例えば、カーネルコマンドラインオプションのファイルは次のようになります: |
|||
{{hc|/etc/dracut.conf.d/cmdline.conf|2= |
|||
kernel_cmdline="rd.luks.uuid=luks-f6c738f3-ee64-4633-b6b0-eceddb1bb010 rd.lvm.lv=arch/root rd.lvm.lv=arch/swap root=/dev/arch/root rootfstype=ext4 rootflags=rw,relatime" |
|||
}} |
|||
==== 雑記 ==== |
|||
{{ic|dracut}} でルートブロックデバイスを指定することは必須ではありません。{{man|7|dracut.cmdline}} によると: |
|||
: カーネルによって使用されるルートブロックデバイスは、通常通り、ブート設定ファイル内でカーネルコマンドラインによって指定されます。 |
|||
しかし、一部のパラメータを早期に設定しておくと便利な場合があり、追加のコマンドラインパラメーターのプロンプトなどといった追加機能を有効にすることができます。すべてのオプションについては、{{man|7|dracut.cmdline}} を参照してください。設定オプションの例を次に示します: |
|||
* スワップパーティションを使ってハイバネートから復帰する: {{ic|1=resume=UUID=80895b78-7312-45bc-afe5-58eb4b579422}} |
|||
* 追加のカーネルコマンドラインパラメータを入力するためのプロンプトを表示する: {{ic|1=rd.cmdline=ask}} {{Warning|プロンプトが表示される前にキーボードが初期化されていないと、{{ic|1=rd.cmdline=ask}} は問題を発生させる可能性があり、そうなると、ハードリセットしなくてはならなくなります。[https://github.com/dracutdevs/dracut/issues/728 dracut issue 728] を見てください}} |
|||
* {{ic|quiet}} が設定されている場合でも情報を出力する: {{ic|1=rd.info}} |
|||
=== ユニファイドカーネルイメージ === |
|||
''dracut'' は、{{ic|--uefi}} コマンドラインオプションまたは {{ic|1=uefi="yes"}} 設定オプションを使用して [[Unified カーネルイメージ]]を生成できます。 |
|||
== ヒントとテクニック == |
== ヒントとテクニック == |
||
| 54行目: | 495行目: | ||
生成された initramfs イメージの情報をページャを使って表示するには: |
生成された initramfs イメージの情報をページャを使って表示するには: |
||
# lsinitrd ''/path/to/initramfs_or_uefi_image'' | less |
|||
上記のコマンドはイメージ生成時に dracut に指定された引数や dracut モジュールのリスト、含まれているファイルのリストを表示します。 |
上記のコマンドはイメージ生成時に {{ic|dracut}} に指定された引数や {{ic|dracut}} モジュールのリスト、含まれているファイルのリストを表示します。 |
||
=== 圧縮プログラムの変更 === |
=== 圧縮プログラムの変更 === |
||
| 62行目: | 503行目: | ||
使用する圧縮プログラムを変更して、生成イメージの圧縮時間を減らすことができます。 |
使用する圧縮プログラムを変更して、生成イメージの圧縮時間を減らすことができます。 |
||
{{Warning|使用する圧縮アルゴリズムがカーネルでサポートされていることを確認してください。さもないと、ブートできなくなってしまいます。また、使用する圧縮プログラムのパッケージをインストールしておく必要があります。}} |
|||
{{Warning| |
|||
* カーネルで使用する圧縮方法のサポートがコンパイル時に組み込まれているかどうか確認してください (組み込まれていない場合、起動できなくなります)。また、圧縮プログラムのパッケージをインストールする必要があります。 |
|||
* バージョン 5.9 より前の Linux カーネルは zstd 圧縮 ををサポートしていません。 {{Pkg|linux-zen}} はバージョン 5.8 以降でサポートしています |
|||
}} |
|||
以下の行のどれかを |
以下の行のどれかを [[#詳細設定|dracut の設定ファイル]]に追加してください (2つ以上追加してはいけません): |
||
compress="cat" |
|||
compress="gzip" |
compress="gzip" |
||
compress="bzip2" |
compress="bzip2" |
||
| 81行目: | 520行目: | ||
公式でサポートされていない圧縮プログラムを使うこともできます: |
公式でサポートされていない圧縮プログラムを使うこともできます: |
||
compress=" |
compress="''program''" |
||
=== パフォーマンスに関する考慮事項 === |
|||
ブートと initramfs 作成のパフォーマンスを最適化するためのいくつかの考慮事項: |
|||
* 最速の圧縮方式を理解し、設定する: カーネルモジュールがすでに圧縮されている場合、initramfs作成時に再圧縮する必要はないかもしれない。 |
|||
* initramfs に systemd を含めることの影響を理解する: 遅くなる場合は省略し、速くなる場合は含める。 |
|||
* コピーオンライトファイルシステムを使用している場合は、dracut-cpio の使用を検討する: 適用可能性については、{{ic|--enhanced-cpio}} オプションを参照。 |
|||
* initramfs に含めるカーネルモジュールと dracut モジュールの数を最小限に抑える: 例:{{Pkg|nfs-utils}}がインストールされている(ただしブートには不要)場合、nfs dracutモジュールを明示的に省略する必要がある。そうしないと、デフォルト構成で生成されたinitramfsでネットワークブートが有効になる - https://github.com/dracut-ng/dracut-ng/pull/297 を参照。 |
|||
* bash の代わりに busybox の使用を検討する: |
|||
* hostonly を検討する: |
|||
=== カーネルのアップグレード時に新しい initramfs を生成 === |
=== カーネルのアップグレード時に新しい initramfs を生成 === |
||
カーネル |
カーネルをアップグレードするたびに、新しい initramfs イメージを自動的に生成することが可能です。ここでは、デフォルトの {{Pkg|linux}} カーネルについて説明しますが、他のカーネル用のフックを追加するのも簡単なはずです。 |
||
{{Tip|{{AUR|dracut-hook}} パッケージは以下のようなフックとスクリプトを含んでいます。EFI 実行ファイルである initramfs イメージ (つまり {{ic|''esp''/EFI/Linux/linux-''kernel''-''machine_id''-''build_id''.efi}}) が欲しい場合は、代わりに {{AUR|dracut-uefi-hook}} か {{AUR|dracut-hook-uefi}} をインストールしたほうが良いでしょう。このディレクトリにある EFI バイナリは [[systemd-boot]] によって自動的に検出されるので、{{ic|/boot/loader/loader.conf}} にエントリを書く必要はありません。}} |
|||
カーネルのバージョンを確認するコマンドはやや複雑なので、[[pacman]] フックの中で単独で使うことはできません。したがってシステムのどこかにスクリプトを作成してください。例えば、以下のように {{ic|~/.local/bin}} に作成します: |
|||
カーネルバージョンを調べるコマンドはやや複雑なので、[[pacman フック]]の中では単独では動きません。そのため、システム上の任意の場所にスクリプトを作成します。この例では {{ic|/usr/local/bin/}} に作成します。 |
|||
{{hc|~/.local/bin/90-dracut-linux.script| |
|||
<nowiki>#!/bin/bash |
|||
このスクリプトは、新しい {{ic|vmlinuz}} カーネルファイルを {{ic|/boot/}} にコピーします。これは、カーネルパッケージが {{ic|/boot/}} にファイルを配置しなくなったためです。[https://lists.archlinux.org/archives/list/arch-general@lists.archlinux.org/message/ZSO3ZLU2ATKBRLZBPOE3EHR6GS63RO3P/] |
|||
args=('-H' '--no-hostonly-cmdline') |
|||
{{hc|/usr/local/bin/dracut-install.sh|<nowiki> |
|||
#!/usr/bin/env bash |
|||
args=('--force' '--no-hostonly-cmdline') |
|||
while read -r line; do |
while read -r line; do |
||
if [[ "$line" == 'usr/lib/modules/'+([^/])'/pkgbase' ]]; then |
|||
read -r pkgbase < "/${line}" |
|||
kver="${line#'usr/lib/modules/'}" |
|||
kver="${kver%'/pkgbase'}" |
|||
fi |
|||
install -Dm0644 "/${line%'/pkgbase'}/vmlinuz" "/boot/vmlinuz-${pkgbase}" |
|||
dracut "${args[@]}" --hostonly "/boot/initramfs-${pkgbase}.img" --kver "$kver" |
|||
dracut "${args[@]}" --no-hostonly "/boot/initramfs-${pkgbase}-fallback.img" --kver "$kver" |
|||
fi |
|||
done |
done |
||
</nowiki>}} |
|||
{{hc|/usr/local/bin/dracut-remove.sh|<nowiki> |
|||
dracut "${args[@]}" -f /boot/initramfs-"${pkgbase[@]}".img --kver "${kver[@]}" |
|||
#!/usr/bin/env bash |
|||
dracut -f /boot/initramfs-"${pkgbase[@]}"-fallback.img --kver "${kver[@]}"</nowiki> |
|||
}} |
|||
while read -r line; do |
|||
スクリプトは {{ic|chmod a+x ~/.local/bin/90-dracut-linux.script}} で実行可能権限を与えてください。フラグを追加したり削除したい場合、dracut の[[#設定|設定]]に追加してください。 |
|||
if [[ "$line" == 'usr/lib/modules/'+([^/])'/pkgbase' ]]; then |
|||
read -r pkgbase < "/${line}" |
|||
rm -f "/boot/vmlinuz-${pkgbase}" "/boot/initramfs-${pkgbase}.img" "/boot/initramfs-${pkgbase}-fallback.img" |
|||
fi |
|||
done |
|||
</nowiki>}} |
|||
スクリプトを[[実行可能属性|実行可能にする]]必要があります。フラグを追加したり削除したりしたい場合は、[[#詳細設定|dracut の設定ファイル]]に追加する必要があります。 |
|||
次に [[pacman]] フックを作成します: |
|||
次に、[[pacman フック]]を作成します: |
|||
{{hc|/etc/pacman.d/hooks/90-dracut-linux.hook| |
|||
<nowiki>[Trigger] |
|||
{{hc|/etc/pacman.d/hooks/90-dracut-install.hook|<nowiki> |
|||
Type = File |
|||
[Trigger] |
|||
Type = Path |
|||
Operation = Install |
Operation = Install |
||
Operation = Upgrade |
Operation = Upgrade |
||
| 120行目: | 591行目: | ||
Description = Updating linux initcpios (with dracut!)... |
Description = Updating linux initcpios (with dracut!)... |
||
When = PostTransaction |
When = PostTransaction |
||
Exec = / |
Exec = /usr/local/bin/dracut-install.sh |
||
Depends = dracut |
|||
NeedsTargets</nowiki> |
|||
NeedsTargets |
|||
}} |
|||
</nowiki>}} |
|||
{{hc|/etc/pacman.d/hooks/60-dracut-remove.hook|<nowiki> |
|||
{{ic|username}} はあなたのユーザー名に置き換えてください。 |
|||
[Trigger] |
|||
Type = Path |
|||
Operation = Remove |
|||
Target = usr/lib/modules/*/pkgbase |
|||
[Action] |
|||
{{Pkg|mkinitcpio}} を削除するか以下のコマンドを実行することで[[mkinitcpio]] が initramfs イメージを生成するのを止めることができます: |
|||
Description = Removing linux initcpios... |
|||
When = PreTransaction |
|||
Exec = /usr/local/bin/dracut-remove.sh |
|||
NeedsTargets |
|||
</nowiki>}} |
|||
{{Pkg|mkinitcpio}} を削除するか以下のコマンドを使って、[[mkinitcpio]] が initramfs イメージを作成したり削除するのも止める必要があります: |
|||
# ln -sf /dev/null /etc/pacman.d/hooks/90-mkinitcpio-install.hook |
# ln -sf /dev/null /etc/pacman.d/hooks/90-mkinitcpio-install.hook |
||
# ln -sf /dev/null /etc/pacman.d/hooks/60-mkinitcpio-remove.hook |
|||
=== Bluetooth キーボードのサポート === |
|||
また、カーネルのアップグレード時に毎回新しい {{ic|vmlinuz}} カーネルを {{ic|/usr/lib/modules/[kver]/vmlinuz}} から {{ic|/boot/vmlinuz-linux}} にコピーする必要があります。{{Pkg|linux}} パッケージではなく {{ic|90-mkinitcpio-install.hook}} によってコピーが行われているためです。[https://lists.archlinux.org/pipermail/arch-general/2019-October/047056.html arch-general メーリングリスト] より: |
|||
Dracut は、Bluetooth キーボードが検出されると自動的に Bluetooth モジュールを有効にします。ただし、これには dracut が hostonly モードである必要があります。これはデフォルトではありません。 |
|||
:カーネルはもはや自分自身を /boot にインストールしません。代わりに、mkinitcpio フックがインストールを実行します。それによって、以前と同じ挙動を少しだけ柔軟な形で再現しています。 |
|||
:現在は dracut フックで同じような仕事をこなせるように作業していますが、今後は起動をより柔軟にして、ユーザーにより多くの選択肢が与えられるようにする予定です。Arch のアナウンスメーリングリストやウェブサイトのニュースから目を離さないでください。 |
|||
=== Limine ブートローダーのサポート === |
|||
== トラブルシューティング == |
|||
{{AUR|limine-dracut-support}} パッケージは、[[Limine]] ブートローダーでのカーネルとブートエントリのインストールと削除を自動化するために、dracut と pacman フックを備えた [https://gitlab.com/Zesko/limine-entry-tool limine-entry-tool] を利用します。詳細については、[[Limine#ブートエントリの自動化]] を参照してください。 |
|||
=== カーネルパラメータのスペース === |
|||
== トラブルシューティング == |
|||
dracut は、 {{ic|1=root=}} および {{ic|1=resume=}} [[カーネルパラメータ]] にスペースを含む引用符付きの値をサポートしていません。 たとえば、 {{ic|1=root="PARTLABEL=ArchLinux"}} です。 [https://github.com/dracutdevs/dracut/issues/720 dracut issue720] を参照してください。 |
|||
=== ハイバネート === |
|||
[[UUID]] などの別のブロックデバイス命名スキームを使用してパラメータを指定する必要があります。 |
|||
ハイバネートからの復帰がうまくいかない場合、{{ic|resume}} モジュールをイメージに含めるように {{ic|dracut}} を設定する必要がある場合があります。以下を[[#Dracut モジュール|設定ファイルに追加する]]必要があります: |
|||
=== ハイバネーション === |
|||
休止状態からの再開が機能しない場合は、 {{ic|resume}} モジュールを含めるように dracut を構成する必要がある場合があります。 [[#Configuration|構成ファイルを追加]] する必要があります: |
|||
{{hc|/etc/dracut.conf.d/resume-from-hibernate.conf|2= |
{{hc|/etc/dracut.conf.d/resume-from-hibernate.conf|2= |
||
add_dracutmodules+="resume" |
add_dracutmodules+=" resume " |
||
}} |
}} |
||
=== LVM / ソフトウェア RAID / LUKS === |
|||
カーネルに LVM / ソフトウェア RAID / LUKS ブロックの自動検出とマウントに問題がある場合、以下のカーネルコマンドラインオプションを使用して initramfs の生成を再度試してみることができます: |
|||
rd.auto rd.lvm=1 rd.dm=1 rd.md=1 rd.luks=1 |
|||
=== A stop job is running for "brltty" === |
|||
ブートの問題が発生する場合や、システムが {{ic|brllty}} の終了を待機するせいでシャットダウンに非常に長い時間が掛かる場合、以下を dracut の設定ファイルに追加してください: |
|||
omit_dracutmodules+=" brltty " |
|||
あるいは、{{Pkg|brltty}} が必要ない場合はアンインストールしてください。 |
|||
=== No usable keyslot is available === |
|||
Cannot use whirlpool hash for keyslot encryption. |
|||
Keyslot open failed. |
|||
No usable keyslot is available. |
|||
上記のようなメッセージが表示されてブートに失敗する場合、大抵、{{ic|add_dracutmodules}} に {{ic|crypt}} モジュールを追加するだけで解決します。しかし、このモジュールを追加した後もメッセージが表示され続ける場合、以下のように設定を変更する必要がある場合があります: |
|||
install_items+=" /usr/lib/ossl-modules/legacy.so " |
|||
これは、[[OpenSSL]] が whirlpool ハッシュ関数を非推奨にして、この関数を上記のライブラリに移動したせいです。Arch を使用する場合、dracut は自動的にこのライブラリを initramfs にインストールしません。 |
|||
== 参照 == |
== 参照 == |
||
* [[Wikipedia:dracut (software)]] |
* [[Wikipedia:dracut (software)]] |
||
* [ |
* [[Gentoo:Dracut]] |
||
{{TranslationStatus|dracut|2023-08-03|783287}} |
|||
2025年2月20日 (木) 03:47時点における最新版
dracut はカーネルによって使用される初期イメージを生成し、ルートファイルシステムにアクセスするのに必要なブロックデバイスモジュール (IDE、SCSI、RAID など) をプリロードします。linux のインストール時に mkinitcpio と dracut のどちらを使うか選択できます。dracut は Fedora、RHEL、Gentoo、Debian などのディストリビューションで使われています。Arch はデフォルトで mkinitcpio を使用します。
dracut のプロジェクトドキュメントはこちらで読むことができます。
インストール
dracut パッケージをインストールしてください。最新の開発バージョンの場合は dracut-gitAUR をインストールしてください。
使用方法
dracut は使いやすく、LVM on LUKS のような非標準的なセットアップを使用する場合でも、通常はユーザー設定を必要としません。
実行中のカーネルの initramfs を生成するには:
# dracut --hostonly --no-hostonly-cmdline --add-confdir no-network /boot/initramfs-linux.img
hostonly モードを永続的に有効にするには (コマンドラインに含める必要がないように) dracut 設定に以下を追加します。
/etc/dracut.conf.d/hostonly.conf
hostonly="yes"
# dracut --regenerate-all
フォールバック initramfs を生成するには、以下を実行します。
# dracut /boot/initramfs-linux-fallback.img
/boot/initramfs-linux.img は、出力イメージファイルを指します。別のカーネルを使用している場合は、ファイル名を変更することを検討してください。たとえば、linux-lts カーネルの場合、出力ファイルは /boot/initramfs-linux-lts.img という名前にする必要があります。ただし、ブートローダー 設定で同じファイル名を使用する限り、これらのファイルには好きな名前を付けることができます。
追加オプション
--force フラグは、イメージファイルが既に存在する場合に上書きします。
--kver オプションは、使用するカーネルを指定します。このオプションの引数は、/usr/lib/modules にあるディレクトリの名前と一致する必要があります。
dracut(8) には他のフラグの説明が載っています。
詳細設定
初期 RAM ディスクフェーズ中の様々なタスクの実行方法には、2つの異なるアプローチがあることに注意することが重要です。
- シェル (bash/busybox/dash) ベースの初期 RAM ディスク
- init スクリプトが開始され、次に初期 RAM ディスクのファイルシステムをスキャンして実行される dracut スクリプトを検索します。
- systemd ベース(デフォルト)の初期 RAM ディスク
- systemd は初期 RAM ディスクフェーズの開始時にすでに開始されています。実行されるタスクは、通常の systemd ユニットファイルによって決定されます。systemdブートアッププロセスを参照してください。
具体的なバリアントは、systemd dracut モジュールの有無によって決定されます。詳細については、#dracut モジュールを参照してください。
dracut は、コマンドラインで直接引数を渡すことによって構成できます (dracut(8) § OPTIONS を参照) 特定のフラグのセットを使用して常に dracut を実行する場合は、/etc/dracut.conf.d/ に.conf ファイルに指定された設定を保存できます。例:
/etc/dracut.conf.d/myflags.conf
hostonly="yes" compress="lz4" add_drivers+=" i915 " omit_dracutmodules+=" systemd network "
dracut.conf(5) でより多くの設定オプションを確認できます。各オプションのより詳細な説明は、dracut(8) にあります。以下では、いくつかの一般的なオプションについて説明します。
Dracut モジュール
dracut は、initramfs を構築するためにモジュール式のアプローチを採用しています (dracut.modules(7) を参照) dracut の組み込みモジュールはすべて /lib/dracut/modules.d にあり、dracut --list-modules で一覧表示できます。追加のモジュールは、dracut-sshd-gitAUR などの外部パッケージによって提供できます。残念ながら、dracut の組み込みモジュールにはドキュメントがありませんが、その名前はそれ自体で説明できる場合があります。
一部のモジュールはデフォルトでアクティブ/非アクティブであり、--add/--omit コマンドライン引数または add_dracutmodules+=""/omit_dracutmodules+="" 永続設定エントリ行を使用してアクティブ化/非アクティブ化できます。
/etc/dracut.conf.d/myflags.conf
# ... add_dracutmodules+=" dracut modules to activate " omit_dracutmodules+=" dracut modules to deactivate " # ...
次の表に、dracut モジュール、必要なパッケージ(dracut のオプションの依存関係)およびモジュールの説明を示します。
ほとんどの dracut モジュールは、他の dracut モジュールに依存しています。例として、bluetooth dracut モジュールは dbus dracut モジュールに依存しています。以下の表は、直接的な dracut モジュールの依存関係のみを示しています。つまり、特定の dracut モジュールの module-setup.sh にリストされている、特定のモジュールに必要なパッケージを示しています。
追加の dracut モジュールのドキュメントについては、アップストリームの dracut wiki を参照してください。
| dracut モジュール | 必要なパッケージ | 説明 |
|---|---|---|
| bluetooth | bluez | Bluetooth (keyboard) |
| btrfs | btrfs-progs | ブロックデバイスで btrfs をスキャンします |
| busybox | busybox | BusyBox (自己責任で) の使用を許可します |
| crypt | cryptsetup | 暗号化された dm-crypt ファイルシステムのサポート |
| dash | dash | dash (自己責任で) の使用を許可します |
| dmraid | dmraid, multipath-tools | DMRAID Dracut モジュールサポート |
| multipath | multipath-tools | MultiPath Dracut モジュールサポート |
| dmsquash-live-ntfs | fuse3, ntfs-3g | ライブ NTFS |
| lvm | lvm2 | LVM のサポート |
| mdraid | mdadm | ソフトウェア RAID デバイスとも呼ばれるMDデバイスをサポートします |
| memstrack | memstrackAUR | memstrack をサポート |
| nvdimm | ndctl | NVDIMM をサポート |
| plymouth | plymouth | Plymouth ブートスプラッシュ |
| rescue | 救助モード用のさまざまなユーティリティ (Ping、SSH、VI、FSCK などなど) が含まれています。 | |
| resume | initramfs が低電力状態から再開できるようにします | |
| rngd | 早期ブートでランダムジェネレーターサービスを開始します | |
| syslog | rsyslogAUR | rsyslog でロギングを有効にする |
| squash | squashfs-tools | squashed initramfs を構築するためのサポート |
| tpm2-tss | tpm2-tools | Trusted Platform Module |
| base | 必要なユーティリティを備えたベースモジュール | |
| bash | bash | Bash が複数存在する場合、Bash を優先的に使用 |
| biosdevname | biosdevnameAUR | BIOS に基づいたネットワークデバイス名を使用 |
| caps | init 実行前にケーパビリティを削減可能 | |
| convertfs | / を /usr に統合 (次回起動時に実行) | |
| crypt-gpg | gnupg | GPG を使用した暗号化・SmartCard のサポート (GPG キーが必要な場合あり) |
| crypt-loop | 暗号化されたループバックデバイスのサポート (対称鍵) | |
| dbus | dbus-broker または dbus-daemon の仮想パッケージ | |
| dbus-broker | dbus-broker | dbus-broker を dbus サービスプロバイダとして使用 |
| dbus-daemon | dbus | dbus を dbus サービスプロバイダとして使用 |
| debug | デバッグ機能を有効化 | |
| dm | device-mapper のサポートを追加 | |
| dmsquash-live-autooverlay | ルートファイルシステムの親ブロックデバイスの空き領域に overlayfs 用パーティションを作成 | |
| dracut-systemd | 基本的な systemd 用 dracut モジュール | |
| drm | DRM (Direct Rendering Manager) サポートのカーネルモジュールを含む | |
| ecryptfs | ecryptfs ファイルシステムのサポートを追加 | |
| fido2 | FIDO2 セキュリティトークンを使用して暗号化ファイルシステムを解読可能 | |
| fips | FIPS セキュリティ標準を適用 | |
| fs-lib | fsck.* や mount などのファイルシステムツールのライブラリ | |
| fstab-sys | rootfs より前に任意のパーティションをマウント | |
| i18n | キーマップ、コンソールフォントなどを含む | |
| img-lib | イメージの展開ツールを含むライブラリ | |
| integrity | 拡張検証モジュール (EVM) のサポートを追加 | |
| kernel-modules | ルートファイルシステムおよびブート時に必要なデバイスのカーネルモジュール | |
| kernel-modules-extra | 追加のカーネルモジュール (out-of-tree) | |
| lunmask | 必要な LUN デバイスのみを選択してマスク | |
| lvmmerge | LVM スナップショットをマージ | |
| lvmthinpool-monitor | LVM thin pool を監視 | |
| masterkey | 他の鍵の解読用マスターキーと keyutils を含む | |
| modsign | 署名付きカーネルモジュールのサポートを追加 | |
| overlayfs | OverlayFS のカーネルモジュール | |
| pcsc | PCSC スマートカードのサポート | |
| pkcs11 | PKCS#11 ライブラリを含む | |
| pollcdrom | CD-ROM ポーリングを有効化 | |
| qemu | QEMU 環境用のカーネルモジュールを含む | |
| rescue | ping、ssh、vi、fsck.* などのレスキュー用ユーティリティ | |
| rootfs-block | ルートファイルシステムを含むブロックデバイスのマウント処理 | |
| securityfs | securityfs をブート初期にマウント | |
| selinux | SELinux ポリシーのロードを処理 | |
| shutdown | シャットダウン時に実行されるフックを設定 | |
| systemd | 早期 init システムとして systemd を使用 | |
| terminfo | terminfo ファイルを含む | |
| udev-rules | udev と基本ルールのセット | |
| uefi-lib | UEFI ツールを含むライブラリ | |
| usrmount | /usr のマウントを処理 | |
| virtfs | 仮想ファイルシステム (9p) のサポート | |
| virtiofs | virtiofs ファイルシステムのサポート | |
| warpclock | adjtime が LOCAL に設定されている場合にシステム時間をリセット | |
| watchdog | watchdog デバイス管理を含む (systemd 非使用時のみ動作) | |
| watchdog-modules | 起動時にロードされる watchdog 用カーネルモジュール |
これは、IPアドレス が初期ブート時に利用可能になることが想定される場合に使用される Dracut モジュールについての説明です。
| ネットワーキング dracut モジュール | 必要なパッケージ | 説明 |
|---|---|---|
| cifs | cifs-utils | Samba のサポート |
| nbd | nbd | ネットワークブロックデバイスのサポート |
| network-manager | networkmanager | NetworkManager のサポート |
| nfs | nfs-utils | NFS のサポート (NFSv3 および NFSv4) |
| nvmf | nvme-cli, jq | NVMe over Fibre Channel および NVMe-over-Fabrics のサポート |
| iscsi | open-iscsi | ISCSI のサポート |
| ssh-client | openssh | SSH および SCP のインストール (設定ファイルや指定された鍵も含む) |
| network-legacy | dhclient, iproute2, iputils | レガシーなネットワークのサポート |
| connman | connman | ConnMan ネットワークのサポート |
| kernel-network-modules | ネットワークデバイス用のカーネルモジュールを含み、ロードする | |
| livenet | SquashFS イメージのライブアップデートを取得 | |
| network | ネットワークサービスプロバイダーの仮想モジュール | |
| url-lib | curl および SSL 証明書を含むライブラリ | |
| qemu-net | QEMU 環境向けネットワークカーネルモジュールを含む | |
| systemd-network-management | systemd のネットワーク管理を追加 (systemd-networkd, systemd-resolved などのネットワーク関連モジュールを含む) | |
| systemd-networkd | Systemd-networkd | |
| net-lib | ip を含むネットワークライブラリ |
TPM2
systemd-cryptenroll を介して TPM2 で luks2 暗号化ボリュームをアンロックする systemd の機能を使用するには、tpm2-tools パッケージをインストールし、かつ tpm2-tss dracut モジュールを有効化してください。
カーネルモジュールの早期ロード
Dracut では、--force_drivers 引数または force_drivers+="" 設定エントリで早期ロードを有効化します (initramfs の段階で modprobe によってロードされます)。例えば:
/etc/dracut.conf.d/myflags.conf
# ... force_drivers+=" nvidia nvidia_modeset nvidia_uvm nvidia_drm " # ...
カーネルコマンドラインオプション
カーネルコマンドラインオプションは、/etc/dracut.conf.d/ の .conf ファイルで kernel_cmdline= フラグで設定できます。Dracut は自動的にこのファイルを読み込み、01-default.conf ファイルを作成し、initramfs ディレクトリ /etc/cmdline.d/ 内に配置します。例えば、カーネルコマンドラインオプションのファイルは次のようになります:
/etc/dracut.conf.d/cmdline.conf
kernel_cmdline="rd.luks.uuid=luks-f6c738f3-ee64-4633-b6b0-eceddb1bb010 rd.lvm.lv=arch/root rd.lvm.lv=arch/swap root=/dev/arch/root rootfstype=ext4 rootflags=rw,relatime"
雑記
dracut でルートブロックデバイスを指定することは必須ではありません。dracut.cmdline(7) によると:
- カーネルによって使用されるルートブロックデバイスは、通常通り、ブート設定ファイル内でカーネルコマンドラインによって指定されます。
しかし、一部のパラメータを早期に設定しておくと便利な場合があり、追加のコマンドラインパラメーターのプロンプトなどといった追加機能を有効にすることができます。すべてのオプションについては、dracut.cmdline(7) を参照してください。設定オプションの例を次に示します:
- スワップパーティションを使ってハイバネートから復帰する:
resume=UUID=80895b78-7312-45bc-afe5-58eb4b579422 - 追加のカーネルコマンドラインパラメータを入力するためのプロンプトを表示する:
rd.cmdline=ask警告 プロンプトが表示される前にキーボードが初期化されていないと、rd.cmdline=askは問題を発生させる可能性があり、そうなると、ハードリセットしなくてはならなくなります。dracut issue 728 を見てください quietが設定されている場合でも情報を出力する:rd.info
ユニファイドカーネルイメージ
dracut は、--uefi コマンドラインオプションまたは uefi="yes" 設定オプションを使用して Unified カーネルイメージを生成できます。
ヒントとテクニック
生成されたイメージの情報を表示
生成された initramfs イメージの情報をページャを使って表示するには:
# lsinitrd /path/to/initramfs_or_uefi_image | less
上記のコマンドはイメージ生成時に dracut に指定された引数や dracut モジュールのリスト、含まれているファイルのリストを表示します。
圧縮プログラムの変更
使用する圧縮プログラムを変更して、生成イメージの圧縮時間を減らすことができます。
以下の行のどれかを dracut の設定ファイルに追加してください (2つ以上追加してはいけません):
compress="cat" compress="gzip" compress="bzip2" compress="lzma" compress="xz" compress="lzo" compress="lz4" compress="zstd"
gzip がデフォルトで使用される圧縮プログラムです。compress="cat" は、圧縮なしで initramfs を作成します。
公式でサポートされていない圧縮プログラムを使うこともできます:
compress="program"
パフォーマンスに関する考慮事項
ブートと initramfs 作成のパフォーマンスを最適化するためのいくつかの考慮事項:
- 最速の圧縮方式を理解し、設定する: カーネルモジュールがすでに圧縮されている場合、initramfs作成時に再圧縮する必要はないかもしれない。
- initramfs に systemd を含めることの影響を理解する: 遅くなる場合は省略し、速くなる場合は含める。
- コピーオンライトファイルシステムを使用している場合は、dracut-cpio の使用を検討する: 適用可能性については、
--enhanced-cpioオプションを参照。
- initramfs に含めるカーネルモジュールと dracut モジュールの数を最小限に抑える: 例:nfs-utilsがインストールされている(ただしブートには不要)場合、nfs dracutモジュールを明示的に省略する必要がある。そうしないと、デフォルト構成で生成されたinitramfsでネットワークブートが有効になる - https://github.com/dracut-ng/dracut-ng/pull/297 を参照。
- bash の代わりに busybox の使用を検討する:
- hostonly を検討する:
カーネルのアップグレード時に新しい initramfs を生成
カーネルをアップグレードするたびに、新しい initramfs イメージを自動的に生成することが可能です。ここでは、デフォルトの linux カーネルについて説明しますが、他のカーネル用のフックを追加するのも簡単なはずです。
esp/EFI/Linux/linux-kernel-machine_id-build_id.efi) が欲しい場合は、代わりに dracut-uefi-hookAUR か dracut-hook-uefiAUR をインストールしたほうが良いでしょう。このディレクトリにある EFI バイナリは systemd-boot によって自動的に検出されるので、/boot/loader/loader.conf にエントリを書く必要はありません。カーネルバージョンを調べるコマンドはやや複雑なので、pacman フックの中では単独では動きません。そのため、システム上の任意の場所にスクリプトを作成します。この例では /usr/local/bin/ に作成します。
このスクリプトは、新しい vmlinuz カーネルファイルを /boot/ にコピーします。これは、カーネルパッケージが /boot/ にファイルを配置しなくなったためです。[1]
/usr/local/bin/dracut-install.sh
#!/usr/bin/env bash
args=('--force' '--no-hostonly-cmdline')
while read -r line; do
if [[ "$line" == 'usr/lib/modules/'+([^/])'/pkgbase' ]]; then
read -r pkgbase < "/${line}"
kver="${line#'usr/lib/modules/'}"
kver="${kver%'/pkgbase'}"
install -Dm0644 "/${line%'/pkgbase'}/vmlinuz" "/boot/vmlinuz-${pkgbase}"
dracut "${args[@]}" --hostonly "/boot/initramfs-${pkgbase}.img" --kver "$kver"
dracut "${args[@]}" --no-hostonly "/boot/initramfs-${pkgbase}-fallback.img" --kver "$kver"
fi
done
/usr/local/bin/dracut-remove.sh
#!/usr/bin/env bash
while read -r line; do
if [[ "$line" == 'usr/lib/modules/'+([^/])'/pkgbase' ]]; then
read -r pkgbase < "/${line}"
rm -f "/boot/vmlinuz-${pkgbase}" "/boot/initramfs-${pkgbase}.img" "/boot/initramfs-${pkgbase}-fallback.img"
fi
done
スクリプトを実行可能にする必要があります。フラグを追加したり削除したりしたい場合は、dracut の設定ファイルに追加する必要があります。
次に、pacman フックを作成します:
/etc/pacman.d/hooks/90-dracut-install.hook
[Trigger] Type = Path Operation = Install Operation = Upgrade Target = usr/lib/modules/*/pkgbase [Action] Description = Updating linux initcpios (with dracut!)... When = PostTransaction Exec = /usr/local/bin/dracut-install.sh Depends = dracut NeedsTargets
/etc/pacman.d/hooks/60-dracut-remove.hook
[Trigger] Type = Path Operation = Remove Target = usr/lib/modules/*/pkgbase [Action] Description = Removing linux initcpios... When = PreTransaction Exec = /usr/local/bin/dracut-remove.sh NeedsTargets
mkinitcpio を削除するか以下のコマンドを使って、mkinitcpio が initramfs イメージを作成したり削除するのも止める必要があります:
# ln -sf /dev/null /etc/pacman.d/hooks/90-mkinitcpio-install.hook # ln -sf /dev/null /etc/pacman.d/hooks/60-mkinitcpio-remove.hook
Bluetooth キーボードのサポート
Dracut は、Bluetooth キーボードが検出されると自動的に Bluetooth モジュールを有効にします。ただし、これには dracut が hostonly モードである必要があります。これはデフォルトではありません。
Limine ブートローダーのサポート
limine-dracut-supportAUR パッケージは、Limine ブートローダーでのカーネルとブートエントリのインストールと削除を自動化するために、dracut と pacman フックを備えた limine-entry-tool を利用します。詳細については、Limine#ブートエントリの自動化 を参照してください。
トラブルシューティング
ハイバネート
ハイバネートからの復帰がうまくいかない場合、resume モジュールをイメージに含めるように dracut を設定する必要がある場合があります。以下を設定ファイルに追加する必要があります:
/etc/dracut.conf.d/resume-from-hibernate.conf
add_dracutmodules+=" resume "
LVM / ソフトウェア RAID / LUKS
カーネルに LVM / ソフトウェア RAID / LUKS ブロックの自動検出とマウントに問題がある場合、以下のカーネルコマンドラインオプションを使用して initramfs の生成を再度試してみることができます:
rd.auto rd.lvm=1 rd.dm=1 rd.md=1 rd.luks=1
A stop job is running for "brltty"
ブートの問題が発生する場合や、システムが brllty の終了を待機するせいでシャットダウンに非常に長い時間が掛かる場合、以下を dracut の設定ファイルに追加してください:
omit_dracutmodules+=" brltty "
あるいは、brltty が必要ない場合はアンインストールしてください。
No usable keyslot is available
Cannot use whirlpool hash for keyslot encryption. Keyslot open failed. No usable keyslot is available.
上記のようなメッセージが表示されてブートに失敗する場合、大抵、add_dracutmodules に crypt モジュールを追加するだけで解決します。しかし、このモジュールを追加した後もメッセージが表示され続ける場合、以下のように設定を変更する必要がある場合があります:
install_items+=" /usr/lib/ossl-modules/legacy.so "
これは、OpenSSL が whirlpool ハッシュ関数を非推奨にして、この関数を上記のライブラリに移動したせいです。Arch を使用する場合、dracut は自動的にこのライブラリを initramfs にインストールしません。