[Bug 2031179] Re: systemd-cryptsetup-generator does not understand :timeout parameter used with "passdev"
Nick Rosbrook
2031179 at bugs.launchpad.net
Fri Aug 11 18:44:24 UTC 2023
systemd has it's own crypttab format/implementation [1], and the
documentation you cite is Debian's implementation for sysv and initrafms
scripts[2].
But, you should be able to achieve the desired behavior by appending
keyfile-timeout=5s to the options. See [3][4] for more information and
examples.
[1] https://www.freedesktop.org/software/systemd/man/crypttab.html
[2] https://manpages.debian.org/unstable/cryptsetup/crypttab.5.en.html#ON_DIFFERENT_CRYPTTAB_FORMATS
[3] https://www.freedesktop.org/software/systemd/man/crypttab.html#keyfile-timeout=
[4] https://www.freedesktop.org/software/systemd/man/crypttab.html#Examples
** Changed in: systemd (Ubuntu)
Status: New => Invalid
--
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to systemd in Ubuntu.
https://bugs.launchpad.net/bugs/2031179
Title:
systemd-cryptsetup-generator does not understand :timeout parameter
used with "passdev"
Status in systemd package in Ubuntu:
Invalid
Bug description:
I have the following line in my /etc/crypttab file (UUID & volume
names obfuscated):
sdxx_crypt UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /dev/disk/by-
label/XXXXXXX16GB:/desktop_Linux.key:5
luks,discard,noauto,keyscript=/lib/cryptsetup/scripts/passdev
This decrypts the LUKS volume containing my /, /home & swap
partitions, and is correctly handled by initramfs since my PC boots
fine.
But since upgrading from kernel 5.19.0-50-generic to 6.2.0-26-generic,
I've noticed a 90 second booting delay, with the following messages
(extracted from the journal) visible during the delay:
Aug 11 07:24:58 xxxx systemd[1]: dev-disk-by\x2dlabel-XXXXXXX16GB:-desktop_Linux.key:5.device: Job dev-disk-by\x2dlabel-XXXXXXX16GB:-desktop_Linux.key:5.device/start timed out.
Aug 11 07:24:58 xxxx systemd[1]: Timed out waiting for device /dev/disk/by-label/XXXXXXX16GB:/desktop_Linux.key:5.
Aug 11 07:24:58 xxxx systemd[1]: Dependency failed for Cryptography Setup for sdxx_crypt.
Aug 11 07:24:58 xxxx systemd[1]: systemd-cryptsetup at sdxx_crypt.service: Job systemd-cryptsetup at sdxx_crypt.service/start failed with result 'dependency'.
Aug 11 07:24:58 xxxx systemd[1]: dev-disk-by\x2dlabel-XXXXXXX16GB:-desktop_Linux.key:5.device: Job dev-disk-by\x2dlabel-XXXXXXX16GB:-desktop_Linux.key:5.device/start failed with result 'timeout'.
Aug 11 07:24:58 xxxx systemd[1]: Reached target Block Device Preparation for /dev/mapper/sdxx_crypt.
Aug 11 07:24:58 xxxx systemd[1]: Reached target Local Encrypted Volumes.
It turns out that I also had these messages before the upgrade, but until now they weren't causing SystemD to wait for 90 seconds before continuing.
My bug report is NOT about SystemD's sudden 90 second delay (which may be reasonable), but rather the underlying problem pointed to by these messages.
I have been able to get rid these messages (and the 90 second delay)
by removing the optional ":5" timeout parameter after my keyfile path:
sdxx_crypt UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /dev/disk/by-
label/XXXXXXX16GB:/desktop_Linux.key
luks,discard,noauto,keyscript=/lib/cryptsetup/scripts/passdev
I believe this indicates that "systemd-cryptsetup-generator" doesn't understand the optional timeout parameter, even though it is legal & documented:
https://cryptsetup-team.pages.debian.net/cryptsetup/README.initramfs.html#the-passdev-keyscript
When the timeout parameter is present, I think it misinterprets the device:volume:timeout as just a device name. (If it is treating the second colon as if it was the first/only one then the fix may be trivially easy.)
Here is what the problematic mount file (/run/systemd/generator/systemd-cryptsetup at sdxx_crypt.service) generated by it looks like:
# Automatically generated by systemd-cryptsetup-generator
[Unit]
Description=Cryptography Setup for %I
Documentation=man:crypttab(5) man:systemd-cryptsetup-generator(8) man:systemd-cryptsetup at .service(8)
SourcePath=/etc/crypttab
DefaultDependencies=no
IgnoreOnIsolate=true
After=cryptsetup-pre.target systemd-udevd-kernel.socket
Before=blockdev at dev-mapper-%i.target
Wants=blockdev at dev-mapper-%i.target
Conflicts=umount.target
Before=cryptsetup.target
After=dev-disk-by\x2dlabel-XXXXXXX16GB:-desktop_Linux.key:5.device
Requires=dev-disk-by\x2dlabel-XXXXXXX16GB:-desktop_Linux.key:5.device
BindsTo=dev-disk-by\x2duuid-xxxxxxxx\x2dxxxx\x2dxxxx\x2dxxxx\x2dxxxxxxxxxxxx.device
After=dev-disk-by\x2duuid-xxxxxxxx\x2dxxxx\x2dxxxx\x2dxxxx\x2dxxxxxxxxxxxx.device
Before=umount.target
[Service]
Type=oneshot
RemainAfterExit=yes
TimeoutSec=0
KeyringMode=shared
OOMScoreAdjust=500
ExecStart=/lib/systemd/systemd-cryptsetup attach 'sdxx_crypt' '/dev/disk/by-uuid/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' '/dev/disk/by-label/XXXXXXX16GB:/desktop_Linux.key:5' 'luks,discard,noauto,keyscript=/lib/cryptsetup/scripts/passdev'
ExecStop=/lib/systemd/systemd-cryptsetup detach 'sdxx_crypt'
And here is what the same file looks like after the :5 timeout has been removed:
# Automatically generated by systemd-cryptsetup-generator
[Unit]
Description=Cryptography Setup for %I
Documentation=man:crypttab(5) man:systemd-cryptsetup-generator(8) man:systemd-cryptsetup at .service(8)
SourcePath=/etc/crypttab
DefaultDependencies=no
IgnoreOnIsolate=true
After=cryptsetup-pre.target systemd-udevd-kernel.socket
Before=blockdev at dev-mapper-%i.target
Wants=blockdev at dev-mapper-%i.target
Conflicts=umount.target
After=run-systemd-cryptsetup-keydev\x2dsdxx_crypt.mount
Requires=run-systemd-cryptsetup-keydev\x2dsdxx_crypt.mount
Wants=keydev-sdxx_crypt-umount.service
Before=keydev-sdxx_crypt-umount.service
Before=cryptsetup.target
BindsTo=dev-disk-by\x2duuid-xxxxxxxx\x2dxxxx\x2dxxxx\x2dxxxx\x2dxxxxxxxxxxxx.device
After=dev-disk-by\x2duuid-xxxxxxxx\x2dxxxx\x2dxxxx\x2dxxxx\x2dxxxxxxxxxxxx.device
Before=umount.target
[Service]
Type=oneshot
RemainAfterExit=yes
TimeoutSec=0
KeyringMode=shared
OOMScoreAdjust=500
ExecStart=/lib/systemd/systemd-cryptsetup attach 'sdxx_crypt' '/dev/disk/by-uuid/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' '/run/systemd/cryptsetup/keydev-sdxx_crypt/dev/disk/by-label/XXXXXXX16GB' 'luks,discard,noauto,keyscript=/lib/cryptsetup/scripts/passdev'
ExecStop=/lib/systemd/systemd-cryptsetup detach 'sdxx_crypt'
I am using Ubuntu 22.04.3 LTS.
~$ apt-cache policy systemd
systemd:
Installed: 249.11-0ubuntu3.9
Candidate: 249.11-0ubuntu3.9
Version table:
*** 249.11-0ubuntu3.9 500
500 http://gb.archive.ubuntu.com/ubuntu jammy-updates/main amd64 Packages
100 /var/lib/dpkg/status
249.11-0ubuntu3.7 500
500 http://security.ubuntu.com/ubuntu jammy-security/main amd64 Packages
249.11-0ubuntu3 500
500 http://gb.archive.ubuntu.com/ubuntu jammy/main amd64 Packages
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/systemd/+bug/2031179/+subscriptions
More information about the foundations-bugs
mailing list