Hello.
I am sorry because I am relatively new to systemd and apparently I don't understand how it works. I'm on
Xubuntu 20.04 where I'm trying to utilize systemd to decrypt and mount a certain encrypted partition upon boot. I followed some tutorials online and I ended up adding the following two files to /etc/systemd/system folder. These two are supposed to decrypt the specified partition and then mount it after it has been opened by dm-crypt (/dev/mapper/).
/etc/systemd/system/mnt-windows.mount
Code:
[Unit]
Requires=unlock-windows-veracrypt.service
After=unlock-windows-veracrypt.service
[Mount]
What=/dev/mapper/windows
Where=/mnt/windows
Options=nosuid,nodev,noexec
[Install]
WantedBy=local-fs.target
/etc/systemd/system/unlock-windows-veracrypt.service
Code:
[Unit]
Description=Open encrypted windows partition
Requires=cryptsetup.target
After=cryptsetup.target
StopWhenUnneeded=true
[Service]
Type=oneshot
ExecStart=/bin/sh -c '/usr/bin/cat /boot/cryptpass.bin | /sbin/cryptsetup -v open --type tcrypt --tcrypt-system --veracrypt /dev/disk/by-partlabel/VERA windows'
ExecStop=/sbin/cryptsetup -v close windows
RemainAfterExit=true
I then activated this by running
systemctl enable mnt-windows.mount and rebooted. This mostly worked fine, but at some point the mount started to fail and I noticed errors in the syslog. Upon further inspection it turns out that certain services were failing to run due to systemd dependency loops. I tried to debug the issue, but was unsuccessful. When running the command
systemd-analyze verify default.target I get lots of entries like these:
Code:
sockets.target: Found ordering cycle on snapd.socket/start
sockets.target: Found dependency on sysinit.target/start
sockets.target: Found dependency on snapd.apparmor.service/start
sockets.target: Found dependency on apparmor.service/start
sockets.target: Found dependency on local-fs.target/start
sockets.target: Found dependency on mnt-windows.mount/start
sockets.target: Found dependency on unlock-windows-veracrypt.service/start
sockets.target: Found dependency on basic.target/start
sockets.target: Found dependency on sockets.target/start
sockets.target: Job snapd.socket/start deleted to break ordering cycle starting with sockets.target/start
sockets.target: Found ordering cycle on uuidd.socket/start
sockets.target: Found dependency on sysinit.target/start
sockets.target: Found dependency on snapd.apparmor.service/start
sockets.target: Found dependency on apparmor.service/start
sockets.target: Found dependency on local-fs.target/start
sockets.target: Found dependency on mnt-windows.mount/start
sockets.target: Found dependency on unlock-windows-veracrypt.service/start
sockets.target: Found dependency on basic.target/start
sockets.target: Found dependency on sockets.target/start
sockets.target: Job uuidd.socket/start deleted to break ordering cycle starting with sockets.target/start
sockets.target: Found ordering cycle on cups.socket/start
sockets.target: Found dependency on sysinit.target/start
sockets.target: Found dependency on snapd.apparmor.service/start
sockets.target: Found dependency on apparmor.service/start
sockets.target: Found dependency on local-fs.target/start
sockets.target: Found dependency on mnt-windows.mount/start
sockets.target: Found dependency on unlock-windows-veracrypt.service/start
sockets.target: Found dependency on basic.target/start
sockets.target: Found dependency on sockets.target/start
sockets.target: Job cups.socket/start deleted to break ordering cycle starting with sockets.target/start
If I disable the mnt-windows.mount then the above command returns no errors. It seems that the two files I added are somehow creating a dependency cycle (or several). I found
a document that explains the systemd execution tree quite nicely. The two files are linked to local-fs.target and cryptsetup.target in that tree, but according to the above error messages the unlock-windows-veracrypt.service appears to be pulling in the basic.target dependency for some reason. And since this target is way below in the execution tree this creates a cycle and causes systemd to randomly stop execution of some targets.
Any idea how to solve this?
Thanks in advance.