From: Jookia <166291@gmail.com>
To: "Ludovic Courtès" <ludo@gnu.org>
Cc: guix-devel@gnu.org
Subject: Re: [PATCH] DISCUSSION: Jookia's Libreboot+LUKS+LVM FDE patch.
Date: Sat, 12 Mar 2016 03:42:36 +1100 [thread overview]
Message-ID: <20160311164236.GB28593@novena-choice-citizen.lan> (raw)
In-Reply-To: <871t7h140d.fsf@gnu.org>
On Fri, Mar 11, 2016 at 03:30:10PM +0100, Ludovic Courtès wrote:
> Jookia <166291@gmail.com> skribis:
>
> > I'd really like to discuss how much I needed to break to get the mapped-devices,
> > file-systems and swap-devices to just 'work'. I even had to make a function to
> > return a mapped-device type, and have swap-devices not do dependency tests since
> > I technically don't use a device I've defined.
> >
> > It'd be much much better if I could do something like this in my services:
> >
> > (devices (list (file-system
> > (uses '("/dev/matrix/root"))
> > (creates '("/"))
> > (device "/dev/matrix/root")
> > (mount-point "/")
> > (type "ext4"))
> > (swap-device
> > (uses '("/dev/mapper/matrix-swap"))
> > (creates '()))
> > (device "/dev/mapper/matrix-swap")
> > (lvm-device
> > (uses '("/dev/mapper/hdd" "/dev/sdb"))
> > (creates '("/dev/matrix/"
> > "/dev/mapper/matrix-swap"))
> > (devices '("/dev/mapper/hdd" "/dev/sdb")))
> > (luks-device
> > (uses '("UUID=4dab5feb-d176-45de-b287-9b0a6e4c01cb"))
> > (creates '("/dev/mapper/hdd"))
> > (device "UUID=4dab5feb-d176-45de-b287-9b0a6e4c01cb")
> > (name "hdd")
> > (key-file "..."))))
> >
> > The issue is that it has a lot of duplicate information as I'm not sure
> > uses/creates could always map to device/mount-point, like LUKS names. But this
> > should satisfy most dependency issues automatically, I hope.
>
> There are several issues being addressed here, IIUC:
>
> 1. How to refer to block devices (in the Unix sense) using UUIDs,
> labels, or /dev file names in general, and not just for
> ‘file-system’.
Yes, this is one of the major problems.
> 2. How to determine dependencies among all these things.
Shouldn't be too hard if we have inputs and outputs for each.
> 3. How to handle mapped devices that lead to several /dev nodes, as is
> the case with LVM.
Well, it's a bit more complex than that. We end up with filesystems that use
multiple devices too, like Btrfs.
I was also showing another point: It'd be nicer to have file-system,
swap-device, lvm-device, luks-device as functions rather than data structures.
I was a bit tired when writing and realized later on that the functions could
automatically create the uses/creates stuff as output. I'll show another
hypothetical, though I see interest in keeping the existing way.
> For #1, I would like to have a general ‘device’ type, so one could
> write:
>
> (operating-system
> ;; …
> (file-systems (list (file-system
> (source (device (title 'label)
> (name "my-root")))
> (mount-point "/"))))
> (swap (list (device
> (title 'uuid)
> (name (uuid "4dab5feb-d176-45de-b287-9b0a6e4c01cb")))))
>
> For that to work, we ideally need code to recognize swap signatures,
> similar to what we do for ext2 in (gnu build file-systems).
This would work, but not all file-systems use devices. Bind/union mounts, for
one, which is why having them as paths would be perhaps easier to resolve. I'm
skeptical we could have a single file-system data structure that could account
for all this, which is why I'd much rather like functions that output stuff:
(devices (list (file-system
#:device "/dev/matrix/root"
#:mount-point "/"
#:type "ext4")
(swap-device
#:device "/dev/mapper/matrix-swap")
(lvm-device
#:targets '("/dev/matrix/"
"/dev/mapper/matrix-swap")
#:devices (list "/dev/mapper/hdd" "/dev/sdb"))
(luks-device
#:device "UUID=4dab5feb-d176-45de-b287-9b0a6e4c01cb"
#:name "hdd"
#:key-file "...")))
which could output this tree:
(devices (list (device
(uses '("/dev/matrix/root"))
(creates '("/"))
(init-function ...)
(destroy-function ...))
(swap-device
(uses '("/dev/mapper/matrix-swap"))
(creates '()))
(init-function ...)
(destroy-function ...))
(lvm-device
(uses '("/dev/mapper/hdd" "/dev/sdb"))
(creates '("/dev/matrix/"
"/dev/mapper/matrix-swap"))
(init-function ...)
(destroy-function ...))
(luks-device
(uses '("UUID=4dab5feb-d176-45de-b287-9b0a6e4c01cb"))
(creates '("/dev/mapper/hdd"))
(init-function ...)
(destroy-function ...)))
Though this is a bit of a dream in my case.
> For #2, I’m not sure we need to change anything, but let’s discuss it
> later. :-)
Hmm, okay.
There also a small issue where mapped devices need more data in special cases,
like LUKS keyfiles which returns a function to create the type.
> Ludo’.
Jookia.
next prev parent reply other threads:[~2016-03-11 16:45 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-03-10 0:36 [PATCH] DISCUSSION: Jookia's Libreboot+LUKS+LVM FDE patch Jookia
2016-03-10 7:48 ` Taylan Ulrich Bayırlı/Kammer
2016-03-10 12:36 ` Jookia
2016-03-10 16:10 ` Ludovic Courtès
2016-03-10 21:11 ` Jookia
2016-03-11 14:30 ` Ludovic Courtès
2016-03-11 16:42 ` Jookia [this message]
2016-03-15 14:40 ` Ludovic Courtès
2016-03-16 1:23 ` Jookia
2016-03-14 21:40 ` Jean Louis
-- strict thread matches above, loose matches on Subject: below --
2016-03-10 0:36 Jookia
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://guix.gnu.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160311164236.GB28593@novena-choice-citizen.lan \
--to=166291@gmail.com \
--cc=guix-devel@gnu.org \
--cc=ludo@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/guix.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).