Debian 安装程序自定义 luks 加密配方

Debian 安装程序自定义 luks 加密配方

我想自动化 Debian 的安装,并通过提供自定义配方来控制分区的完成方式。

当我不使用 luks 或 lvm 时,这很容易(ish),但我无法让安装程序同时使用 crypt 和自定义配方。使用 luks 分区成功安装的唯一方法是当我让partman-auto 完成它时,d-i partman-auto/method string crypto但它似乎忽略了我的食谱。

### Partitioning
d-i partman-auto/method string regular
d-i partman-auto/choose_recipe select crypto-recipe
d-i partman-auto/expert_recipe_file string /crypto-recipe

d-i partman-crypto/passphrase string super-secret
d-i partman-crypto/passphrase-again string super-secret

d-i partman-partitioning/confirm_write_new_label boolean true
d-i partman/choose_partition select finish
d-i partman/confirm boolean true
d-i partman/confirm_nooverwrite boolean true
d-i partman-basicfilesystems/no_swap boolean false
crypto-recipe ::

    538 538 1075 fat32
        $iflabel{ gpt }
        $reusemethod{ }
        method{ efi }
        format{ } .

    512 1024 768 ext4
        method{ format }
        format{ }
        use_filesystem{ }
        filesystem{ ext4 }
        mountpoint{ /boot } .

    2000 2000 -1 crypt
        $iflabel{ gpt }
        method{ lvm }
        vg_name{ vg0 } .

    1000 1000 -1 lvmpart
        $lvmok{ }
        in_vg{ vg0 }
        lv_name{ root }
        method{ format }
        format{ }
        use_filesystem{ }
        filesystem{ ext4 }
        label{ doomar }
        mountpoint{ / }
        .

我希望安装程序使用唯一的物理磁盘,但不确定是否需要指定某些内容才能实现这一点。我还应该尝试其他选择吗?

d-i partman-auto/disk string /dev/vda

d-i partman-auto/method string crypto

我还尝试用百分比指定我的 crypt 分区:

    100% 100% 100% crypt
        $iflabel{ gpt }
        method{ lvm }
        vg_name{ vg0 } .

还有太多其他的变化,我试图列出来,但都迷失了。文档似乎有点不清楚。是否有更好的替代方法来使用预置文件?他们看起来不太好,我已经花了很多我花了很多时间试图让它们按照我想要的方式工作,但它们似乎很有限。

我在尝试各种选项时遇到的一些问题:

  • 不选择磁盘
  • 安装系统失败
  • 尽管存在/boot仍坚持/boot/efi
  • 许多示例已经过时(BIOS,而不是 UEFI/GPT)
  • 退回到partman-auto并且不遵循配方
  • 在系统安装位置旁边创建一个空白分区(大概应该是 crypt 分区)

如果有人可以提供一个工作示例,并澄清该方法是否应该regularcrypto何时在配方中指定分区,那至少会给我一个起点。

更新

我尝试增加虚拟磁盘的大小,现在更清楚的是问题是在 crypt 容器内创建 lvm。以前,如果 crypt 分区占用了磁盘上的剩余空间,那么系统就没有任何剩余空间了。

这是我尝试过的:

crypto-recipe ::

    538 538 538 fat32
        $iflabel{ gpt }
        $reusemethod{ }
        method{ efi }
        format{ } .

    512 1024 512 ext4
        method{ format }
        format{ }
        use_filesystem{ }
        filesystem{ ext4 }
        mountpoint{ /boot } .

    2000 2000 -1 crypt
        $iflabel{ gpt }
        method{ crypto }
        vg_name{ vg0 } .

    2000 2000 -1 lvmpart
        $lvmok{ }
        in_vg{ vg0 }
        lv_name{ root }
        method{ format }
        format{ }
        use_filesystem{ }
        filesystem{ ext4 }
        label{ doomar }
        mountpoint{ / }
        .

现在很清楚了

vda                                                                            
├─vda1 vfat   FAT32        390B-57B3                             505.1M     1% /boot/efi
├─vda2 ext4   1.0          48ab2ad8-2744-4fe0-b8ed-dbb9766e0cae  369.7M    11% /boot
├─vda3                                                                         
└─vda4 ext4   1.0   doomar 5ada0c1d-4048-4ff6-ac23-4936dcc16710    1.1G    41% /
Model: Virtio Block Device (virtblk)
Disk /dev/vda: 5369MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name                  Flags
 1      1049kB  538MB   537MB   fat32        EFI System Partition  boot, esp
 2      538MB   1050MB  512MB   ext4
 3      1050MB  3049MB  2000MB
 4      3049MB  5368MB  2318MB  ext4

vda3应该是 luks crypt 分区,并且vda4不应该存在,而是内部的 lvmvda3

答案1

只有部分答案,因为它依赖partman auto来设置加密,这似乎限制了配方的灵活性。

特别是,我必须添加$defaultignore{ }\boot分区,这是我从entek.org.uk博客

d-i partman-auto-lvm/guided_size string max

d-i partman-lvm/device_remove_lvm boolean true
d-i partman-lvm/confirm boolean true
d-i partman-lvm/confirm_nooverwrite boolean true

d-i partman-auto/method string crypto
d-i partman-auto/choose_recipe select autocrypt-recipe
d-i partman-auto/expert_recipe_file string /autocrypt-recipe

d-i partman-crypto/passphrase string super-secret
d-i partman-crypto/passphrase-again string super-secret

d-i partman-partitioning/confirm_write_new_label boolean true
d-i partman/choose_partition select finish
d-i partman/confirm boolean true
d-i partman/confirm_nooverwrite boolean true
d-i partman-basicfilesystems/no_swap boolean false
autocrypt-recipe ::

    256 256 256 fat32
        $iflabel{ gpt }
        $reusemethod{ }
        method{ efi }
        format{ } .

    256 256 256 ext4
        $defaultignore{ }
        method{ format }
        format{ }
        use_filesystem{ }
        filesystem{ ext4 }
        mountpoint{ /boot } .

    2000 2000 -1 ext4
        $lvmok{ }
        lv_name{ root }
        method{ format }
        format{ }
        use_filesystem{ }
        filesystem{ ext4 }
        label{ doomar }
        mountpoint{ / }
        .

结果

vda                                                                                                          
├─vda1                     vfat        FAT32           E692-113B                               233.4M     2% /boot/efi
├─vda2                     ext4        1.0             89d9e5c4-5cba-4b08-bd0f-96c9332a3e07      154M    24% /boot
└─vda3                     crypto_LUKS 2               9d4aa1bd-0706-4ba0-ac48-850ac7499355                  
  └─vda3_crypt             LVM2_member LVM2 001        0EDidF-GVe0-odQX-gPQ9-VXED-Pf7l-snWt8D                
    └─debian--vm0--vg-root ext4        1.0      doomar 099e743c-0c62-4bb8-8f25-71e8c96ce8d9      3.3G    19% /
Model: Virtio Block Device (virtblk)
Disk /dev/vda: 5369MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name                  Flags
 1      1049kB  256MB   255MB   fat32        EFI System Partition  boot, esp
 2      256MB   512MB   256MB   ext4
 3      512MB   5368MB  4856MB

我仍然想知道是否可以使用该regular方法并更明确地指定配方中的 crypto 和 lvm 分区,而不是依赖partman-auto?

相关内容