From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jookia <166291@gmail.com> Subject: Re: [PATCH] DISCUSSION: Jookia's Libreboot+LUKS+LVM FDE patch. Date: Sat, 12 Mar 2016 03:42:36 +1100 Message-ID: <20160311164236.GB28593@novena-choice-citizen.lan> References: <56e0c4cf.08d0190a.6a127.0d35@mx.google.com> <87r3fitiu6.fsf@gnu.org> <20160310211149.GA17073@novena-choice-citizen.lan> <871t7h140d.fsf@gnu.org> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:55576) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from <166291@gmail.com>) id 1aeQBn-000409-3j for guix-devel@gnu.org; Fri, 11 Mar 2016 11:45:24 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from <166291@gmail.com>) id 1aeQBl-0006gx-TQ for guix-devel@gnu.org; Fri, 11 Mar 2016 11:45:23 -0500 Content-Disposition: inline In-Reply-To: <871t7h140d.fsf@gnu.org> List-Id: "Development of GNU Guix and the GNU System distribution." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org Sender: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org To: Ludovic =?iso-8859-1?Q?Court=E8s?= Cc: guix-devel@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.