unofficial mirror of bug-guix@gnu.org 
 help / color / mirror / code / Atom feed
* bug#20720: Inconsistency in text fields for 'operating-system'
@ 2015-06-02 14:58 Alex Kost
  2015-06-03  9:52 ` Ludovic Courtès
  0 siblings, 1 reply; 8+ messages in thread
From: Alex Kost @ 2015-06-02 14:58 UTC (permalink / raw)
  To: 20720

Hello, this is not a bug report, but a feature request.

I see some inconsistency in specifying text / text files in an
operating-system declaration:

- ‘sudoers’ and ‘issue’ want plain strings;

- ‘hosts-file’ and ‘mingetty-service’ (#:motd argument) want a
  'text-file' monadic procedure;

- some other services (‘syslog-service’, ‘lirc-service’, ...) want file
  names (of the configuration files).

As for me, I prefer the latter variant.  But I think the best would be
to add support for any of the above possibilities for all services or
operating-system fields.

-- 
Alex

^ permalink raw reply	[flat|nested] 8+ messages in thread

* bug#20720: Inconsistency in text fields for 'operating-system'
  2015-06-02 14:58 bug#20720: Inconsistency in text fields for 'operating-system' Alex Kost
@ 2015-06-03  9:52 ` Ludovic Courtès
  2015-06-04 14:43   ` Alex Kost
  0 siblings, 1 reply; 8+ messages in thread
From: Ludovic Courtès @ 2015-06-03  9:52 UTC (permalink / raw)
  To: Alex Kost; +Cc: 20720

Alex Kost <alezost@gmail.com> skribis:

> I see some inconsistency in specifying text / text files in an
> operating-system declaration:

Yeah, I agree it is somewhat annoying that there’s no single way to
handle this.  But...

> - ‘sudoers’ and ‘issue’ want plain strings;
>
> - ‘hosts-file’ and ‘mingetty-service’ (#:motd argument) want a
>   'text-file' monadic procedure;
>
> - some other services (‘syslog-service’, ‘lirc-service’, ...) want file
>   names (of the configuration files).

In reality they take a “file”, not a file name.  A file is an object
that within a gexp expands to a file name.  So it can be a ‘local-file’
object, a derivation, etc.

> As for me, I prefer the latter variant.  But I think the best would be
> to add support for any of the above possibilities for all services or
> operating-system fields.

An important criterion is whether the file needs to contain references
to store items or not.  For ‘sudoers’ and ‘issue’, that’s normally not
the case, and these are usually small files or computable files, so I
think it’s fine to use strings here (more convenient than files.)

Using monadic values as for ‘hosts-file’ and #:motd is not nice.  These
should be changed to use either a string or a file.

The best would be to always use a file-like object.  I’ve just added
‘plain-file’ for that reason.  Now I would change #:motd and
‘hosts-file’ to take a file-like object rather than a monadic value.

WDYT?


This brings up the question of how far we should go on the declarative
side: Similar to ‘local-file’ and ‘plain-file’, should we add more
declarative types, say for ‘gexp->derivation’?

My current inclination would be to not add anything beyond ‘local-file’
and ‘plain-file’: These two are useful in OS configurations, so that’s
fine, but for more elaborate things people should just use the
procedural interface.  Thoughts?

Thanks,
Ludo’.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* bug#20720: Inconsistency in text fields for 'operating-system'
  2015-06-03  9:52 ` Ludovic Courtès
@ 2015-06-04 14:43   ` Alex Kost
  2015-06-05 12:30     ` Ludovic Courtès
  0 siblings, 1 reply; 8+ messages in thread
From: Alex Kost @ 2015-06-04 14:43 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: 20720

Ludovic Courtès (2015-06-03 12:52 +0300) wrote:

