<p dir="ltr">Hello,</p>
<p dir="ltr">I might have spotted something </p>
<p dir="ltr">You tell repart to encrypt with a keyfile, but it seems like you don't pass in which keyfile to use. By default, repart will encrypt with a null key in that case. IIRC, you have to pass in the keyfile (or maybe socket) to use in your drop-in.</p>
<p dir="ltr">Apologies if I'm wrong. I'm on my phone and haven't pulled up the docs to verify.</p>
<p dir="ltr">Best,<br>
Adrian </p>
<br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, Oct 19, 2024, 20:21 Thayne Harbaugh <<a href="mailto:thayne@mastodonlabs.com">thayne@mastodonlabs.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Greetings - apologies if this isn't the proper list - please redirect<br>
me.<br>
<br>
I'm writing a systemd-repart HOWTO with demo code for various use<br>
cases:<br>
<br>
  <a href="https://github.com/plastikos/repart_howto" rel="noreferrer noreferrer" target="_blank">https://github.com/plastikos/repart_howto</a><br>
<br>
The HOWTO is a typical document while the demos are minimal cases<br>
built with mkosi and available for growing into larger solutions.<br>
<br>
Initially it has two use-case demos:<br>
<br>
  1. Creating a new partition (xdata) on first boot<br>
<br>
  2. Creating a new partition (xdata) with encryption on first boot<br>
<br>
Currently #1 works.  It's simple.  I still need to create more details<br>
around growing partitions and other ideas.<br>
<br>
The encryption case #2, however, does not work and I'm looking for<br>
some assistance.  While there is significant documentation around the<br>
systemd ecosystem of tools I feel like I have possibly missed some<br>
detail or may not be understanding how to synthesize the information<br>
into a working model.<br>
<br>
The encryption demo is identical to case #1 of adding a partition with<br>
the following changes:<br>
<br>
  1. The /usr/lib/repart.d/30-xdata.conf file adds the following:<br>
<br>
       Encrypt=key-file<br>
       EncryptedVolume=dc-xdata:/run/fscrypt.sock:luks,discard<br>
<br>
  2. a /usr/lib/systemd/system/fscrypt.socket file is added along with<br>
     a fscrypt@.service file (see the project source, please).<br>
<br>
  3. A /usr/bin/getkey file is added for fscrypt@.service to call.<br>
     getkey provides a simplistic way of producing an encryption key<br>
     for *demonstration* purposes *ONLY*.<br>
<br>
  4. A /var/lib/key.bin is added as a binary encryption key that<br>
     getkey retrieves - for *demonstration* purposes *ONLY*.<br>
<br>
When built into a disk image by mkosi and started with qemu it fails<br>
to create the new xdata partition.  I see quite a few journal messages<br>
from systemd-repart and related udev events.  I have verified a few<br>
things:<br>
<br>
  1. /run/fscrypt.sock does get created<br>
<br>
  2. getkey does emit the encryption key to stdout<br>
<br>
  3. systemd-repart is started and initiates creating a partition with<br>
     LUKS<br>
<br>
There are two notable details that cause me concern and might be where<br>
the problem lies:<br>
<br>
  1. There is no evidence that getkey is invoked even when I<br>
     instrument it to generate side-effects.<br>
<br>
  2. There are messages in the journal that indicate that<br>
     systemd-repart never exits and that it might be in deadlock waiting<br>
     for child events.<br>
<br>
The messages around the possible deadlock of #2 above are the<br>
following:<br>
<br>
  Oct 19 12:08:48.510843 localhost systemd-repart[276]: loop0: Acquired exclusive lock.<br>
  Oct 19 12:08:48.512130 localhost systemd-repart[276]: Successfully acquired /dev/loop0, devno=7:0, nr=0, diskseq=11<br>
  Oct 19 12:08:48.516941 localhost systemd-repart[276]: Encrypting future partition 2...<br>
  Oct 19 12:08:48.517077 localhost systemd-repart[276]: Allocating context for crypt device /dev/loop0.<br>
  <SNIP/><br>
  Oct 19 12:08:49.114118 localhost (udev-worker)[299]: loop0: Processing device (SEQNUM=1996, ACTION=change)<br>
  Oct 19 12:08:49.114972 localhost (udev-worker)[299]: loop0: Failed to flock(/dev/loop0): Resource temporarily unavailable<br>
  Oct 19 12:08:49.114979 localhost (udev-worker)[299]: loop0: Block device is currently locked, requeueing the event.<br>
  <SNIP/><br>
  Oct 19 12:08:49.328308 localhost (udev-worker)[296]: loop0: Processing device (SEQNUM=1996, ACTION=change)<br>
  Oct 19 12:08:49.328345 localhost (udev-worker)[296]: loop0: Failed to flock(/dev/loop0): Resource temporarily unavailable<br>
  Oct 19 12:08:49.328352 localhost (udev-worker)[296]: loop0: Block device is currently locked, requeueing the event.<br>
  <SNIP/><br>
<br>
Those last three messages about failing to lock repeat until QEMU is<br>
shut down.<br>
<br>
There are quite a few additional diagnostic details and logs that may<br>
be of interest but it might be easier to clone the repart_howto<br>
project from github and run it:<br>
<br>
  >$ ./demo crypt<br>
<br>
Once it executes all of the mkosi configuration files and disk image<br>
are in the build-crypt sub-directory.  All relevant files specific to<br>
partition creation and encryption are in build-crypt/mkosi.extra -<br>
there are not many since I'm trying to keep the demo as simple as<br>
possible.  All relevant journal events and state information can be<br>
extracted from build-crypt/image.raw.<br>
<br>
Thanks for either directing me to a more appropriate help resource<br>
and/or providing direct assistance.<br>
<br>
<br>
P.S. If you want to run demo #1 of partition creation sans encryption<br>
then execute the following from the project source tree:<br>
<br>
  >$ ./demo clear<br>
</blockquote></div>