dracut/0144-90crypt-Fixed-crypttab_contains-to-also-work-with-de.patch
Thomas Renninger 9f28177407 Accepting request 293267 from home:trenn:branches:Base:System
- Update to dracut mainline version 041.
  Half of the patches got integrated mainline.
  Some others have been merged together when it made sense some have
  been left out, but are still in the repository as they need some special
  treating and mainline discussion whether/how they get added. These are
  also not urgently needed, but are debugging patches.
  I broke the rule here to mention every added/deleted/modified patch as
  every patch is touched and every 2nd  got removed (mainline integrated).
  I also re-ordered the patches in the PatchXY: area for easier merging them
  and get them discussed and posted mainline easier, topic by topic.

OBS-URL: https://build.opensuse.org/request/show/293267
OBS-URL: https://build.opensuse.org/package/show/Base:System/dracut?expand=0&rev=214
2015-03-31 14:12:12 +00:00

74 lines
3.1 KiB
Diff

From 7f4dea242398cc369ff3fecd599faa00d81a522c Mon Sep 17 00:00:00 2001
From: Julian Wolf <juwolf@suse.de>
Date: Tue, 19 Aug 2014 16:23:59 +0200
Subject: 90crypt: Fixed crypttab_contains() to also work with device path in
/etc/crypttab
blkid is not available when this function is called, so block_uuid.map is put into
the initrd, mapping block devices from /etc/crypttab to UUIDs.
This fixes a bug where udev rules were created by mistake as crypttab_contains()
returned false for devices specified by path in /etc/crypttab which resulted in
error messages during boot.
Signed-off-by: Julian Wolf <juwolf@suse.de>
---
modules.d/90crypt/crypt-lib.sh | 9 +++++++++
modules.d/90crypt/module-setup.sh | 4 ++++
2 files changed, 13 insertions(+)
Index: dracut-041/modules.d/90crypt/crypt-lib.sh
===================================================================
--- dracut-041.orig/modules.d/90crypt/crypt-lib.sh 2015-01-31 12:54:52.000000000 +0100
+++ dracut-041/modules.d/90crypt/crypt-lib.sh 2015-03-24 15:17:12.866590774 +0100
@@ -5,11 +5,20 @@
# check if the crypttab contains an entry for a LUKS UUID
crypttab_contains() {
local luks="$1"
+ local _uuid _line
local l d rest
if [ -f /etc/crypttab ]; then
while read l d rest; do
strstr "${l##luks-}" "${luks##luks-}" && return 0
strstr "$d" "${luks##luks-}" && return 0
+ if [ -e /usr/lib/dracut/modules.d/90crypt/block_uuid.map ]; then
+ # search for line starting with $d
+ _line=$(sed -n "\,^$d .*$,{p}" /usr/lib/dracut/modules.d/90crypt/block_uuid.map)
+ [ -z "$_line" ] && continue
+ # get second column with uuid
+ _uuid="$(echo $_line | sed 's,^.* \(.*$\),\1,')"
+ strstr "$_uuid" "${luks##luks-}" && return 0
+ fi
done < /etc/crypttab
fi
return 1
Index: dracut-041/modules.d/90crypt/module-setup.sh
===================================================================
--- dracut-041.orig/modules.d/90crypt/module-setup.sh 2015-01-31 12:54:52.000000000 +0100
+++ dracut-041/modules.d/90crypt/module-setup.sh 2015-03-24 15:17:12.866590774 +0100
@@ -63,6 +63,7 @@
inst_hook cleanup 30 "$moddir/crypt-cleanup.sh"
fi
+ > /tmp/dracut_block_uuid.map
if [[ $hostonly ]] && [[ -f /etc/crypttab ]]; then
# filter /etc/crypttab for the devices we need
while read _mapper _dev _rest; do
@@ -72,6 +73,8 @@
[[ $_dev == UUID=* ]] && \
_dev="/dev/disk/by-uuid/${_dev#UUID=}"
+ echo "$_dev $(blkid $_dev -s UUID -o value)" >> /tmp/dracut_block_uuid.map
+
for _hdev in "${!host_fs_types[@]}"; do
[[ ${host_fs_types[$_hdev]} == "crypto_LUKS" ]] || continue
if [[ $_hdev -ef $_dev ]] || [[ /dev/block/$_hdev -ef $_dev ]]; then
@@ -84,6 +87,7 @@
fi
inst_simple "$moddir/crypt-lib.sh" "/lib/dracut-crypt-lib.sh"
+ inst_simple "/tmp/dracut_block_uuid.map" "/usr/lib/dracut/modules.d/90crypt/block_uuid.map"
inst_multiple -o \
$systemdutildir/system-generators/systemd-cryptsetup-generator \