「Dracut」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(翻訳)
タグ: リダイレクト解消
(→‎Unified カーネルイメージ: ユニファイドカーネルイメージに変更)
 
(4人の利用者による、間の29版が非表示)
1行目: 1行目:
 
{{Lowercase title}}
 
{{Lowercase title}}
  +
[[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://dracut.wiki.kernel.org/ dracut] はカーネルによって使用される初期イメージを生成し、ルートファイルシステムにアクセスするのに必要なブロックデバイスモジュール (IDE, SCSI, RAID など) をプリロードします。{{Pkg|linux}} のインストール時に [[Mkinitcpio|mkinitcpio]] と dracut のどちらを使うか選択できます。dracut は Fedora, RHEL, Gentoo, Debian などのディストリビューションで使われています。
+
[https://github.com/dracutdevs/dracut/wiki dracut] はカーネルによって使用される初期イメージを生成し、ルートファイルシステムにアクセスするのに必要なブロックデバイスモジュール (IDESCSIRAID など) をプリロードします。{{Pkg|linux}} のインストール時に [[mkinitcpio]] と ''dracut'' のどちらを使うか選択できます。''dracut'' は FedoraRHELGentooDebian などのディストリビューションで使われています。Arch はデフォルトで [[mkinitcpio]] を使用します。
   
dracut の詳しいプロジェクト説明 [https://mirrors.edge.kernel.org/pub/linux/utils/boot/dracut/dracut.html カーネルドキュメント] から確認できます。
+
''dracut''完全なプロジェクトドキュメントは[https://github.com/dracutdevs/dracut/wiki ドキュメント]で読むことができます。
   
 
== インストール ==
 
== インストール ==
   
dracut は {{Pkg|dracut}} パッケージ[[インストール]]できます
+
{{Pkg|dracut}} パッケージ[[インストール]]してください。最新の開発バージョンの場合は {{AUR|dracut-git}} をインストールしてください
   
{{Tip|dracut が動作することが確認できたのであれば、{{Pkg|mkinitcpio}} は削除することができます。}}
+
{{Tip|''dracut'' が動作することが確認できたのであれば、{{Pkg|mkinitcpio}} は[[アンインストール]]できます。}}
   
 
== 使用方法 ==
 
== 使用方法 ==
   
dracut 使い方は簡単で基本的にユーザーによる設定を必要としません。[[Dm-crypt/システム全体の暗号化#LVM_on_LUKS|LVM on LUKS]] など特殊環境でもそれあてはまります。
+
{{ic|dracut}} 使いやすく、[[dm-crypt/システム全体の暗号化#LVM on LUKS|LVM on LUKS]] のよう非標準的なセットアップでも、大抵、ユーザによる設定不要です。
   
現在動作しているカーネルの initramfs を生成するには:
+
実行中のカーネルの initramfs を生成するには:
   
# dracut /boot/initramfs-linux.img
+
# dracut --hostonly --no-hostonly-cmdline /boot/initramfs-linux.img
   
  +
フォールバック initramfs を生成するには:
{{ic|/boot/initramfs-linux.img}} は出力するイメージファイルを指定します。標準のカーネルを使っていない場合は、ファイルの名前を変更する必要があります。例えば {{Pkg|linux-lts}} カーネルの場合、出力ファイルの名前は {{ic|/boot/initramfs-linux-lts.img}} としてください。ただし、[[ブートローダー]]の設定も一緒に変更するのであればファイルの名前は好きにつけることができます。
 
   
  +
# dracut /boot/initramfs-linux-fallback.img
==== 追加フラグ ====
 
   
{{ic|--hostonly}} フラグカルホスト環境を起動するのに必要なファイルのみ含んだイメージ生成します。フラグ付けない場合はより多くのファイルを含む汎用イメージが生成れますのフラグを使うことで生成メージ容量を減らことがきま他のコンピュタでメージを使用したり別ルートファイルシステム切り替えることができなくなりす。その場合は新しいイメージの生成が必要です。
+
{{ic|/boot/initramfs-linux.img}} は出力イメファイルをします。ノーマルのカーネル以外使用して場合はファイル名の変更検討してくだ例えば、{{Pkg|linux-lts}} カーネル場合、出力名前は {{ic|/boot/initramfs-linux-lts.img}} にるべきです、しかし、[[ブトローダー]]の設定が同じファル名を使用していれば、これらのファイルに好きな名前を付けることができます。
   
  +
{{Note|
{{ic|--force}} フラグはイメージファイルが既に存在する場合に上書きします。
 
  +
* これらのコマンドで作成されたファイルには、インストールされている[[マイクロコード]]イメージがすべて埋め込まれます。
  +
* {{Bug|59841}} のため、ホストオンリーモードでは、システムで必要とされるものだけでなく、全ての Intel マイクロコードが initramfs に含まれます。[https://github.com/dracutdevs/dracut/commit/d613d88dd272cde8b69445bd69d64f99aac5b94b]
  +
}}
  +
  +
=== 追加オプション ===
  +
  +
{{ic|--force}} フラグは、イメージファイルが既に存在する場合に上書きします。
  +
  +
{{ic|--kver}} オプションは、使用するカーネルを指定します。このオプションの引数は、{{ic|/usr/lib/modules}} にあるディレクトリの名前と一致する必要があります。
   
 
{{man|8|dracut}} には他のフラグの説明が載っています。
 
{{man|8|dracut}} には他のフラグの説明が載っています。
   
== 設定 ==
+
== 詳細設定 ==
   
常に特定のフラグを使て dracut を実行したい場合、{{ic|/etc/dracut.conf.d/}} {{ic|.conf}} ファイルとして設定を保存できます。例:
+
{{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=
<nowiki>hostonly="yes"
+
hostonly="yes"
 
compress="lz4"
 
compress="lz4"
 
add_drivers+=" i915 "
 
add_drivers+=" i915 "
omit_dracutmodules+=" network iscsi "</nowiki>
+
omit_dracutmodules+=" network iscsi "
 
}}
 
}}
   
設定オプションについては {{man|5|dracut.conf}} を参照してください。各オプションの詳しい説明は {{man|8|dracut}} に存在します。
+
{{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 モジュールのリスト> "
  +
omit_dracutmodules+=" <非アクティブ化する dracut モジュールのリスト> "
  +
# ...
  +
}}
  +
  +
==== 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 カーネルイメージ]]を生成できます。
   
 
== ヒントとテクニック ==
 
== ヒントとテクニック ==
53行目: 116行目:
 
生成された initramfs イメージの情報をページャを使って表示するには:
 
生成された initramfs イメージの情報をページャを使って表示するには:
   
$ lsinitrd <path to initramfs image> | less
+
# lsinitrd ''/path/to/initramfs_or_uefi_image'' | less
   
上記のコマンドはイメージ生成時に dracut に指定された引数や dracut モジュールのリスト、含まれているファイルのリストを表示します。
+
上記のコマンドはイメージ生成時に {{ic|dracut}} に指定された引数や {{ic|dracut}} モジュールのリスト、含まれているファイルのリストを表示します。
   
 
=== 圧縮プログラムの変更 ===
 
=== 圧縮プログラムの変更 ===
61行目: 124行目:
 
使用する圧縮プログラムを変更して、生成イメージの圧縮時間を減らすことができます。
 
使用する圧縮プログラムを変更して、生成イメージの圧縮時間を減らすことができます。
   
  +
{{Warning|
{{Warning|カーネルで使用する圧縮方法のサポートがコンパイル時に組み込まれているかどうか確認してください (組み込まれていない場合、起動できなくなります)。また、圧縮プログラムのパッケージをインストールする必要があります。Arch リポジトリで提供しているカーネルでは zstd 圧縮をサポートしていないので注意してください。}}
 
  +
* 使用する圧縮アルゴリズムがカーネルでサポートされていることを確認してください。さもないと、ブートできなくなってしまいます。また、使用する圧縮プログラムのパッケージをインストールしておく必要があります。
  +
* バージョン 5.9 より前の上流の Linux カーネルは、zstd で圧縮された initramfs をサポートしていません。{{Pkg|linux-zen}} はバージョン 5.8 から zstd をサポートしています。
  +
}}
   
以下の行のどれかを dracut の[[#設定|設定]]に追加してください (2つ以上追加してはいけません):
+
以下の行のどれかを [[#詳細設定|dracut の設定ファイル]]に追加してください (2つ以上追加してはいけません):
   
  +
compress="cat"
 
compress="gzip"
 
compress="gzip"
 
compress="bzip2"
 
compress="bzip2"
71行目: 138行目:
 
compress="lzo"
 
compress="lzo"
 
compress="lz4"
 
compress="lz4"
  +
compress="zstd"
   
{{Pkg|gzip}} がデフォルトで使用される圧縮プログラムです。
+
{{Pkg|gzip}} がデフォルトで使用される圧縮プログラムです。{{ic|1=compress="cat"}} は、圧縮なしで initramfs を作成します。
   
 
公式でサポートされていない圧縮プログラムを使うこともできます:
 
公式でサポートされていない圧縮プログラムを使うこともできます:
   
compress="<program>"
+
compress="''program''"
   
 
=== カーネルのアップグレード時に新しい initramfs を生成 ===
 
=== カーネルのアップグレード時に新しい initramfs を生成 ===
   
カーネルアップグレードがあるたびに自動的に initramfs イメージを新しく生成することができます。以下はデフォルトの {{Pkg|linux}} カーネルを前提していますが、他のカーネルでも同じようにフックを追加できます。
+
カーネルアップグレードるたびに、新しい 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
+
if [[ "$line" == 'usr/lib/modules/'+([^/])'/pkgbase' ]]; then
mapfile -O ${#pkgbase[@]} -t pkgbase < "/$line"
+
read -r pkgbase < "/${line}"
kver=${line#"usr/lib/modules/"}
+
kver="${line#'usr/lib/modules/'}"
kver=${kver%"/pkgbase"}
+
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
  +
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>}}
   
スクリプトは {{ic|chmod a+x ~/.local/bin/90-dracut-linux.script}} で実行可能権限を与えてください。フラグを追加したり削除したい場合、dracut の[[#設定|設定]]に追加してください
+
スクリプトを[[実行可能属性|実行可能にする]]必要があります。フラグを追加したり削除したりしたい場合、[[#詳細設定|dracut の設定ファイル]]に追加する必要があります
   
次に [[pacman]] フックを作成します:
+
次に[[pacman フック]]を作成します:
   
{{hc|/etc/pacman.d/hooks/90-dracut-linux.hook|
+
{{hc|/etc/pacman.d/hooks/90-dracut-install.hook|<nowiki>
<nowiki>[Trigger]
+
[Trigger]
Type = File
+
Type = Path
 
Operation = Install
 
Operation = Install
 
Operation = Upgrade
 
Operation = Upgrade
115行目: 199行目:
 
Description = Updating linux initcpios (with dracut!)...
 
Description = Updating linux initcpios (with dracut!)...
 
When = PostTransaction
 
When = PostTransaction
Exec = /home/username/.local/bin/90-dracut-linux.script
+
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 がホストオンリーモードで実行されている必要があります。ホストオンリーモードはデフォルトではないようです。以下を dracut の設定ファイルに追加することで、ホストオンリーモードを有効化することができます:
:カーネルはもはや自分自身を /boot にインストールしません。代わりに、mkinitcpio フックがインストールを実行します。それによって、以前と同じ挙動を少しだけ柔軟な形で再現しています。
 
  +
:現在は dracut フックで同じような仕事をこなせるように作業していますが、今後は起動をより柔軟にして、ユーザーにより多くの選択肢が与えられるようにする予定です。Arch のアナウンスメーリングリストやウェブサイトのニュースから目を離さないでください。
 
  +
hostonly=yes
  +
  +
== トラブルシューティング ==
  +
  +
=== ハイバネート ===
  +
  +
ハイバネートからの復帰がうまくいかない場合、{{ic|resume}} モジュールをイメージに含めるように {{ic|dracut}} を設定する必要がある場合があります。以下を[[#Dracut モジュール|設定ファイルに追加する]]必要があります:
  +
  +
{{hc|/etc/dracut.conf.d/resume-from-hibernate.conf|2=
  +
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)]]
* [https://wiki.gentoo.org/wiki/Dracut Gentoo:Dracut]
+
* [[Gentoo:Dracut]]
  +
  +
{{TranslationStatus|dracut|2023-08-03|783287}}

2024年4月24日 (水) 20:16時点における最新版

関連記事

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

ユニファイドカーネルイメージ

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

ヒントとテクニック

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

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

# lsinitrd /path/to/initramfs_or_uefi_image | less

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

圧縮プログラムの変更

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

警告:
  • 使用する圧縮アルゴリズムがカーネルでサポートされていることを確認してください。さもないと、ブートできなくなってしまいます。また、使用する圧縮プログラムのパッケージをインストールしておく必要があります。
  • バージョン 5.9 より前の上流の Linux カーネルは、zstd で圧縮された initramfs をサポートしていません。linux-zen はバージョン 5.8 から zstd をサポートしています。

以下の行のどれかを 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 イメージを自動的に生成することが可能です。ここでは、デフォルトの linux カーネルについて説明しますが、他のカーネル用のフックを追加するのも簡単なはずです。

ヒント: dracut-hookAUR パッケージは以下のようなフックとスクリプトを含んでいます。EFI 実行ファイルである initramfs イメージ (つまり esp/EFI/Linux/linux-kernel-machine_id-build_id.efi) が欲しい場合は、代わりに dracut-uefi-hookAURdracut-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

Bluetooth キーボードのサポート

Dracut は、bluetooth キーボードが検出されると、自動的に bluetooth モジュールを有効化します。しかし、dracut がホストオンリーモードで実行されている必要があります。ホストオンリーモードはデフォルトではないようです。以下を dracut の設定ファイルに追加することで、ホストオンリーモードを有効化することができます:

hostonly=yes

トラブルシューティング

ハイバネート

ハイバネートからの復帰がうまくいかない場合、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_dracutmodulescrypt モジュールを追加するだけで解決します。しかし、このモジュールを追加した後もメッセージが表示され続ける場合、以下のように設定を変更する必要がある場合があります:

install_items+=" /usr/lib/ossl-modules/legacy.so "

これは、OpenSSL が whirlpool ハッシュ関数を非推奨にして、この関数を上記のライブラリに移動したせいです。Arch を使用する場合、dracut は自動的にこのライブラリを initramfs にインストールしません。

参照

翻訳ステータス: このページは en:dracut の翻訳バージョンです。最後の翻訳日は 2023-08-03 です。もし英語版に 変更 があれば、翻訳の同期を手伝うことができます。