如何在现有 LUKS 容器上安装 Debian
LUKS(Linux 统一密钥设置)是基于 Linux 的系统上使用的事实上的标准加密方法。虽然 Debian 安装程序完全能够创建 LUKS 容器,但它缺乏识别并因此重用现有容器的能力。在本文中,我们将了解如何使用“DVD1”安装程序并在“高级”模式下运行它来解决此问题。
在本教程中您将学习:
如何在“高级模式”下安装 Debian
如何加载解锁现有 LUKS 设备所需的安装程序附加模块
如何在现有 LUKS 容器上执行安装
如何在新安装的系统的crypttab文件中添加条目并重新生成其initramfs
如何在现有 LUKS 容器上安装 Debian
使用的软件要求和约定
问题:重新使用现有的 LUKS 容器
正如我们已经说过的,Debian 安装程序完全能够在 LUKS 容器上创建和安装发行版(一种典型的设置是 LUKS 上的 LVM),但是它目前无法识别和打开已经存在的 一;为什么我们需要这个功能?例如,假设我们已经手动创建了一个 LUKS 容器,其中包含一些无法从发行版安装程序中进行微调的加密设置,或者假设我们在容器内有一些我们不想销毁的逻辑卷(也许它包含一些数据);通过使用安装程序标准过程,我们将被迫创建一个新的 LUKS 容器,从而销毁现有的容器。在本教程中,我们将了解如何通过几个额外的步骤来解决这个问题。
下载 DVD 安装程序
为了能够执行本教程中描述的操作,我们必须下载并使用 Debian DVD 安装程序,因为它包含一些 netinstall 版本中不可用的库。要通过 torrent 下载安装映像,我们可以使用以下链接之一,具体取决于我们机器的架构:
64位
32位
从上面的链接我们可以下载 torrent 文件,我们可以使用它来获取安装程序的映像。我们需要下载的是 DVD1
文件。要获取安装 ISO,我们必须使用 torrent 客户端作为传输。下载镜像后,我们可以通过下载相应的 SHA256SUM
和 SHA256SUM.sign
文件来验证它,并按照本教程了解如何验证 Linux 发行版 iso 的完整性图像。准备好后,我们可以将映像写入可用作启动设备的支持上:(DVD 或 USB),并从中启动我们的计算机。
使用高级安装模式
当我们使用我们准备的设备启动机器时,我们应该看到以下syslinux菜单:
我们选择高级选项条目,然后图形专家安装(或者专家安装,如果我们想使用基于ncurses的安装程序,它使用资源较少):
一旦我们选择并确认菜单条目,安装程序将启动,我们将可视化安装步骤列表:
我们按照安装步骤进行操作,直到到达从 CD 加载安装程序组件这一处。在这里,我们进行了更改以选择安装程序应加载的其他库。我们要从列表中选择的最小值是 Crypto-dm-modules 和 rescue-mode (向下滚动列表即可看到它):
手动解锁现有 LUKS 容器并对磁盘进行分区
此时,我们可以照常继续,直到到达检测磁盘步骤。在执行此步骤之前,我们需要切换到 tty 并从命令行打开现有的 LUKS 容器。为此,我们可以按Ctrl+Alt+F3组合键,然后按Enter以获得提示。根据提示,我们通过启动以下命令来打开 LUKS 设备:
# cryptsetup luksOpen /dev/vda5 cryptdevice
Enter passphrase for /dev/vda5:
在这种情况下,LUKS 设备先前设置在 /dev/vda5
分区上,您当然应该根据您的需要进行调整。我们将被要求输入容器的密码才能解锁它。我们在这里使用的设备映射器名称 (cryptdevice) 是我们稍后在 /etc/crypttab
文件中需要使用的名称。
执行此步骤后,我们可以切换回安装程序(Ctrl+Alt+F5)并继续检测磁盘,然后分区磁盘强>步骤。在分区磁盘菜单中,我们选择“手动”条目:
解锁的 LUKS 设备及其中包含的逻辑卷应该出现在可用分区列表中,准备用作我们系统设置的目标。准备就绪后,我们可以继续安装,直到到达完成安装步骤。在执行此操作之前,我们需要在新安装的系统 crypttab 中为 LUKS 设备创建一个条目(因为默认情况下不会创建该条目),并重新创建系统 initramfs 以使更改生效。
在 /etc/crypttab 中创建条目并重新创建 initramfs
让我们切换回之前使用的 tty (Ctrl+Alt+F3)。我们现在需要做的是在新安装的系统的 /etc/crypttab
文件中为 LUKS 设备手动添加一个条目。为此,我们必须将新系统的根分区挂载到某个位置(让我们使用 /mnt 目录)并挂载一些伪文件系统,这些文件系统提供有关其中相应目录的重要信息。在我们的例子中,根文件系统位于 /dev/debian-vg/root 逻辑卷中:
# mount /dev/debian-vg/root /mnt
# mount /dev /mnt/dev
# mount /sys /mnt/sys
# mount /proc /mnt/proc
由于在本例中我们有一个单独的启动分区(/dev/vda1
),因此我们还需要将其安装在/mnt/boot
上:
# mount /dev/vda1 /mnt/boot
此时我们必须 chroot 进入已安装的系统:
# chroot /mnt
最后,我们可以使用可用的文本编辑器之一(例如 vi)打开 /etc/crypttab
文件,并添加以下条目:
cryptdevice /dev/vda5 none luks
上面一行中的第一个元素是我们在上面手动解锁 LUKS 容器时使用的设备映射器名称;每次系统启动期间打开容器时都会使用它。
第二个元素是用作 LUKS 设备的分区(在本例中,我们通过路径 (/dev/vda5
) 引用它,但更好的主意是通过 UUID
)。
第三个元素是用于打开容器的密钥文件的位置:这里我们放置none,因为我们不使用密钥文件(请按照我们的关于如何使用文件作为 LUKS 设备密钥的教程进行操作,如果您想知道如何实现这种设置)。
该行的最后一个元素包含应用于加密设备的选项:这里我们只是使用 luks 来指定该设备是 LUKS 容器。
一旦我们更新了/etc/crypttab
文件,我们就可以进一步进行并重新生成initramfs。在 Debian 和基于 debian 的发行版上,要执行此操作,我们使用 update-initramfs 命令:
# update-initramfs -k all -c
这里我们使用 -c 选项来指示命令创建一个新的 initramfs 而不是更新现有的 initramfs,并使用 -k 来指定应该为哪个内核创建 initramfs 。在本例中,我们将 all
作为参数传递,因此将为每个现有内核生成一个。
生成 initramfs 后,我们切换回安装程序(Ctrl+Alt+F5)并继续最后一步:完成安装。安装时我们会提示重新启动才能访问新安装的系统。如果一切按预期进行,在系统启动期间,系统应该提示我们输入密码来解锁 LUKS 容器:
结论
在本教程中,我们学习了如何解决 Debian 安装程序的限制,该限制无法识别和打开现有的 LUKS 容器以在其中执行系统安装。我们学习了如何在“高级模式”下使用安装程序来加载一些附加模块,这些模块允许我们通过切换到 tty 来手动解锁容器。一旦容器打开,安装人员就会正确识别它,并且可以毫无问题地使用。此设置中唯一棘手的部分是我们必须记住在新安装的系统 crypttab 文件中为容器创建一个条目,并更新其 initramfs。