> Alex Kost <alezost@gmail.com> skribis:
>
>> I see some inconsistency in specifying text / text files in an
>> operating-system declaration:
>
> Yeah, I agree it is somewhat annoying that there’s no single way to
> handle this.  But...
>
>> - ‘sudoers’ and ‘issue’ want plain strings;
>>
>> - ‘hosts-file’ and ‘mingetty-service’ (#:motd argument) want a
>>   'text-file' monadic procedure;
>>
>> - some other services (‘syslog-service’, ‘lirc-service’, ...) want file
>>   names (of the configuration files).
>
> In reality they take a “file”, not a file name.  A file is an object
> that within a gexp expands to a file name.  So it can be a ‘local-file’
> object, a derivation, etc.

Ah, thanks!  I didn't realize that ‘local-file’ or a derivation may be
used there.

>> As for me, I prefer the latter variant.  But I think the best would
>> be to add support for any of the above possibilities for all services
>> or operating-system fields.
>
> An important criterion is whether the file needs to contain references
> to store items or not.  For ‘sudoers’ and ‘issue’, that’s normally not
> the case, and these are usually small files or computable files, so I
> think it’s fine to use strings here (more convenient than files.)

Well, I don't agree about ‘sudoers’.  It may be a really big file.  Mine
is not so big, but it is 40 lines long (including some useful comments),
so I have to use some additional guile code to convert the contents of
the file into string.

> Using monadic values as for ‘hosts-file’ and #:motd is not nice.  These
> should be changed to use either a string or a file.
>
> The best would be to always use a file-like object.  I’ve just added
> ‘plain-file’ for that reason.  Now I would change #:motd and
> ‘hosts-file’ to take a file-like object rather than a monadic value.
>
> WDYT?

I beg a pardon, but if I inderstand it correctly (probably not), I don't
see a difference from the user point of view.  Previously it was:

  (hosts-file (text-file "hosts" "..."))

and now it would be:

  (hosts-file (plain-file "hosts" "..."))

> This brings up the question of how far we should go on the declarative
> side: Similar to ‘local-file’ and ‘plain-file’, should we add more
> declarative types, say for ‘gexp->derivation’?
>
> My current inclination would be to not add anything beyond ‘local-file’
> and ‘plain-file’: These two are useful in OS configurations, so that’s
> fine, but for more elaborate things people should just use the
> procedural interface.  Thoughts?

I think I'm not competent as I have a vague understanding of all this
stuff and of user's needs (except mine ☺).  What I would like to have,
is a possibility to specify my configuration files for various services
and operating-system fields.  I don't want to write text configs in my
os-config.scm file (as it happens now with ‘hosts-file’).

I'm very happy with the current behaviour of ‘syslog-service’,
‘lirc-service’ and ‘console-keymap-service’ where I just specify file
names, e.g.:

  (syslog-service #:config-file "/home/me/my-favourite-syslog.conf")

and I like this ↑ way of specifying configurations very much!  That's
what I would like to see in ‘sudoers’ and ‘hosts-file’ fields.

-- 
Thanks,
Alex

^ permalink raw reply	[flat|nested] 8+ messages in thread

* bug#20720: Inconsistency in text fields for 'operating-system'
  2015-06-04 14:43   ` Alex Kost
@ 2015-06-05 12:30     ` Ludovic Courtès
  2015-06-05 13:27       ` Alex Kost
  0 siblings, 1 reply; 8+ messages in thread
From: Ludovic Courtès @ 2015-06-05 12:30 UTC (permalink / raw)
  To: Alex Kost; +Cc: 20720

Alex Kost <alezost@gmail.com> skribis:

> Ludovic Courtès (2015-06-03 12:52 +0300) wrote:

[...]

>> An important criterion is whether the file needs to contain references
>> to store items or not.  For ‘sudoers’ and ‘issue’, that’s normally not
>> the case, and these are usually small files or computable files, so I
>> think it’s fine to use strings here (more convenient than files.)
>
> Well, I don't agree about ‘sudoers’.  It may be a really big file.  Mine
> is not so big, but it is 40 lines long (including some useful comments),
> so I have to use some additional guile code to convert the contents of
> the file into string.

Ah, good point.  So let’s turn ‘sudoers’ into a file-like object.

>> Using monadic values as for ‘hosts-file’ and #:motd is not nice.  These
>> should be changed to use either a string or a file.
>>
>> The best would be to always use a file-like object.  I’ve just added
>> ‘plain-file’ for that reason.  Now I would change #:motd and
>> ‘hosts-file’ to take a file-like object rather than a monadic value.
>>
>> WDYT?
>
> I beg a pardon, but if I inderstand it correctly (probably not), I don't
> see a difference from the user point of view.  Previously it was:
>
>   (hosts-file (text-file "hosts" "..."))
>
> and now it would be:
>
>   (hosts-file (plain-file "hosts" "..."))

Right.  But it could also be:

  (hosts-file (local-file "/home/foo/my-hosts-file.txt"))

This form is pleasant when the file can be long or when it has special
syntax and you’d rather use the editor’s syntax highlighting.

> I think I'm not competent as I have a vague understanding of all this
> stuff and of user's needs (except mine ☺).  What I would like to have,
> is a possibility to specify my configuration files for various services
> and operating-system fields.  I don't want to write text configs in my
> os-config.scm file (as it happens now with ‘hosts-file’).

OK.  So that’s definitely in favor of using file-like objects pretty
much everywhere.

> I'm very happy with the current behaviour of ‘syslog-service’,
> ‘lirc-service’ and ‘console-keymap-service’ where I just specify file
> names, e.g.:
>
>   (syslog-service #:config-file "/home/me/my-favourite-syslog.conf")
>
> and I like this ↑ way of specifying configurations very much!  That's
> what I would like to see in ‘sudoers’ and ‘hosts-file’ fields.

OK.  Note that this form (directly using a local file name) works
somewhat by chance and should not be used because it defeats
reproducibility.  That is, your OS configuration actually depends on
that file in /home, which may be modified or deleted anytime, thereby
changing the syslogd behavior in unpredicable ways.

The right thing to do is:

  (syslog-service #:config-file
                  (local-file "/home/me/my-favourite-syslog.conf"))

This means that the config file is automatically added to the store and
made part of the closure of the OS config.  Now if
"/home/me/my-favourite-syslog.conf" is removed/modified, the OS behavior
remains unchanged.

I’ll prepare a patch for that and report back.

Thank you!

Ludo’.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* bug#20720: Inconsistency in text fields for 'operating-system'
  2015-06-05 12:30     ` Ludovic Courtès
@ 2015-06-05 13:27       ` Alex Kost
  2015-06-05 20:47         ` Ludovic Courtès
  0 siblings, 1 reply; 8+ messages in thread
From: Alex Kost @ 2015-06-05 13:27 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: 20720

Ludovic Courtès (2015-06-05 15:30 +0300) wrote:

> Alex Kost <alezost@gmail.com> skribis:
>
>> Ludovic Courtès (2015-06-03 12:52 +0300) wrote:
>
> [...]
>
>>> An important criterion is whether the file needs to contain references
>>> to store items or not.  For ‘sudoers’ and ‘issue’, that’s normally not
>>> the case, and these are usually small files or computable files, so I
>>> think it’s fine to use strings here (more convenient than files.)
>>
>> Well, I don't agree about ‘sudoers’.  It may be a really big file.  Mine
>> is not so big, but it is 40 lines long (including some useful comments),
>> so I have to use some additional guile code to convert the contents of
>> the file into string.
>
> Ah, good point.  So let’s turn ‘sudoers’ into a file-like object.

Thanks!

>>> Using monadic values as for ‘hosts-file’ and #:motd is not nice.  These
>>> should be changed to use either a string or a file.
>>>
>>> The best would be to always use a file-like object.  I’ve just added
>>> ‘plain-file’ for that reason.  Now I would change #:motd and
>>> ‘hosts-file’ to take a file-like object rather than a monadic value.
>>>
>>> WDYT?
>>
>> I beg a pardon, but if I inderstand it correctly (probably not), I don't
>> see a difference from the user point of view.  Previously it was:
>>
>>   (hosts-file (text-file "hosts" "..."))
>>
>> and now it would be:
>>
>>   (hosts-file (plain-file "hosts" "..."))
>
> Right.  But it could also be:
>
>   (hosts-file (local-file "/home/foo/my-hosts-file.txt"))
>
> This form is pleasant when the file can be long or when it has special
> syntax and you’d rather use the editor’s syntax highlighting.

Ah, This is great! Thank you.

>> I think I'm not competent as I have a vague understanding of all this
>> stuff and of user's needs (except mine ☺).  What I would like to have,
>> is a possibility to specify my configuration files for various services
>> and operating-system fields.  I don't want to write text configs in my
>> os-config.scm file (as it happens now with ‘hosts-file’).
>
> OK.  So that’s definitely in favor of using file-like objects pretty
> much everywhere.

Yes :-)

>> I'm very happy with the current behaviour of ‘syslog-service’,
>> ‘lirc-service’ and ‘console-keymap-service’ where I just specify file
>> names, e.g.:
>>
>>   (syslog-service #:config-file "/home/me/my-favourite-syslog.conf")
>>
>> and I like this ↑ way of specifying configurations very much!  That's
>> what I would like to see in ‘sudoers’ and ‘hosts-file’ fields.
>
> OK.  Note that this form (directly using a local file name) works
> somewhat by chance and should not be used because it defeats
> reproducibility.  That is, your OS configuration actually depends on
> that file in /home, which may be modified or deleted anytime, thereby
> changing the syslogd behavior in unpredicable ways.

Yes, that's exactly what I want!  I realize the benefits of the
reproducibility but often I just want my system to depend on
/home/... files that can be modified anytime.

> The right thing to do is:
>
>   (syslog-service #:config-file
>                   (local-file "/home/me/my-favourite-syslog.conf"))
>
> This means that the config file is automatically added to the store and
> made part of the closure of the OS config.  Now if
> "/home/me/my-favourite-syslog.conf" is removed/modified, the OS behavior
> remains unchanged.

And that's exactly what I don't want!  I don't want my config files to
be put into the store.  Because I have to reconfigure the system to see
the changes.  With my current unpredicable way, I can change my
syslog.conf and the next time I boot into the same system, I will face
the changes I made.

I realize that it sounds like a strange whim and is not what is supposed
to be done, but, well, I just like it :-)

> I’ll prepare a patch for that and report back.

Thank you, in spite of all I said earlier, I really like ‘local-file’!

-- 
Alex

^ permalink raw reply	[flat|nested] 8+ messages in thread

* bug#20720: Inconsistency in text fields for 'operating-system'
  2015-06-05 13:27       ` Alex Kost
@ 2015-06-05 20:47         ` Ludovic Courtès
  2015-06-06 17:38           ` Alex Kost
  0 siblings, 1 reply; 8+ messages in thread
From: Ludovic Courtès @ 2015-06-05 20:47 UTC (permalink / raw)
  To: Alex Kost; +Cc: 20720

Alex Kost <alezost@gmail.com> skribis:

> Ludovic Courtès (2015-06-05 15:30 +0300) wrote:

[...]

>> The right thing to do is:
>>
>>   (syslog-service #:config-file
>>                   (local-file "/home/me/my-favourite-syslog.conf"))
>>
>> This means that the config file is automatically added to the store and
>> made part of the closure of the OS config.  Now if
>> "/home/me/my-favourite-syslog.conf" is removed/modified, the OS behavior
>> remains unchanged.
>
> And that's exactly what I don't want!  I don't want my config files to
> be put into the store.  Because I have to reconfigure the system to see
> the changes.  With my current unpredicable way, I can change my
> syslog.conf and the next time I boot into the same system, I will face
> the changes I made.
>
> I realize that it sounds like a strange whim and is not what is supposed
> to be done, but, well, I just like it :-)

Fair enough.  :-)

Well, that will keep working, because we can’t really enforce config
files in the store.

Now, of course the solution will be for ‘guix system reconfigure’ to
restart services that can be restarted.  The goal is not to force people
to reboot for changes to take effect. :-)  That “just” has to be done.

>> I’ll prepare a patch for that and report back.
>
> Thank you, in spite of all I said earlier, I really like ‘local-file’!

Commits 24e02c2 and 8476583 change ‘hosts-file’ and ‘sudoers’ as
discussed.  Are there others left or can we close the bug?

Thanks!

Ludo’.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* bug#20720: Inconsistency in text fields for 'operating-system'
  2015-06-05 20:47         ` Ludovic Courtès
@ 2015-06-06 17:38           ` Alex Kost
  2015-06-07 15:16             ` Ludovic Courtès
  0 siblings, 1 reply; 8+ messages in thread
From: Alex Kost @ 2015-06-06 17:38 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: 20720

Ludovic Courtès (2015-06-05 23:47 +0300) wrote:

> Alex Kost <alezost@gmail.com> skribis:
>
>> Ludovic Courtès (2015-06-05 15:30 +0300) wrote:
>
> [...]
>
> Now, of course the solution will be for ‘guix system reconfigure’ to
> restart services that can be restarted.  The goal is not to force people
> to reboot for changes to take effect. :-)  That “just” has to be done.

