「Dracut」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(→‎詳細設定: 同期 & 訳を修正)
48行目: 48行目:
 
== 詳細設定 ==
 
== 詳細設定 ==
   
{{ic|dracut}} は、コマンドラインで引数を直接渡すことで構成できます ({{man|8|dracut|OPTIONS}} を参照) 特定のフラグセットを使用して {{ic|dracut}} を常に実行する場合は、指定した設定を {{ic|.conf}} の {{ic|/etc/dracut.conf.d}} ファイルに保存できます。}}
+
{{ic|dracut}} は、コマンドラインで引数を直接渡して設定できます ({{man|8|dracut|OPTIONS}} を参照)。常に特定のフラグを使用して {{ic|dracut}} を実行する場合は、設定を {{ic|/etc/dracut.conf.d/}} の {{ic|.conf}} ファイルに保存できます。例えば:
例えば:
 
   
 
{{hc|/etc/dracut.conf.d/myflags.conf|2=
 
{{hc|/etc/dracut.conf.d/myflags.conf|2=
58行目: 57行目:
 
}}
 
}}
   
{{man|5|dracut.conf}} でより多くの設定オプションを見ることができます。各オプションの完全な説明は、{{man|8|dracut}} で見つけることができます。以下では、いくつかの一般的なオプションについて説明します。
+
{{man|5|dracut.conf}} でその他の設定オプションを見ることができます。各オプションの完全な説明は、{{man|8|dracut}} で見ることができます。以下では、いくつかの一般的なオプションについて説明します。
   
 
=== Dracut モジュール ===
 
=== Dracut モジュール ===
   
''dracut'' は initramfs を構築するためにモジュール方式を採用しています ({{man|7|dracut.modules}} を参照) 全ての ''dracut'' の組み込みモジュールは {{ic|/lib/dracut/modules.d}} にあり、 {{ic|dracut --list-modules}} で一覧を見ることができます。追加モジュールは例えば {{aur|dracut-sshd-git}} のような外部パッケージから提供されます。''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+=""}} 永続的な設定エントリ行で有効/無効を切り替えることができるようになっています。
+
一部のモジュールはデフォルトで有効/無効になっており、{{ic|--add}}/{{ic|--omit}} コマンドライン引数または永続的な {{ic|1= add_dracutmodules+=""}}/{{ic|1= omit_dracutmodules+=""}} 設定エントリ行で有効/無効を切り替えることができるようになっています。
   
 
{{hc|/etc/dracut.conf.d/myflags.conf|2=
 
{{hc|/etc/dracut.conf.d/myflags.conf|2=
 
# ...
 
# ...
add_dracutmodules+=" <dracut modules to activate> "
+
add_dracutmodules+=" <アクティブ化する dracut モジュールのリスト> "
omit_dracutmodules+=" <dracut modules to deactivate> "
+
omit_dracutmodules+=" <非アクティブ化する dracut モジュールのリスト> "
 
# ...
 
# ...
 
}}
 
}}
75行目: 74行目:
 
==== TPM2 ====
 
==== TPM2 ====
   
