[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
New ‘guix offload’ build hook
New ‘guix offload’ build hook
Fri, 24 Jan 2014 00:18:15 +0100
Gnus/5.130007 (Ma Gnus v0.7) Emacs/24.3 (gnu/linux)
Finally support for offloading builds to other Guix machines has landed!
It’s still rough on the edges, but it does the job, and should allow us
to start having more than one machine (and one architecture) building
It requires Guile 2.0.10 (not yet released) though, and is not built
when this prerequisite is missing.
Below is the new documentation, for comments. The design is obviously
similar to that of Nix’s remote build facility, but I think it’s also
more flexible (machine file, PKI, etc.)
• Currently it connects to remote machine using GNU lsh, but I’d like
to switch to Guile-SSH, because that will provide finer control.
• On IRC Mark rightfully pointed out that it would be nice to keep a
signature of the machine that actually built an element (currently,
signatures are checked and then discarded.) I realized they could
actually easily be kept around in $localstatedir, and possibly
reused as-is upon export.
• Fixing bugs, FIXMEs, etc.
2.2.2 Using the Offload Facility
The build daemon can "offload" derivation builds to other machines
running Guix, using the ‘offload’ "build hook". When that feature is
enabled, a list of user-specified build machines is read from
‘/etc/guix/machines.scm’; anytime a build is requested, for instance via
‘guix build’, the daemon attempts to offload it to one of the machines
that satisfies the derivation’s constraints, in particular its system
type—e.g., ‘x86_64-linux’. Missing prerequisites for the build are
copied over SSH to the target machine, which then proceeds with the
build; upon success the output(s) of the build are copied back to the
The ‘/etc/guix/machines.scm’ is—not surprisingly!—a Scheme file whose
return value must be a list of ‘build-machine’ objects. In practice, it
typically looks like this:
(speed 2.)) ; incredibly fast!
(string-append (getenv "HOME")
In the example above we specify a list of two build machines, one for
the ‘x86_64’ architecture and one for the ‘mips64el’ architecture. The
compulsory fields for a ‘build-machine’ declaration are:
The remote machine’s host name.
The remote machine’s system type.
The user account to use when connecting to the remote machine over
SSH. Note that the SSH key pair must _not_ be passphrase-protected,
to allow non-interactive logins.
A number of optional fields may be optionally specified:
The SSH private key file to use when connecting to the machine.
The number of builds that may run in parallel on the machine (1 by
A “relative speed factor”. The offload scheduler will tend to
prefer machines with a higher speed factor.
A list of strings denoting specific features supported by the
machine. An example is ‘"kvm"’ for machines that have the KVM
Linux modules and corresponding hardware support. Derivations can
request features by name, and they will be scheduled on matching
The ‘guix’ command must be in the search path on the build machines,
since offloading works by invoking the ‘guix archive’ and ‘guix build’
There’s one last thing to do once ‘machines.scm’ is in place. As
explained above, when offloading, files are transferred back and forth
between the machine stores. For this to work, you need to generate a
key pair to allow the daemon to export signed archives of files from the
store (*note Invoking guix archive::):
# guix archive --generate-key
Thus, when receiving files, a machine’s build daemon can make sure they
are genuine, have not been tampered with, and that they are signed by an
|[Prev in Thread]
||[Next in Thread]|
- New ‘guix offload’ build hook,
Ludovic Courtès <=