Correct /etc/crypttab; root in linear multi-disk encrypted linear LVM volume group not detected properly

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I had some trouble using Dracut version 041 to generate a proper image
that would use an external device that contained my key with
/etc/crypttab, regardless of how crypttab states to authenticate (none
(password), or file path). First I noticed that /etc/crypttab can have
quotes for the first field but the crypt module would not parse that
properly so I had to remove them. It would create a device
/dev/disk/by-uuid/"UUID in quotes". No big deal but this is not
documented.

My disk layout is 2 disks linear with LVM, with a part of the VG being
root. Because the image's /etc/crypttab was not being generated
properly, I could never get past the early stage boot and would always
end in the emergency console. Luckily you can still boot from that.

I carefully watched the debug output from Dracut and saw there was a
comparison to get 'only what is needed' for /etc/crypttab in the
image. The problem is that this does not take into account that a
volume group can comprise of 2 disks, each of which are individually
encrypted, and that LVM cannot initialise the volume group without
both being decrypted at boot time. That would mean in the image.

I commented out lines 76, 77, and 80 in
/usr/lib/dracut/modules.d/90crypt/module-setup.sh:

  66     if [[ $hostonly ]] && [[ -f /etc/crypttab ]]; then
  67         # filter /etc/crypttab for the devices we need
  68         while read _mapper _dev _rest; do
  69             [[ $_mapper = \#* ]] && continue
  70             [[ $_dev ]] || continue
  71
  72             [[ $_dev == UUID=* ]] && \
  73                 _dev="/dev/disk/by-uuid/${_dev#UUID=}"
  74
  75             for _hdev in "${!host_fs_types[@]}"; do
  76                 #[[ ${host_fs_types[$_hdev]} == "crypto_LUKS" ]]
|| continue
  77                 #if [[ $_hdev -ef $_dev ]] || [[
/dev/block/$_hdev -ef $_dev ]]; then
  78                     echo "$_mapper $_dev $_rest"
  79                     break
  80                 #fi
  81             done
  82         done < /etc/crypttab > $initdir/etc/crypttab

This was the only way I could get both disks to be in the image's
/etc/crypttab without major modifications. What is the proper way to
do this? I obviously do not want to be modifying things installed by
my package manager as the changes will be lost on upgrades.

I have reported my findings and partial solution to 'Boot with a
device with the key plugged in + LUKS + root in LVM VG' here:
https://forums.gentoo.org/viewtopic-p-7732674.html#7732674

Also, unless you know systemd really well, what is unclear is that a
proper /etc/crypttab is *required* for the generator as part of
systemd. http://www.freedesktop.org/software/systemd/man/systemd-cryptsetup-generator.html
When you boot and you start to get to 'Failed to issue method call:
Unit systemd-cryptsetup@luks\x2d...service failed to load: No such
file or directory.'-type messages, it is not clear what the exact
cause is. Is it possible dracut-initqueue could report this as a
possible suspect?

This was all very confusing in many ways, especially if something is
systemd-specific (and not OpenRC or another init) then there is not a
lot of documentation. So I hope I save someone a lot of time.

Andrew
--
To unsubscribe from this list: send the line "unsubscribe initramfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Kernel]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux SCSI]

  Powered by Linux