Yeah, that will be a great feature some day :-)

>>> I’ll prepare a patch for that and report back.
>>
>> Thank you, in spite of all I said earlier, I really like ‘local-file’!
>
> Commits 24e02c2 and 8476583 change ‘hosts-file’ and ‘sudoers’ as
> discussed.  Are there others left or can we close the bug?

My needs are completely satisfied now, thank you very much!  The bug can
be closed I think.

-- 
Alex

^ permalink raw reply	[flat|nested] 8+ messages in thread

* bug#20720: Inconsistency in text fields for 'operating-system'
  2015-06-06 17:38           ` Alex Kost
@ 2015-06-07 15:16             ` Ludovic Courtès
  0 siblings, 0 replies; 8+ messages in thread
From: Ludovic Courtès @ 2015-06-07 15:16 UTC (permalink / raw)
  To: Alex Kost; +Cc: 20720-done

Alex Kost <alezost@gmail.com> skribis:

> My needs are completely satisfied now, thank you very much!  The bug can
> be closed I think.

Great, thanks!

Ludo'.

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2015-06-07 15:17 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-06-02 14:58 bug#20720: Inconsistency in text fields for 'operating-system' Alex Kost
2015-06-03  9:52 ` Ludovic Courtès
2015-06-04 14:43   ` Alex Kost
2015-06-05 12:30     ` Ludovic Courtès
2015-06-05 13:27       ` Alex Kost
2015-06-05 20:47         ` Ludovic Courtès
2015-06-06 17:38           ` Alex Kost
2015-06-07 15:16             ` Ludovic Courtès

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).