Ошибка «cryptsetup: Source Mismatch» при сборке initramfs при установке chroot

В последнее время я обнаружил, что монтирование томов veracrypt изначально поддерживается cryptsetup и systemd.

Поскольку я ищу полностью зашифрованную установку с двойной загрузкой, где все разделы доступны для всех систем, а LUKS не может быть прочитан из Windows AFAIK, я решил зайти в кроличью нору, которая устанавливает Ubuntu вручную на veracrypt объем.

Пока я добился почти всего. Я распаковал образ squashfs, поставляемый с компакт-диском, в корневой раздел, сделал несколько настроек конфигурации и получил:

  • Корневая файловая система с Lubuntu в / dev / sdb5 (зашифрованный том veracrypt),
  • ] Раздел / boot / efi в / dev / sdb2 (незашифрованный раздел FAT32),
  • Общая папка / home , расположенная в / dev / sdb6 (Другой зашифрованный том veracrypt)

Поскольку у корневого и домашнего разделов один и тот же пароль, я настроил crypttab как таковой (предположительно, скрипт ключей decrypt_keyctl быстро кэширует пароли и передает их последующим вызовам):

# <target name> <source device> <key file>      <options>
ubunturoot      /dev/sda5       /dev/null       tcrypt,tcrypt-veracrypt,keyscript=decrypt_keyctl
sharedfiles     /dev/sda6       /dev/null       tcrypt,tcrypt-veracrypt,keyscript=decrypt_keyctl

И для монтирования файловых систем мой fstab настроен как таковой:

#[Device]                [Mount Point]      [File System Type]      [Options]       [Dump]  [Pass]
/dev/mapper/ubunturoot   /                  ext4                    defaults        0       1
/dev/mapper/sharedfiles  /media/sharedfiles ntfs-3g                 defaults        0       2
/dev/sda2                /boot/efi          fat32                   defaults        0       2
/media/sharedfiles/Users /home              none                    defaults,bind   0       2

(И да, я знаю, что раздел с общими файлами не монтируется напрямую в / home , это предполагаемый эффект)

Я chrootted в файловую систему с помощью live CD, убедившись, что смонтировать -B все / dev , / dev / pts , / sys , / proc и / run с live CD в chroot.

Я успешно установил grub с помощью grub-install без каких-либо ошибок. Однако при попытке создать initramfs для размещения в / boot / efi с использованием

mkinitramfs -o /boot/efi/initramfs

я получаю следующий результат:

cryptsetup: ERROR: ubunturoot: Source mismatch
cryptsetup: WARNING: target 'ubunturoot_1' not found in /etc/crypttab
cryptsetup: WARNING: target 'ubunturoot_2' not found in /etc/crypttab
W: Possible missing firmware /lib/firmware/amdgpu/navi10_gpu_info.bin for module amdgpu

Еще около 10 строк, касающихся прошивки AMD, о которых я особо не беспокоюсь. , затем

E: /usr/share/initramfs-tools/hooks/cryptkeyctl failed with return 1.

Я поискал в Интернете строку «Несоответствие источника» и не нашел ничего, что могло бы мне помочь.

Я перешел к упомянутому сценарию в последней строке, обнаружил, что для него требуется еще один перехватчик initramfs, затем нашел строку с нарушением и окружающие комментарии в / usr / share / initramfs-tools / hooks / cryptroot

# crypttab_print_entry()
#   Print an unmangled crypttab(5) entry to FD nr. 3, using CRYPTTAB_*
#   and _CRYPTTAB_* values.
#   _CRYPTTAB_SOURCE is replaced with /dev/mapper/$sourcename for mapped
#   sources, otherwise by UUID=<uuid> if possible (eg, for LUKS).  If
#   the entry uses the 'decrypt_derived' keyscript, the other
#   crypttab(5) entries it depends on are (recursively) printed before
#   hand.
#   Various checks are performed on the key and crypttab options, but no
#   parsing is done so it's the responsibility of the caller to call
#   crypttab_parse_options().
#   Return 0 on success, 1 on error.
crypttab_print_entry() {
    local DEV MAJ MIN sourcename uuid keyfile
    if resolve_device "$CRYPTTAB_SOURCE"; then
        if [ "$(dmsetup info -c --noheadings -o devnos_used -- "$CRYPTTAB_NAME" 2>/dev/null)" != "$MAJ:$MIN" ]; then
            cryptsetup_message "ERROR: $CRYPTTAB_NAME: Source mismatch"

I пытались понять окружающий сценарий, но потерпели неудачу. Я почти не понимаю, что сценарий initramfs, связанный с монтированием зашифрованного rootfs, не работает, но я не могу понять, почему.

Могу я предпринять какие-либо другие действия по устранению неполадок, чтобы пролить свет на это? Если будут предложены какие-либо команды, я запускаю их и обновляю.

0
задан 20 January 2020 в 18:54

1 ответ

Сценарий выполняет перекрестную проверку между файлами конфигурации - fstab и crypttab. Эта перекрестная проверка предназначена для того, чтобы убедиться, что записи совпадают, в частности, что совпадают основные и второстепенные номера устройств.

Вы можете запустить следующую команду, чтобы увидеть необработанное сообщение об ошибке, где $CRYPTTAB_NAME в данном случае — это «ubunturoot». Это фактическая команда, которую скрипт выполняет в данный момент, но она подавляет ошибки.

dmsetup info -c --noheadings -o devnos_used -- "$CRYPTTAB_NAME"
1
ответ дан 12 September 2020 в 13:53

Другие вопросы по тегам:

Похожие вопросы: