「Booster」の版間の差分
(→Systemd スタイル バインディング: 情報を更新) |
(序文を更新) |
||
(同じ利用者による、間の7版が非表示) | |||
14行目: | 14行目: | ||
Booster は [https://michael.stapelberg.ch/posts/2020-01-21-initramfs-from-scratch-golang/ distri プロジェクト] に着想を得ており、小型で高速な init イメージを生成することを目指しています。 |
Booster は [https://michael.stapelberg.ch/posts/2020-01-21-initramfs-from-scratch-golang/ distri プロジェクト] に着想を得ており、小型で高速な init イメージを生成することを目指しています。 |
||
+ | Booster は、initramfs イメージの生成を担当する {{ic|/usr/bin/booster}} ユーザー空間ツールを提供します。生成されたイメージは、デフォルトでは {{ic|/boot/}} にあります。 |
||
− | Booster は以下の2つのコンポーネントから構成されています: |
||
− | |||
− | * Initramfs ジェネレータ {{ic|/usr/bin/booster}} ユーザー空間ツール。initramfs イメージの生成を行います。 |
||
− | * 生成されたイメージは通常 {{ic|/boot/}} に配置され、システムブートローダーによって Linux OS を起動するのに使われます。 |
||
== インストール == |
== インストール == |
||
33行目: | 30行目: | ||
== 設定 == |
== 設定 == |
||
− | Booster ジェネレータの設定は {{ic|/etc/booster.yaml}} にあります。設定ファイルがない場合は、デフォルトの設定 |
+ | Booster ジェネレータの設定は {{ic|/etc/booster.yaml}} にあります。設定ファイルがない場合は、デフォルトの設定(ホスト固有の画像、ネットワークなし)が使用されます。 |
設定ファイルを使用することで、デフォルトの動作を上書きすることができます。詳しくは {{man|1|booster|CONFIG FILE}} を参照してください。 |
設定ファイルを使用することで、デフォルトの動作を上書きすることができます。詳しくは {{man|1|booster|CONFIG FILE}} を参照してください。 |
||
− | === |
+ | === モジュールの早期ロード === |
+ | いくつかのカーネルモジュールは、initramfs の段階で早期にロードされる必要がある場合があります。 |
||
− | ブースターの設定が終わったら、{{ic|/boot}} にあるブースターイメージを更新する必要があります。イメージは {{ic|booster -output booster-foo.img}} で手動で生成するか、インストールされている全てのカーネルを繰り返し、それぞれのブースターイメージを生成する便利なスクリプト {{ic|/usr/lib/booster/regenerate_images}} を利用して生成します。 |
||
+ | 例えば、{{ic|nvidia}} モジュールをロードする必要がある場合、以下の設定を使用します: |
||
− | == ブートローダーの設定 == |
||
+ | {{hc|/etc/booster.yaml| |
||
− | イメージを生成したら、次に[[Arch_ブートプロセス#ブートローダー|ブートローダー]]を設定します。 |
||
+ | modules_force_load: nvidia |
||
− | |||
− | === rEFInd === |
||
− | |||
− | すでに [[rEFInd# rEFInd によってカーネルが自動で検出される場合|自動検出]] に依存した設定になっている場合、追加の設定変更は必要ありません。[[rEFInd]] は [https://sourceforge.net/p/refind/code/ci/778878f7f30f68b7fa0282074e5dd8fc5894a212/ initrd files named booster*] をサポートしています。 |
||
− | |||
− | initramfs のパスを [[rEFInd#手動でブートエントリを記述|refind.conf]] や [[rEFInd#Manual boot stanzas|manual boot stanzas]] で手動で指定する場合、正しいファイル名を使っているか確認してください。例えば {{ic|'''booster''-linux.img}} の代わりに {{ic|'''initramfs''-linux.img}} とします。 |
||
− | |||
− | === systemd-boot === |
||
− | |||
− | 新しい initramfs イメージを [[systemd-boot]] で使うには以下のようにブートローダーエントリを作成します: |
||
− | |||
− | {{hc|/boot/loader/entries/booster.conf|2= |
||
− | title Arch Linux with booster |
||
− | linux /vmlinuz-linux |
||
− | initrd /booster-linux.img |
||
− | options root=UUID=08f83949-bcbb-47bb-bc17-089aaa59e17e rw |
||
}} |
}} |
||
+ | そして、[[Booster#booster イメージの再生成|booster イメージの再生成]] を実行します。 |
||
− | 上記でルートファイルシステムは {{ic|1=UUID=08f83949-bcbb-47bb-bc17-089aaa59e17e}} と指定しています。{{ic|blkid /dev/''ROOTDEVICE''}} を実行して、あなたのデバイスの UUID を確認してください。 |
||
− | == 暗号 |
+ | === 暗号化 === |
− | Booster は LUKS ベースの |
+ | Booster は、[[Clevis]] のような [[LUKS]] ベースのフルディスク暗号化をすぐに使用できるようにサポートしています。ジェネレーターには追加の設定は必要ありません。ただし、initramfs の場合は、ルートが存在する LUKS パーティションに関する情報を追加する必要があります。これは、{{ic|1=rd.luks.uuid=''LUKSUUID''}} または {{ic|1=rd.luks.name=''LUKSUUID''=''LUKSNAME''}} [[カーネルパラメータ]] のいずれかを使用して行われます。{{ic|''LUKSUUID''}} は、Booster によってロックを解除する必要があり、暗号化された LUKS パーティションの [[UUID]] を指定します。{{man|1|booster|UUID パラメータ}} マニュアルでは、UUID に引用符を含めないことを推奨しています。{{ic|''LUKSNAME''}} は、ロック解除されたパーティションの名前を指定します ({{ic|/dev/mapper/''LUKSNAME''}} のように) 関連オプションについては、{{man|1|booster|BOOT TIME KERNEL PARAMETERS}} を参照してください。 |
− | イメージの再 |
+ | イメージの再構築は必要ありません。ブートローダーの設定が完了したら、コンピューターを再起動します。その後、起動時に暗号化されたルートパーティションのパスワードを求める {{ic|Enter passphrase for ''YOURROOT'':}} プロンプトが表示されます。 |
− | ==== |
+ | ==== systemd スタイルのバインディング ==== |
− | Booster は |
+ | Booster はパーティションもサポートします [https://0pointer.net/blog/unlocking-luks2-volumes-with-tpm2-fido2-pkcs11-security-hardware-on-systemd-248.html bound with systemd] {{ic|systemd-fido2}} や {{ic|systemd-tpm2}} など。 |
− | systemd-fido2 |
+ | 'systemd-fido2' を使用する場合は、{{Pkg|libfido2}} パッケージをインストールし、次の設定を使用してイメージに fido2-assert を追加してください。 |
{{hc|/etc/booster.yaml| |
{{hc|/etc/booster.yaml| |
||
80行目: | 62行目: | ||
}} |
}} |
||
− | [[ |
+ | [[#booster イメージの再生成|booster イメージの再生成します]] Booster は起動中にこの設定を検出し、現在の YubiKey を使用してドライブのロックを解除します。 |
− | {{Note|コミット 1b65577 より前に、Booster が FIDO2 キーを使用して暗号化されたパーティションのロックを解除するのに十分な早さで必要なカーネルモジュールの一部をロードできない可能性があることが報告されています。この場合、強制的にロードされる以下のモジュールを追加します。 |
+ | {{Note|コミット 1b65577 より前に、Booster が FIDO2 キーを使用して暗号化されたパーティションのロックを解除するのに十分な早さで必要なカーネルモジュールの一部をロードできない可能性があることが報告されています。この場合、強制的にロードされる以下のモジュールを追加します。}} |
{{hc|/etc/booster.yaml| |
{{hc|/etc/booster.yaml| |
||
89行目: | 71行目: | ||
}} |
}} |
||
+ | === booster イメージの再生成 === |
||
− | == デバッグ == |
||
+ | Booster の設定が完了したら、{{ic|/boot}} にある Booster images を更新する必要があります。イメージは、{{ic|booster build booster-foo.img}} を使用して手動で生成するか、インストールされているすべてのカーネルを反復処理してカーネルごとに Booster イメージを生成する便利なスクリプト {{ic|/usr/lib/booster/regenerate_images}} もあります。 |
||
− | Booster が上手く動かない場合、デバッグ出力を有効にすることで何が起こっているか情報を得ることができます: |
||
+ | == ブートローダーの設定 == |
||
− | * ジェネレータのデバッグは {{ic|-debug}} コマンドラインフラグを使ってください: {{ic|booster -debug}}。 |
||
− | * init のデバッグは {{ic|1=booster.debug=1}} [[カーネルパラメータ]]が存在します。 |
||
+ | イメージを生成したら、次に[[Arch_ブートプロセス#ブートローダー|ブートローダー]]を設定します。 |
||
− | Booster に問題があると思われる場合は https://github.com/anatol/booster/issues でチケットを作成してください。 |
||
− | == |
+ | === rEFInd === |
+ | すでに [[rEFInd# rEFInd によってカーネルが自動で検出される場合|自動検出]] に依存した設定になっている場合、追加の設定変更は必要ありません。[[rEFInd]] は [https://sourceforge.net/p/refind/code/ci/778878f7f30f68b7fa0282074e5dd8fc5894a212/ initrd files named booster*] をサポートしています。 |
||
− | === モジュールの早期ロード === |
||
+ | initramfs のパスを [[rEFInd#手動でブートエントリを記述|refind.conf]] や [[rEFInd#Manual boot stanzas|manual boot stanzas]] で手動で指定する場合、正しいファイル名を使っているか確認してください。例えば {{ic|'''booster''-linux.img}} の代わりに {{ic|'''initramfs''-linux.img}} とします。 |
||
− | いくつかのカーネルモジュールは、initramfs の段階で早期にロードされる必要がある場合があります。 |
||
+ | === systemd-boot === |
||
− | 例えば、{{ic|nvidia}} モジュールをロードする必要がある場合、以下の設定を使用します。 |
||
+ | 新しい initramfs イメージを [[systemd-boot]] で使うには以下のようにブートローダーエントリを作成します: |
||
− | {{hc|/etc/booster.yaml| |
||
+ | |||
− | modules_force_load: nvidia |
||
+ | {{hc|/boot/loader/entries/booster.conf|2= |
||
+ | title Arch Linux with booster |
||
+ | linux /vmlinuz-linux |
||
+ | initrd /booster-linux.img |
||
+ | options root=UUID=08f83949-bcbb-47bb-bc17-089aaa59e17e rw |
||
}} |
}} |
||
+ | 上記でルートファイルシステムは {{ic|1=UUID=08f83949-bcbb-47bb-bc17-089aaa59e17e}} と指定しています。{{ic|blkid /dev/''ROOTDEVICE''}} を実行して、あなたのデバイスの UUID を確認してください。 |
||
− | そして、[[Booster#ブースターイメージの再生成|ブースターイメージの再生成]] を実行します。 |
||
+ | |||
+ | == トラブルシューティング == |
||
+ | |||
+ | === デバッグ === |
||
+ | |||
+ | Booster が上手く動かない場合、デバッグ出力を有効にすることで何が起こっているか情報を得ることができます: |
||
+ | |||
+ | * ジェネレータのデバッグは {{ic|-debug}} コマンドラインフラグを使ってください: {{ic|booster -debug}} |
||
+ | * init のデバッグは {{ic|1=booster.debug=1}} [[カーネルパラメータ]] が存在します。 |
||
+ | |||
+ | Booster 自体に問題があると思われる場合は、[https://github.com/anatol/booster/issues GitHub でチケットを作成してください] |
||
=== Booster ジェネレータが "too many open files" エラーで失敗する === |
=== Booster ジェネレータが "too many open files" エラーで失敗する === |
2024年3月6日 (水) 18:31時点における最新版
Booster は高速な initramfs ジェネレータで、mkinitcpio や dracut と似ています。 Booster は distri プロジェクト に着想を得ており、小型で高速な init イメージを生成することを目指しています。
Booster は、initramfs イメージの生成を担当する /usr/bin/booster
ユーザー空間ツールを提供します。生成されたイメージは、デフォルトでは /boot/
にあります。
目次
インストール
booster-gitAUR パッケージをインストールしてください。パッケージのインストールフックによって initramfs イメージが生成されます (インストールされているカーネル (例: linux, linux-lts) ごとにひとつずつ)。イメージは /boot
ディレクトリに配置されます:
$ ls -lh /boot/booster*
-rwxr-xr-x 1 root root 4.0M Dec 16 16:20 /boot/booster-linux.img
また、イメージは手動で生成することもできます:
$ booster -output mybooster.img
設定
Booster ジェネレータの設定は /etc/booster.yaml
にあります。設定ファイルがない場合は、デフォルトの設定(ホスト固有の画像、ネットワークなし)が使用されます。
設定ファイルを使用することで、デフォルトの動作を上書きすることができます。詳しくは booster(1) § CONFIG FILE を参照してください。
モジュールの早期ロード
いくつかのカーネルモジュールは、initramfs の段階で早期にロードされる必要がある場合があります。
例えば、nvidia
モジュールをロードする必要がある場合、以下の設定を使用します:
/etc/booster.yaml
modules_force_load: nvidia
そして、booster イメージの再生成 を実行します。
暗号化
Booster は、Clevis のような LUKS ベースのフルディスク暗号化をすぐに使用できるようにサポートしています。ジェネレーターには追加の設定は必要ありません。ただし、initramfs の場合は、ルートが存在する LUKS パーティションに関する情報を追加する必要があります。これは、rd.luks.uuid=LUKSUUID
または rd.luks.name=LUKSUUID=LUKSNAME
カーネルパラメータ のいずれかを使用して行われます。LUKSUUID
は、Booster によってロックを解除する必要があり、暗号化された LUKS パーティションの UUID を指定します。booster(1) § UUID パラメータ マニュアルでは、UUID に引用符を含めないことを推奨しています。LUKSNAME
は、ロック解除されたパーティションの名前を指定します (/dev/mapper/LUKSNAME
のように) 関連オプションについては、booster(1) § BOOT TIME KERNEL PARAMETERS を参照してください。
イメージの再構築は必要ありません。ブートローダーの設定が完了したら、コンピューターを再起動します。その後、起動時に暗号化されたルートパーティションのパスワードを求める Enter passphrase for YOURROOT:
プロンプトが表示されます。
systemd スタイルのバインディング
Booster はパーティションもサポートします bound with systemd systemd-fido2
や systemd-tpm2
など。
'systemd-fido2' を使用する場合は、libfido2 パッケージをインストールし、次の設定を使用してイメージに fido2-assert を追加してください。
/etc/booster.yaml
extra_files: fido2-assert
booster イメージの再生成します Booster は起動中にこの設定を検出し、現在の YubiKey を使用してドライブのロックを解除します。
/etc/booster.yaml
modules_force_load: usbhid,hid_sensor_hub extra_files: fido2-assert
booster イメージの再生成
Booster の設定が完了したら、/boot
にある Booster images を更新する必要があります。イメージは、booster build booster-foo.img
を使用して手動で生成するか、インストールされているすべてのカーネルを反復処理してカーネルごとに Booster イメージを生成する便利なスクリプト /usr/lib/booster/regenerate_images
もあります。
ブートローダーの設定
イメージを生成したら、次にブートローダーを設定します。
rEFInd
すでに 自動検出 に依存した設定になっている場合、追加の設定変更は必要ありません。rEFInd は initrd files named booster* をサポートしています。
initramfs のパスを refind.conf や manual boot stanzas で手動で指定する場合、正しいファイル名を使っているか確認してください。例えば booster-linux.img
の代わりに initramfs-linux.img
とします。
systemd-boot
新しい initramfs イメージを systemd-boot で使うには以下のようにブートローダーエントリを作成します:
/boot/loader/entries/booster.conf
title Arch Linux with booster linux /vmlinuz-linux initrd /booster-linux.img options root=UUID=08f83949-bcbb-47bb-bc17-089aaa59e17e rw
上記でルートファイルシステムは UUID=08f83949-bcbb-47bb-bc17-089aaa59e17e
と指定しています。blkid /dev/ROOTDEVICE
を実行して、あなたのデバイスの UUID を確認してください。
トラブルシューティング
デバッグ
Booster が上手く動かない場合、デバッグ出力を有効にすることで何が起こっているか情報を得ることができます:
- ジェネレータのデバッグは
-debug
コマンドラインフラグを使ってください:booster -debug
- init のデバッグは
booster.debug=1
カーネルパラメータ が存在します。
Booster 自体に問題があると思われる場合は、GitHub でチケットを作成してください
Booster ジェネレータが "too many open files" エラーで失敗する
もし strip
と universal
を有効にしていて /usr/lib/modules/glue_helper.ko: pipe2: too many open files
というエラーが出た場合は、プロセスごとのオープンファイルの上限を上げる必要があります。limits.conf#nofile を参照してください。