Subject: Re: [bug#44900] [PATCH] services: unattended-upgrade: Add 'search-paths' field.

From: Ludovic Courtès <[email-masked]>
Date: Sat, 28 Nov 2020 11:33:55 +0100

Hi,

Lars-Dominik Braun <[email-masked]> skribis:

> I’m using a modular machine configuration, i.e. the scheme file returning the
> operating system definition imports several other custom modules with service
> definitions etc in the same directory. This does not work well with unattended
> upgrades. The attached patch allows adding search paths to the unattended
> upgrade service. I’m not sure this is the best solution though. Maybe the
> preferred way to add these modules is to a custom channel?

Did you see (info "(guix) Unattended Upgrades"):

          There are cases, though, where referring to
          ‘/run/current-system/configuration.scm’ is not enough, for
          instance because that file refers to extra files (SSH public
          keys, extra configuration files, etc.)  via ‘local-file’ and
          similar constructs.  For those cases, we recommend something
          along these lines:

               (unattended-upgrade-configuration
                 (operating-system-file
                   (file-append (local-file "." "config-dir" #:recursive? #t)
                                "/config.scm")))

          The effect here is to import all of the current directory into
          the store, and to refer to ‘config.scm’ within that directory.
          Therefore, uses of ‘local-file’ within ‘config.scm’ will work
          as expected.  *Note G-Expressions::, for information about
          ‘local-file’ and ‘file-append’.

I can see several options:

  1. Use the trick above and add (say):

       (add-to-load-path (dirname (current-filename)))

     in your config file.  Not pretty.

  2. Turn your modules into a channel.  Nice because there’s no need for
     a special case, modules are automatically updated at each upgrade,
     etc., but OTOH requires more paperwork.

  3. What you propose.  Easy to use but a bit low-level and users could
     be tempted to pass local file names instead of using ‘local-file’,
     in which case the process becomes more brittle (depends on things
     outside the store).

> The second patch changes the default channels to #f, i.e. the system default
> (/etc/guix/channels.scm), which feels more natural to me.

I prefer being explicit here and keep ‘unattended-upgrade-configuration’
self-contained (/etc/guix/channels.scm could be modified behind our
back).

WDYT?

Thanks,
Ludo’.