Debian

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

  • December 21, 2020

我正在編寫一個腳本,以從 debootstrap 創建一個完全加密的可清洗系統。它做了一些好事,但是initramfs出來的圖像並沒有正確地提取 cryptroot。使用 qemu 啟動映像後,我進入了一個 busybox 外殼,我必須使用以下命令手動解鎖 luks 加密cryptsetup

cryptsetup luksOpen /dev/sda1 system
/scripts/local-premount/flashback
exit

(閃回做了一些 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

我嘗試了很多東西,我寫了一個很好的 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"

原則上的問題是:如何在debootstrapped debian的加密chroot 中生成功能正常的 initramfs 映像?

謝謝一堆

使用/etc/initramfs-tools/conf.d/cryptsetup在拉伸中被棄用。

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

在 buster 及更高版本中,此配置參數似乎是多餘的,因為預設行為似乎是在 initramfs 中配置 cryptsetup IFF 安裝了 initramfs-cryptsetup 包。

這將始終有效,即使是空的 crypttab:

echo 'export CRYPTSETUP=y' > /etc/initramfs-tools/conf.d/cryptsetup

或者,您可以將其添加到 /etc/environment:

CRYPTSETUP=y

引用自:https://unix.stackexchange.com/questions/267182