「Dracut」の版間の差分
(→詳細設定: 同期 & 訳を修正) |
(→参照: 同期) |
||
| 257行目: | 257行目: | ||
* [[Wikipedia:dracut (software)]] |
* [[Wikipedia:dracut (software)]] |
||
| − | * [ |
+ | * [[Gentoo:Dracut]] |
2023年8月3日 (木) 16:56時点における版
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 /boot/initramfs-linux.img
フォールバック 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) には他のフラグの説明が載っています。
詳細設定
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 quietが設定されている場合でも情報を出力する:rd.info
Unified カーネルイメージ
dracut は、--uefi コマンドラインオプションまたは uefi="yes" 設定オプションを使用して Unified カーネルイメージを生成できます。
ヒントとテクニック
生成されたイメージの情報を表示
生成された initramfs イメージの情報をページャを使って表示するには:
$ lsinitrd <path to initramfs image> | less
上記のコマンドはイメージ生成時に dracut に指定された引数や dracut モジュールのリスト、含まれているファイルのリストを表示します。
圧縮プログラムの変更
使用する圧縮プログラムを変更して、生成イメージの圧縮時間を減らすことができます。
以下の行のどれかを 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 カーネルについて説明しますが、他のカーネル用のフックを追加するのも簡単でしょう。
カーネルバージョンを調べるコマンドはやや複雑なので、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 のためです