Booster - 快速、安全、现代的 Linux initramfs

Booster 让早期启动感觉更轻量、更快、更可靠。 它构建紧凑的 initramfs 镜像,以最小的麻烦和强大的加密启动支持,将您的 Linux 系统从固件引导至真实根文件系统。
Booster 不会打包一个庞大的通用早期用户空间,而是发现您的机器实际所需,并围绕其构建一个专注的镜像。 结果是一个精简的启动镜像,包含您的主机所需的驱动程序、解锁工具、文件系统支持和恢复路径,而无需在每次重启时携带一个“大杂烩”。
为什么选择 Booster?
Booster 围绕一个简单的承诺构建:早期启动应该快速、清晰、安全且易于操作。
亮点:
- 通过更小的镜像实现更快启动 - 快速生成精简镜像,并使早期启动专注于系统实际所需的工作。
- 让加密 Linux 体验变得轻松 - 使用密码、密钥文件、分离头、TPM2、FIDO2 安全密钥、Clevis 风格的绑定或远程 SSH 解锁来解锁 LUKS 根分区。
- 自信地使用现代安全硬件 - 支持
systemd-cryptenrollTPM2 和 FIDO2 令牌,包括通过 Booster 插件路径提供的原生 FIDO2 支持。 - 享受平静、协调的提示 - 硬件令牌、PIN 和密码流程协同工作;成功的解锁路径会取消不再需要的提示。
- 获得更流畅的 FIDO2 启动 - Booster 可以在请求 PIN 之前预检查已连接的 FIDO2 密钥,静默跳过错误的密钥,并在令牌缺失时干净地回退。
- 从任何管理位置解锁系统 - 在早期启动期间使用 SSH 来管理无头、机架安装或难以触及的加密机器。
- 避免臃肿的早期用户空间 - 主机特定的发现功能默认包含您的机器所需的内容。
- 构建灵活的救援镜像 - 通用模式为便携式安装、恢复介质和变化的硬件提供更广泛的硬件覆盖。
- 覆盖真实的存储布局 - 处理 ext4、Btrfs、ZFS、LVM、mdraid、GPT 自动发现、休眠恢复设备以及多个 LUKS 映射。
- 自信地检查和调试 - 在信任其启动之前,使用内置命令列出、读取和解包镜像。
Booster 非常适合加密笔记本电脑、开发者工作站、需要远程恢复功能的服务器、极简 Linux 系统,以及那些在配置多年后仍应保持易于理解的启动设置。
功能概览
仿佛内置的加密体验
Booster 将全盘加密视为一流的工作流,而非附加组件。
它可以从内核参数、/etc/crypttab、GPT 自动发现、指向 LUKS 容器的直接 root= 引用、密钥文件、分离的头部以及硬件支持的令牌中解锁 LUKS 设备。
支持的解锁方式包括:
- 带有谨慎提示处理的纯密码解锁。
- 用于相关加密卷的共享密码缓存。
- 嵌入在 initramfs 中或存储在单独设备上的密钥文件。
- 嵌入在镜像中、从原始块设备读取或从单独文件系统加载的分离 LUKS 头部。
systemd-cryptenrollTPM2 和 FIDO2 令牌。- 用于 TPM2、Tang 和其他支持策略的 Clevis 风格绑定。
- 用于无法物理接触系统的基于 SSH 的远程密码解锁。
没有粗糙边缘的硬件令牌
Booster 的令牌编排旨在让加密启动感觉更加精致。 非交互式令牌可以在后台竞争,基于 PIN 的令牌按确定性顺序提示,而常规密码提示作为回退出现,而不是永远阻塞整个启动过程。
最近的 FIDO2 改进使体验更加流畅:
- 可通过
enable_fido2: true启用原生 FIDO2 支持。 - 包含
fido2-device=的crypttab条目可促使 Booster 自动打包 FIDO2 插件。 - Booster 可在请求 PIN 之前,检查已连接的 FIDO2 密钥是否确实拥有该凭据。
- 缺失令牌提示会被延迟,以便快速 TPM2、Clevis 或其他令牌解锁能够完成,而不会产生不必要的噪音。
- 提交空 PIN 会跳过该令牌并继续到下一个解锁路径。
与您的机器匹配的小型镜像
默认情况下,Booster 会构建一个特定于主机的镜像。 它会检查当前系统,包含启动该系统所需的模块和工具,并排除不必要的组件。 这使得镜像更易于审计,生成速度更快,并且在启动期间执行速度更快。
当您需要更广泛的镜像时,--universal 包含更广泛的模块集,用于救援场景、便携式介质或硬件可能变化的系统。
用户实际使用的存储布局
Booster 支持实用的真实世界启动布局,包括:
- GPT 可自动发现的根分区。
- 位于 LUKS、LVM、mdraid、Btrfs、ZFS、NVMe、USB、MMC 和 eMMC 上的根文件系统。
- Btrfs 子卷和多设备 Btrfs 配置。
- 休眠恢复设备。
- 通过
UUID=、LABEL=、PARTUUID=、PARTLABEL=、HWPATH=、WWID=或/dev/...进行设备引用。 - 来自内核命令行或
/etc/crypttab的多个加密映射。
更好的早期启动可见性
当出现问题时,Booster 提供了有用的方式来查看发生了什么。
使用 booster.log=debug,console 获取详细的启动日志,添加 busybox 以进入紧急 shell,或启用网络支持以从无法启动的机器中检索日志。
Booster 还包含镜像检查命令,以便您在重启前验证所构建的内容:
booster ls /boot/booster-linux.img
booster cat /boot/booster-linux.img /init
booster unpack /boot/booster-linux.img /tmp/booster-image
安装
Arch Linux
安装官方软件包:
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
Void Linux
使用以下命令安装 Booster:
xbps-install -S booster
然后为已安装的 kernel 重新生成 initramfs:
xbps-reconfigure -f linux
Alpine Linux
使用以下命令安装 Booster:
apk add booster
然后阅读 /usr/share/doc/booster/README.alpine 以获取特定于设置的引导加载程序说明。
手动构建
您也可以直接构建镜像:
booster build /boot/booster-linux.img
对于具有更广泛硬件支持的更便携镜像:
booster build --universal /boot/booster-linux.img
创建镜像后,将引导加载程序指向该镜像。 有关完整的配置详情,请参阅 Booster 手册页。
快速入门
创建主机特定的镜像:
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 时,生成统一内核镜像:
/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 手册页。 它涵盖:
/etc/booster.yaml选项。- 内核命令行参数。
- LUKS、FIDO2、TPM2、Clevis、密钥文件以及分离头部的设置。
/etc/crypttab集成。- 通过 SSH 进行远程解锁。
- GPT 根分区自动发现。
- 统一内核镜像生成。
- 调试与恢复。
类似项目
Booster 与 mkinitcpio 和 dracut 处于同一问题领域。 其重点是一个快速、紧凑、基于 Go 的 initramfs 生成器,具有强大的加密启动易用性和自动主机发现功能。
从源码构建
该项目有三个主要部分:
init- 在启动期间运行的早期用户空间程序。generator- 构建 initramfs 镜像的工具。tests- 针对生成镜像的基于 QEMU 的集成测试。
使用标准 Go 工具链进行构建:
go build ./...
运行单元测试:
go test ./generator ./init
运行完整的测试套件:
go test ./...
./tests 软件包包含 QEMU 集成测试,并要求主机已安装所需的启动和虚拟化工具。
致谢
本项目的开发始于 Twitter 的黑客周。 非常感谢 Twitter 对开源开发的支持,特别感谢 Ian Brown。
Booster 的架构受到 Michael Stapelberg 的 distri 的启发,初始版本借鉴了 distri 的 initramfs 生成器的许多想法。
许可证
参见 LICENSE。