help-guix
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: udev rules and system configuration


From: Ludovic Courtès
Subject: Re: udev rules and system configuration
Date: Tue, 05 Jul 2016 10:34:37 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.5 (gnu/linux)

Hello!

Ricardo Wurmus <address@hidden> skribis:

> Ludovic Courtès <address@hidden> writes:
>
>> Ricardo Wurmus <address@hidden> skribis:
>
>>> Here’s an idea, which might be bad: how about adding a feature to load
>>> and merge a directory tree of configuration files as they are?  For
>>> example, if I had a directory “/etc/guix/system/udev/rules.d” then all
>>> files therein would automatically be considered part of the system
>>> configuration, maybe after adding “/etc/guix/system” as a prefix path to
>>> some new field in the “operating-system” declaration.
>>>
>>> I have a feeling that this will be considered a bad idea, but it also
>>> seems to me that it would make the configuration of some parts of the
>>> system easier than embedding file contents as strings in variables in
>>> “/etc/config.scm” and modifying services manually.

[...]

> These files are not loaded at system runtime but upon running “guix
> system reconfigure”.  Their contents *at that time* would be embedded in
> the configuration.  Their state *at runtime* would not matter (just like
> the contents of “config.scm” don’t matter at runtime).
>
> The files would become part of the configuration in the store.  Changing
> them would always require the additional step of reconfiguring the
> system.

OK, I had misunderstood your suggestion.  It doesn’t have the drawbacks
I mentioned.

However, I don’t like the idea of having special directories that are
automatically scanned.  In my mind, it’s a problem similar to “macro
hygiene”: we should not scan files whose name does not appear in
config.scm.

>> However, what we can do is improve the interface.  Things that come to
>> mind:
>>
>>   1. Change or remove the ‘udev-rule’ procedure; we should be using
>>      file-like objects instead, so one could store them alongside
>>      config.scm and write:
>>
>>        (local-file "./my-udev-rule")
>
> Is this really so different from the bad idea I proposed?  As soon as we
> load files outside of “config.scm” users would need to copy more than
> just the GuixSD config file to duplicate the system state on another
> machine.  In this example we would need both “config.scm” and
> “my-udev-rule” in the same directory.

It’s similar to your idea, except that the file is explicitly named in
the <operating-system> object.

If that helps, we could also allow users to specify a directory
containing several rules, instead of just a single rule:

  (local-file "./my-udev-rule-directory")

>>   2. Add a ‘extra-udev-rule’ procedure that you could use like this:
>>
>>        (operating-system
>>          ;; …
>>          (services (extra-udev-rule (local-file "./my-udev-rule"))
>>                    …))
>>
>>      thus avoiding the verbose ‘modify-services’ stanza.
>>
>>   3. (Instead of #2) Introduce a ‘udev-rules’ field in
>>      ‘operating-system’, just like we do for firmware.
>>
>> WDYT?
>
> I don’t know.  Although this would simplify configuration I don’t really
> like either of them for somewhat conflicting reasons.  #3 gives special
> treatment to udev rules (“What about Xorg config snippets?”), and with
> #2 it seems like an unnecessary implementation detail that this
> “extra-udev-rule” procedure is inside of the “services” field (“How come
> this is a service?”).
>
> I also feel that we should avoid adding “special” syntax.  Actually, I
> really like how generic this whole “modify-services” business is.  It’s
> just a little too verbose to be user-friendly, in my opinion.

I sympathize with that.

In fact, <operating-system> translates to a <service> graph.  The whole
<operating-system> thing is just “syntax.”

I would like to have a more formal way to describe this translation.  I
think this would allow us to fearlessly add or remove fields to
<operating-system>.  But I don’t know how to achieve it.

In the meantime, we should still address the usability issue that you
raised, which is why I made these suggestions.

Thoughts?

Thank you,
Ludo’.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]