
Booster 让早期启动感觉更轻量、更快速、更可靠。 它构建紧凑的 initramfs 镜像,以最小的麻烦和强大的加密启动支持,将你的 Linux 系统从固件推进到真正的根文件系统。
Booster 不是打包一个庞大的通用早期用户空间,而是发现你的机器实际需要什么,并围绕它构建一个专注的镜像。 结果是一个精简的启动镜像,包含你的主机所需的驱动程序、解锁工具、文件系统支持和恢复路径,而不会在每次重启时都携带一大堆无关内容。
Booster 围绕一个简单的承诺构建:早期启动应该快速、清晰、安全,并且操作起来令人愉快。
亮点:
systemd-cryptenroll TPM2 和 FIDO2 令牌,包括通过 Booster 的插件路径提供原生 FIDO2 支持。Booster 非常适合加密笔记本电脑、开发者工作站、具有远程恢复需求的服务器、最小化 Linux 系统,以及在你配置多年后仍应保持可理解的启动设置。
Booster 将全盘加密视为一等工作流,而不是附加功能。
它可以从内核参数、/etc/crypttab、GPT 自动发现、直接 root= 引用 LUKS 容器、密钥文件、分离头和硬件支持的令牌解锁 LUKS 设备。
支持的解锁方式包括:
systemd-cryptenroll TPM2 和 FIDO2 令牌。Booster 的令牌编排旨在让加密启动感觉精致。 非交互式令牌可以在后台竞争,基于 PIN 的令牌按确定性顺序提示,常规密码短语提示作为回退出现,而不是永远阻塞整个启动。
最近的 FIDO2 改进使体验更顺畅:
enable_fido2: true 启用原生 FIDO2 支持。fido2-device= 的 crypttab 条目可以使 Booster 自动捆绑 FIDO2 插件。默认情况下,Booster 构建主机特定的镜像。 它查看当前系统,包含启动它所需的模块和工具,并省略不必要的部分。 这使镜像更易于审计、生成更快,并在启动期间执行更快。
当你需要更广泛的镜像时,--universal 包含更广泛的模块集,用于救援场景、便携介质或硬件可能变化的系统。
Booster 支持实用的真实世界启动布局,包括:
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
安装官方软件包:
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 手册页。
创建主机特定的镜像:
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 选项。/etc/crypttab 集成。Booster 与 mkinitcpio 和 dracut 处于相同的问题空间。 它的重点是一个快速、紧凑、基于 Go 的 initramfs 生成器,具有强大的加密启动人体工程学和自动主机发现。
该项目有三个主要部分:
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()。普通运行仍然
一次一个测试,但 -parallel N 会同时启动多个 VM,而一个
无法加入的测试会悄悄消耗实际时间而不是失败,所以说明原因的注释比缺失的调用更有用。
实际同时运行多少个 VM 受主机所能提供的限制,这由其内存和核心数决定。-vm.smp、-vm.mem 和 -vm.max 覆盖客户机大小和该上限。
该项目的工作始于 Twitter 的 hack week。 非常感谢 Twitter 对开源开发的支持,特别感谢 Ian Brown。
Booster 的架构受到 Michael Stapelberg 的 distri 的启发,初始版本借鉴了 distri 的 initramfs 生成器的许多想法。
参见 LICENSE。