Subject: bug#22774: Bootstrapping issue with HTTPS downloads

From: [email-masked] (Ludovic Courtès)
Date: Sat, 29 Oct 2016 01:43:13 +0200

[email-masked] (Ludovic Courtès) skribis:

> Fixed-output derivations for HTTPS downloads depend on GnuTLS.  However,
> pkg-config, one of GnuTLS’s dependencies, is now available exclusively
> over HTTPS, which creates a bootstrapping issue, as reported by
> Christopher W Carpenter and others:
>
>   https://lists.gnu.org/archive/html/guix-devel/2016-02/msg00354.html

The ‘wip-oob-download’ implements “out-of-band downloads”, whereby
downloads are performed by the daemon on behalf of clients.

This works by adding a “built-in builder” in the daemon (idea stolen
from the Nix daemon): if you specify “builtin:download” as the builder
of your derivation, then guix-daemon invokes ‘guix download’ to download
the thing.  The derivation has to be fixed-output, of course.

The branch is not ready yet, notably because we’d need a way to pass
mirror lists to ‘guix download’, as an attribute of the derivation.

Another question is compatibility: what if a recent client creates a
“builtin:download” derivation on an old daemon?  The problem is that
currently old daemons do not check the builder of the .drv file until
you call ‘build-derivations’.  So I think we’ll need to bump the
protocol version so client code can check whether the daemon is new
enough.

Thoughts?

The good thing is that this should allow us to get rid of the bootstrap
binaries that are currently distributed in the source tarball of Guix
and downloaded upon ‘make’:

  https://www.gnu.org/software/guix/manual/html_node/Bootstrapping.html#Preparing-to-Use-the-Bootstrap-Binaries

This was motivated precisely by the need for an out-of-band download
mechanism for bootstrapping, which we’ll then have within guix-daemon.

Ludo’.