完全加密系统的 debootstrap chroot 中的 Initramfs

Rbj*_*bjz 8 debian initramfs luks cryptsetup debootstrap

我正在编写一个脚本,从 debootstrap 创建一个完全加密的可清洗系统。它做得很好,但是出来的initramfs图像没有正确地拾取 cryptroot。使用 qemu 启动映像后,我进入了一个 busybox shell,我必须使用cryptsetup以下命令手动解锁 luks 加密:

cryptsetup luksOpen /dev/sda1 system
/scripts/local-premount/flashback
exit
Run Code Online (Sandbox Code Playgroud)

(闪回做了一些 btrfs 快照魔术来忘记每次启动时所做的更改)

在此之后,qemu 中的引导继续正常进行,然后我就能够生成一个好的initramfs映像。我将其复制到 btrfs @root.base 子卷,从那时起一切都很好。

我需要帮助弄清楚为什么 cryptsetup/cryptroot 部分没有通过以下方式在 chroot 环境中被拾取update-initramfs

echo "CRYPTSETUP=y" >> /usr/share/initramfs-tools/conf-hooks.d/cryptsetup
echo "export CRYPTSETUP=y" >> /usr/share/initramfs-tools/conf-hooks.d/cryptsetup
update-initramfs -ut
Run Code Online (Sandbox Code Playgroud)

我尝试了很多东西,我写了一个很好的 fstab 和 crypttab,甚至尝试在 grub.cfg 中显式设置 cryptdevice。参考脚本的具体版本

下面是我创建 fstab 和 crypttab 的方法:

export partuuid=$(blkid $partition | sed -re 's/.*: UUID="([^"]+)".*/\1/')
export decruuid=$(blkid /dev/mapper/$decrypted | sed -re 's/.*: UUID="([^"]+)".*/\1/')
echo "Adding flashback with uuid $partuuid"
echo "system UUID=$partuuid none luks" >> "$rootmount/etc/crypttab"
echo "UUID=$decruuid / btrfs subvol=@root.curr 0 0" >> "$rootmount/etc/fstab"
echo "UUID=$decruuid /home btrfs subvol=@home 0 0" >> "$rootmount/etc/fstab"
Run Code Online (Sandbox Code Playgroud)

原则上的问题是:如何在解压后的 debian的加密chroot 中生成功能正常的 initramfs 映像?

谢谢一堆

And*_*her 8

使用/etc/initramfs-tools/conf.d/cryptsetup在拉伸过时。

新的首选方法是"CRYPTSETUP=y"/etc/cryptsetup-initramfs/conf-hook.

在 buster 和更高版本中,这个配置参数似乎是多余的,因为默认行为似乎是在 initramfs 中配置 cryptsetup 如果安装了 initramfs-cryptsetup 包。