[[Trusted Platform Module#systemd-cryptenroll|systemd-cryptenroll]] を介して TPM2 を使用して ''systemd'' による ''luks2'' 暗号化ボリュームロック解除用するには、{{Pkg|tpm2-tools}} パッケージをインストールします。{{ic|tpm2-tss}} ''dracut'' モジュールを有効ます
+
[[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}} を介し) 初期ロードを有効にします。
+
Dracut は、{{ic|--force_drivers}} 引数または {{ic|1= force_drivers+=""}} 設定エントリで早期ロード有効化ます (initramfs の段階で {{ic|modprobe}} によってロードされます)例えば:
例えば:
 
   
 
{{hc|/etc/dracut.conf.d/myflags.conf|2=
 
{{hc|/etc/dracut.conf.d/myflags.conf|2=
90行目: 88行目:
 
=== カーネルコマンドラインオプション ===
 
=== カーネルコマンドラインオプション ===
   
カーネルコマンドラインオプションは、{{ic|/etc/dracut.conf.d/}} の ''.conf'' ファイルに配置き、{{ic|1=kernel_cmdline=}} フラグを介して設定できます。Dracut は自動的にこのファイルを読み込み、{{ic|01-default.conf}} ファイルを作成し、initramfs ディレクトリ {{ic|/etc/cmdline.d/}} 内に配置します。たとえば、カーネルコマンドラインオプションファイルは次のようになります
+
カーネルコマンドラインオプションは、{{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=
 
{{hc|/etc/dracut.conf.d/cmdline.conf|2=
98行目: 96行目:
 
==== 雑記 ====
 
==== 雑記 ====
   
{{ic|dracut}} ルートブロックデバイスを指定する必はありません。{{man|7|dracut.cmdline}} から:
+
{{ic|dracut}} ルートブロックデバイスを指定することは須ではありません。{{man|7|dracut.cmdline}} によると:
   
: カーネル使用るルート デバイスは、通常どおり、カーネルコマンドラインのブート構成ファイルで指定されます。
+
: カーネルによって使用されるルートブロックデバイスは、通常り、ブート設定ファイル内でカーネルコマンドラインによって指定されます。
   
ただし、一部のパラメータを早期に設定すると便利な場合があり、追加のコマンドラインパラメーターのプロンプトなど追加機能を有効にすることができます。すべてのオプションについては、{{man|7|dracut.cmdline}} を参照してください。設定オプションの例を次に示します
+
しかし、一部のパラメータを早期に設定しておくと便利な場合があり、追加のコマンドラインパラメーターのプロンプトなどといった追加機能を有効にすることができます。すべてのオプションについては、{{man|7|dracut.cmdline}} を参照してください。設定オプションの例を次に示します:
   
* スワップパーティションからの再開: {{ic|1=resume=UUID=80895b78-7312-45bc-afe5-58eb4b579422}}
+
* スワップパーティションを使ってハイバネートから復帰する: {{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|1=rd.cmdline=ask}}
 
* ''quiet'' が設定されている場合でも情報出力を印刷する: {{ic|1=rd.info}}
+
* {{ic|quiet}} が設定されている場合でも情報出力する: {{ic|1=rd.info}}
   
 
=== Unified カーネルイメージ ===
 
=== Unified カーネルイメージ ===
   
''dracut'' は、{{ic|--uefi}} コマンドラインオプションまたは {{ic|1=uefi="yes"}} 設定オプションを使用して [[Unified カーネルイメージ]] を生成できます。
+
''dracut'' は、{{ic|--uefi}} コマンドラインオプションまたは {{ic|1=uefi="yes"}} 設定オプションを使用して [[Unified カーネルイメージ]]を生成できます。
   
 
== ヒントとテクニック ==
 
== ヒントとテクニック ==

2023年8月3日 (木) 16:42時点における版

関連記事

dracut はカーネルによって使用される初期イメージを生成し、ルートファイルシステムにアクセスするのに必要なブロックデバイスモジュール (IDE、SCSI、RAID など) をプリロードします。linux のインストール時に mkinitcpiodracut のどちらを使うか選択できます。dracut は Fedora、RHEL、Gentoo、Debian などのディストリビューションで使われています。Arch はデフォルトで mkinitcpio を使用します。

dracut の完全なプロジェクトドキュメントはドキュメントで読むことができます。

インストール

dracut パッケージをインストールしてください。最新の開発バージョンの場合は dracut-gitAUR をインストールしてください。

ヒント: dracut が動作することが確認できたのであれば、mkinitcpioアンインストールできます。

使用方法

dracut は使いやすく、LVM on LUKS のような非標準的なセットアップでも、大抵、ユーザによる設定は不要です。

実行中のカーネルの initramfs を生成するには:

# dracut --hostonly --no-hostonly-cmdline /boot/initramfs-linux.img

フォールバック initramfs を生成するには:

# dracut /boot/initramfs-linux-fallback.img

/boot/initramfs-linux.img は出力イメージファイルを指します。ノーマルのカーネル以外を使用している場合は、ファイル名の変更を検討してください。例えば、linux-lts カーネルの場合、出力ファイルの名前は /boot/initramfs-linux-lts.img にするべきです、しかし、ブートローダーの設定が同じファイル名を使用していれば、これらのファイルに好きな名前を付けることができます。

ノート:
  • これらのコマンドで作成されたファイルには、インストールされているマイクロコードイメージがすべて埋め込まれます。
  • FS#59841 のため、ホストオンリーモードでは、システムで必要とされるものだけでなく、全ての Intel マイクロコードが initramfs に含まれます。[1]

追加オプション

--force フラグは、イメージファイルが既に存在する場合に上書きします。

--kver オプションは、使用するカーネルを指定します。このオプションの引数は、/usr/lib/modules にあるディレクトリの名前と一致する必要があります。

dracut(8) には他のフラグの説明が載っています。

詳細設定

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+=" network iscsi "

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 モジュールのリスト> "
omit_dracutmodules+=" <非アクティブ化する dracut モジュールのリスト> "
# ...

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

Unified カーネルイメージ

dracut は、--uefi コマンドラインオプションまたは uefi="yes" 設定オプションを使用して Unified カーネルイメージを生成できます。

ヒントとテクニック

生成されたイメージの情報を表示

生成された initramfs イメージの情報をページャを使って表示するには:

$ lsinitrd <path to initramfs image> | less

上記のコマンドはイメージ生成時に dracut に指定された引数や dracut モジュールのリスト、含まれているファイルのリストを表示します。

圧縮プログラムの変更

使用する圧縮プログラムを変更して、生成イメージの圧縮時間を減らすことができます。

警告:
  • カーネルで使用する圧縮方法のサポートがコンパイル時に組み込まれているかどうか確認してください (組み込まれていない場合、起動できなくなります)。また、圧縮プログラムのパッケージをインストールする必要があります。
  • バージョン 5.9 より前の Linux カーネルは zstd 圧縮 ををサポートしていません。 linux-zen はバージョン 5.8 以降でサポートしています

以下の行のどれかを dracut の設定に追加してください (2つ以上追加してはいけません):

compress="gzip"
compress="bzip2"
compress="lzma"
compress="xz"
compress="lzo"
compress="lz4"
compress="zstd"

gzip がデフォルトで使用される圧縮プログラムです。compress="cat" は、圧縮なしで initramfs を作成します。

公式でサポートされていない圧縮プログラムを使うこともできます:

compress="<program>"

カーネルのアップグレード時に新しい initramfs を生成

カーネルをアップグレードするたびに、新しい initramfs イメージを自動的に生成することが可能です。ここでは、デフォルトの linux カーネルについて説明しますが、他のカーネル用のフックを追加するのも簡単でしょう。

ヒント: dracut-hookAUR パッケージは以下のようなフックとスクリプトを含んでいます。EFI 実行ファイルである initramfs イメージ (例:esp/EFI/Linux/linux-kernel-machine_id-build_id.efi) が欲しい場合は、代わりに dracut-hook-uefiAUR が必要かもしれません。このディレクトリにある EFI バイナリは systemd-boot によって自動的に検出されるので、 /boot/loader/loader.conf にエントリを書く必要はありません。

カーネルバージョンを調べるコマンドはやや複雑なので、pacman フック の中では単独では動きません。そのため、システム上の任意の場所にスクリプトを作成します。この例では /usr/local/bin/ に作成します。

このスクリプトは、新しい vmlinuz カーネル・ファイルを /boot/ にコピーします。これは、カーネル・パッケージが /boot/ にファイルを配置しなくなったためです。[2]

/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

トラブルシューティング

ハイバネーション

休止状態からの再開が機能しない場合は、 resume モジュールを含めるように dracut に 設定ファイルを追加 する必要があります:

/etc/dracut.conf.d/resume-from-hibernate.conf
add_dracutmodules+="resume"

LVM / software RAID / LUKS

カーネルに LVM / software RAID / LUKS ブロックの自動検出とマウントに問題がある場合。次のカーネルコマンドライン オプションを使用して、initramfs の生成を再試行します。

rd.auto rd.lvm=1 rd.dm=1 rd.md=1 rd.luks=1

"brltty" の停止ジョブが実行中です

システムが brllty を待機中、起動に問題があるか、シャットダウンプロセスが非常に長い場合は、dracut 設定行に次の行を追加します。

omit_dracutmodules+=" brltty "

あるいは、brltty が必要ない場合はアンインストールしてください。

使用可能なキースロットがありません

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 のためです

参照