From: Benjamin Drung <benjamin.drung@canonical.com>
Date: Fri, 13 Mar 2026 14:45:50 +0100
Subject: fix(crypt): honor timeout setting when using UUID, LABEL, etc

Test 20 fails on slow architectures, because it runs into a timeout:

```
[ TIME ] Timed out waiting for device dev-disk-by\x2duuid-1dc514cd\x2d8268\x2d4a33\x2d873f\x2d84f8eb02d3e0.device - /dev/disk/by-uuid/1dc514cd-8268-4a33-873f-84f8eb02d3e0.
[DEPEND] Dependency failed for systemd-cryptsetup@testluks.service - Cryptography Setup for testluks.
[DEPEND] Dependency failed for cryptsetup.target - Local Encrypted Volumes.
[  118.452336] systemd[1]: dev-disk-by\x2duuid-1dc514cd\x2d8268\x2d4a33\x2d873f\x2d84f8eb02d3e0.device: Job dev-disk-by\x2duuid-1dc514cd\x2d8268\x2d4a33\x2d873f\x2d84f8eb02d3e0.device/start timed out.
[  118.465917] systemd[1]: Timed out waiting for device dev-disk-by\x2duuid-1dc514cd\x2d8268\x2d4a33\x2d873f\x2d84f8eb02d3e0.device - /dev/disk/by-uuid/1dc514cd-8268-4a33-873f-84f8eb02d3e0.
[  118.483854] systemd[1]: Dependency failed for systemd-cryptsetup@testluks.service - Cryptography Setup for testluks.
[  118.500894] systemd[1]: Dependency failed for cryptsetup.target - Local Encrypted Volumes.
[  118.519552] systemd[1]: cryptsetup.target: Job cryptsetup.target/start failed with result 'dependency'.
[  118.535383] systemd[1]: systemd-cryptsetup@testluks.service: Job systemd-cryptsetup@testluks.service/start failed with result 'dependency'.
[  118.549404] systemd[1]: dev-disk-by\x2duuid-1dc514cd\x2d8268\x2d4a33\x2d873f\x2d84f8eb02d3e0.device: Job dev-disk-by\x2duuid-1dc514cd\x2d8268\x2d4a33\x2d873f\x2d84f8eb02d3e0.device/start failed with result 'timeout'.
```

`parse-crypt.sh` is supposed to set the timeout for this device
(defaulting to `infinity`), but it uses the wrong unit name in case the
source device in `/etc/crypttab` uses `UUID`, `PARTLABEL`, `LABEL`, or
`PARTUUID`. For example: it converts
`UUID=1dc514cd-8268-4a33-873f-84f8eb02d3e0` to
`UUID\x3d1dc514cd\x2d8268\x2d4a33\x2d873f\x2d84f8eb02d3e0.device`
instead of
`dev-disk-by\x2duuid-1dc514cd\x2d8268\x2d4a33\x2d873f\x2d84f8eb02d3e0.device`.

Use `label_uuid_to_dev` to map the source device from `/etc/crypttab` to
a device path.

Forwarded: https://github.com/dracut-ng/dracut-ng/pull/2300
---
 modules.d/70crypt/parse-crypt.sh | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/modules.d/70crypt/parse-crypt.sh b/modules.d/70crypt/parse-crypt.sh
index 8f28f8a..e3404c3 100755
--- a/modules.d/70crypt/parse-crypt.sh
+++ b/modules.d/70crypt/parse-crypt.sh
@@ -37,7 +37,8 @@ else
     tout=$(getarg rd.luks.key.tout)
 
     if [ -e /etc/crypttab ]; then
-        while read -r _ _dev _ || [ -n "$_dev" ]; do
+        while read -r _ _source_device _ || [ -n "$_source_device" ]; do
+            _dev=$(label_uuid_to_dev "$_source_device")
             set_systemd_timeout_for_dev "$_dev"
         done < /etc/crypttab
     fi
