
高速で安全なinitramfsジェネレーター

Boosterは、初期ブートをより軽快に、より高速に、より信頼できるものにします。 コンパクトなinitramfsイメージを構築し、Linuxシステムをファームウェアから実際のルートファイルシステムへと、手間を最小限に抑えつつ強力な暗号化ブートサポートとともに移行させます。
大規模で汎用的な初期ユーザースペースを詰め込む代わりに、Boosterはマシンが実際に必要とするものを検出し、それに合わせた焦点を絞ったイメージを構築します。 その結果、ドライバー、アンロックツール、ファイルシステムサポート、リカバリーパスなど、ホストが必要とするものを備えつつ、毎回の再起動に不要なものを一切持ち込まない、無駄のないブートイメージが得られます。
Boosterは、シンプルな約束を中心に構築されています。それは、初期ブートは迅速で、明確で、安全で、そして快適に操作できるべきだということです。
ハイライト:
systemd-cryptenrollのTPM2およびFIDO2トークンをサポートし、Boosterのプラグインパスを通じたネイティブFIDO2サポートも含みます。Boosterは、暗号化されたラップトップ、開発者ワークステーション、リモートリカバリーが必要なサーバー、最小限のLinuxシステム、そして設定から何年経っても理解しやすい状態を保つべきブートセットアップに最適です。
Boosterは、フルディスク暗号化をアドオンではなく第一級のワークフローとして扱います。
カーネルパラメーター、/etc/crypttab、GPT自動検出、LUKSコンテナへの直接のroot=参照、キーファイル、デタッチドヘッダー、ハードウェアベースのトークンからLUKSデバイスをアンロックできます。
サポートされるアンロック方式には以下が含まれます:
systemd-cryptenrollのTPM2およびFIDO2トークン。Boosterのトークンオーケストレーションは、暗号化ブートを洗練されたものに感じさせるように設計されています。 非対話型トークンはバックグラウンドで競合でき、PINベースのトークンは決定論的な順序でプロンプトされ、通常のパスフレーズプロンプトはブート全体を永遠にブロックするのではなくフォールバックとして表示されます。
最近のFIDO2の改善により、体験はよりスムーズになっています:
enable_fido2: trueで有効にできます。fido2-device=を含むcrypttabエントリにより、BoosterはFIDO2プラグインを自動的にバンドルできます。デフォルトでは、Boosterはホスト固有のイメージを構築します。 現在のシステムを調べ、それをブートするために必要なモジュールとツールを含め、不要な部分を省きます。 これにより、イメージは監査しやすく、生成が速く、ブート中の実行も速くなります。
より広範なイメージが必要な場合、--universalはレスキューシナリオ、ポータブルメディア、またはハードウェアが変化する可能性のあるシステム向けに、より広いモジュールセットを含めます。
Boosterは、実用的な実世界のブートレイアウトをサポートします:
UUID=、LABEL=、PARTUUID=、PARTLABEL=、HWPATH=、WWID=、または/dev/...によるデバイス参照。/etc/crypttabからの複数の暗号化マッピング。何か問題が発生したとき、Boosterは何が起きたかを確認するための有用な方法を提供します。
詳細なブートログにはbooster.log=debug,consoleを使用し、緊急シェルにはbusyboxを追加し、起動できないマシンからログを取得するにはネットワークサポートを有効にします。
Boosterにはイメージ検査コマンドも含まれているため、再起動前に何が構築されたかを確認できます:
booster ls /boot/booster-linux.img
booster cat /boot/booster-linux.img /init
booster unpack /boot/booster-linux.img /tmp/booster-image
公式パッケージをインストールします:
pacman -S booster
このパッケージは/boot/にBoosterイメージを作成します:
$ ls -lh /boot/booster-*.img
-rwxr-xr-x 1 root root 3.9M Dec 10 20:51 /boot/booster-linux.img
Boosterをインストールします:
xbps-install -S booster
次に、既にインストールされているカーネル用にinitramfsを再生成します:
xbps-reconfigure -f linux
Boosterをインストールします:
apk add booster
次に、セットアップ固有のブートローダー手順について/usr/share/doc/booster/README.alpineを読んでください。
BoosterはFedoraのリポジトリにはありません。チェックアウトからRPMをビルドします:
dnf install rpm-build golang gcc git-core libfido2-devel rubygem-ronn-ng systemd-rpm-macros
./packaging/fedora/createpkg.sh
dnf install ~/rpmbuild/RPMS/x86_64/booster-*.rpm
次に、カーネル更新時にイメージが再ビルドされるよう、/etc/kernel/install.confでジェネレーターとしてBoosterを選択します:
initrd_generator=booster
イメージを直接ビルドすることもできます:
booster build /boot/booster-linux.img
より広範なハードウェアセットを備えた、よりポータブルなイメージの場合:
booster build --universal /boot/booster-linux.img
イメージを作成したら、ブートローダーをそれに向けます。 完全な設定の詳細については、Booster manpageを参照してください。
ホスト固有のイメージを作成します:
booster build booster.img
特定のカーネル用のイメージを作成します:
booster build --kernel-version 6.8.9-arch1-1 /boot/booster-linux.img
生成されたイメージを検査します:
booster ls /boot/booster-linux.img
/etc/booster.yamlを変更した後、パッケージ化されたイメージを再生成します:
/usr/lib/booster/regenerate_images
ディストリビューションがsystemd-ukifyを提供している場合、Unified Kernel Imageを生成します:
/usr/lib/booster/regenerate_uki build /boot/EFI/Linux
Boosterは意図的に設定が少なくて済むようになっています。 シンプルな暗号化ラップトップでは、多くの場合、大きな設定ファイルはまったく必要ありません。 ブートパスが必要とする機能だけを追加してください:
compression: zstd
vconsole: true
enable_fido2: true
enable_lvm: true
enable_mdraid: true
SSH経由のリモートアンロックの場合:
network:
dhcp: on
ssh_host_key: /etc/booster/ssh_host_ed25519_key
ssh_authorized_keys: /etc/booster/authorized_keys
ssh_listen: :22
複数のハードウェアアンロック方式が登録されている場合の、よりスムーズなトークン順序付け:
serialize_tokens:
enabled: true
clevis_timeout: 45s
tpm2_timeout: 15s
fido2_timeout: 30s
Plymouthスプラッシュサポートの場合:
enable_plymouth: true
modules_force_load: amdgpu
カーネルコマンドラインでquiet splashを使用し、グラフィカルスプラッシュが必要な場合はbooster.log=consoleを避けてください。
完全なユーザードキュメントはBooster manpageにあります。 以下をカバーしています:
/etc/booster.yamlオプション。/etc/crypttab統合。Boosterはmkinitcpioやdracutと同じ問題領域にあります。 その焦点は、強力な暗号化ブートの使いやすさと自動ホスト検出を備えた、高速でコンパクトなGoベースのinitramfsジェネレーターです。
このプロジェクトには3つの主要な部分があります:
init - ブート中に実行される初期ユーザースペースプログラム。generator - initramfsイメージをビルドするツール。tests - 生成されたイメージ用のQEMUベースの統合テスト。標準のGoツールでビルドします:
go build ./...
ユニットテストを実行します:
go test ./generator ./init
完全なテストスイートを実行します:
go test ./...
./testsパッケージにはQEMU統合テストが含まれており、ホストに必要なブートおよび仮想化ツールがインストールされている必要があります。これにはqemu-imgが含まれますが、一部のディストリビューションではエミュレーターとは別にパッケージ化されています。
テストアセットをビルドし、必要なツールを一覧表示します:
go test ./tests -bootstrap -timeout=0
新しいテストは、可能な場合はt.Parallel()を呼び出すことが求められます。通常の実行では依然として
一度に1つのテストですが、-parallel Nは複数のVMを同時に起動し、参加できないテストは
失敗するのではなく静かに実時間を消費するため、その理由を記した注記の方が欠落した呼び出しよりも有用です。
実際に同時に実行されるVMの数は、ホストが提供できる能力によって上限が決まり、そのメモリとコアから導出されます。-vm.smp、-vm.mem、-vm.maxはゲストサイズとその上限を上書きします。
このプロジェクトの作業はTwitterのハックウィーク中に始まりました。 オープンソース開発を支援してくれたTwitterに多大な感謝を、そしてIan Brownに特別な感謝を。
BoosterのアーキテクチャはMichael Stapelbergのdistriに触発され、初期バージョンはdistriのinitramfsジェネレーターから多くのアイデアを借用しました。
LICENSEを参照してください。