Bugzilla – Bug 1149066
daemon-reload does not always reload generated services
Last modified: 2019-10-09 15:00:36 UTC
# cryptsetup status usb
/dev/mapper/usb is inactive.
# cryptsetup open --key-file /etc/usbkey /dev/disk/by-uuid/98b904aa-5b37-476e-a690-5c73cc93a5b7 usb
# cryptsetup status usb
/dev/mapper/usb is active.
keysize: 512 bits
key location: dm-crypt
sector size: 512
offset: 4096 sectors
size: 30027776 sectors
# cryptsetup close usb
# systemctl daemon-reload
# systemctl start systemd-cryptsetup@cr_usb.service
Please enter passphrase for disk Cruzer_Fit (cr_usb): ^C
# cat /etc/crypttab
cr_usb UUID=98b904aa-5b37-476e-a690-5c73cc93a5b7 /etc/usbkey nofail
Each line is in the form
name encrypted-device password options
The third field specifies the encryption password. If the field is not present or the password is set to "none" or "-", the
password has to be manually entered during system boot. Otherwise, the field is interpreted as an absolute path to a file
containing the encryption password.
> cat /var/run/systemd/generator/systemd-cryptsetup@cr_usb.service
# Automatically generated by systemd-cryptsetup-generator
Description=Cryptography Setup for %I
Documentation=man:crypttab(5) man:systemd-cryptsetup-generator(8) man:systemd-cryptsetup@.service(8)
ExecStart=/usr/lib/systemd/systemd-cryptsetup attach 'cr_usb' '/dev/disk/by-uuid/98b904aa-5b37-476e-a690-5c73cc93a5b7' '/etc/usbkey' 'nofail'
ExecStop=/usr/lib/systemd/systemd-cryptsetup detach 'cr_usb'
This is some bug with daemon-reload handling. The service was regenerated correctly as seen above but the previously loaded one with different key file was executed. Executing daemon-reload multiple times, possibly with some time passing in-between also loads the correct service definition.
(In reply to Michal Suchanek from comment #0)
> # systemctl daemon-reload
> # systemctl start systemd-cryptsetup@cr_usb.service
> Please enter passphrase for disk Cruzer_Fit (cr_usb): ^C
My guess is that you just interrupted systemctl here but PID1 is still trying to activate the job you queued with systemctl.
systemctl was simply waiting for systemd-cryptsetup@cr_usb.service to be running. You killed it but this had no effects the queued job itself.
After pressing ^C, what does "systemctl status systemd-cryptsetup@cr_usb.service" show ?
I think the description I gave in comment #3 is what happened in your case and is then expected.
So I'm closing this bug.
In case you don't agree with this behavior please discuss this directly with upstream as this issue is not related to any SUSE specificity.