doc: Add section about inferiors.
* doc/guix.texi (Inferiors): New node. (Channels): Add xref to "Inferiors".
This commit is contained in:
parent
2dad031375
commit
92a9f14b9d
131
doc/guix.texi
131
doc/guix.texi
|
@ -147,6 +147,7 @@ Package Management
|
||||||
* Invoking guix gc:: Running the garbage collector.
|
* Invoking guix gc:: Running the garbage collector.
|
||||||
* Invoking guix pull:: Fetching the latest Guix and distribution.
|
* Invoking guix pull:: Fetching the latest Guix and distribution.
|
||||||
* Channels:: Customizing the package collection.
|
* Channels:: Customizing the package collection.
|
||||||
|
* Inferiors:: Interacting with another revision of Guix.
|
||||||
* Invoking guix describe:: Display information about your Guix revision.
|
* Invoking guix describe:: Display information about your Guix revision.
|
||||||
* Invoking guix pack:: Creating software bundles.
|
* Invoking guix pack:: Creating software bundles.
|
||||||
* Invoking guix archive:: Exporting and importing store files.
|
* Invoking guix archive:: Exporting and importing store files.
|
||||||
|
@ -1699,6 +1700,7 @@ guix package -i emacs-guix
|
||||||
* Invoking guix gc:: Running the garbage collector.
|
* Invoking guix gc:: Running the garbage collector.
|
||||||
* Invoking guix pull:: Fetching the latest Guix and distribution.
|
* Invoking guix pull:: Fetching the latest Guix and distribution.
|
||||||
* Channels:: Customizing the package collection.
|
* Channels:: Customizing the package collection.
|
||||||
|
* Inferiors:: Interacting with another revision of Guix.
|
||||||
* Invoking guix describe:: Display information about your Guix revision.
|
* Invoking guix describe:: Display information about your Guix revision.
|
||||||
* Invoking guix pack:: Creating software bundles.
|
* Invoking guix pack:: Creating software bundles.
|
||||||
* Invoking guix archive:: Exporting and importing store files.
|
* Invoking guix archive:: Exporting and importing store files.
|
||||||
|
@ -3053,6 +3055,135 @@ package it defines.
|
||||||
This gives you super powers, allowing you to track the provenance of binary
|
This gives you super powers, allowing you to track the provenance of binary
|
||||||
artifacts with very fine grain, and to reproduce software environments at
|
artifacts with very fine grain, and to reproduce software environments at
|
||||||
will---some sort of ``meta reproducibility'' capabilities, if you will.
|
will---some sort of ``meta reproducibility'' capabilities, if you will.
|
||||||
|
@xref{Inferiors}, for another way to take advantage of these super powers.
|
||||||
|
|
||||||
|
@node Inferiors
|
||||||
|
@section Inferiors
|
||||||
|
|
||||||
|
@c TODO: Remove this once we're more confident about API stability.
|
||||||
|
@quotation Note
|
||||||
|
The functionality described here is a ``technology preview'' as of version
|
||||||
|
@value{VERSION}. As such, the interface is subject to change.
|
||||||
|
@end quotation
|
||||||
|
|
||||||
|
@cindex inferiors
|
||||||
|
@cindex composition of Guix revisions
|
||||||
|
Sometimes you might need to mix packages from the revision of Guix you're
|
||||||
|
currently running with packages available in a different revision of Guix.
|
||||||
|
Guix @dfn{inferiors} allow you to achieve that by composing different Guix
|
||||||
|
revisions in arbitrary ways.
|
||||||
|
|
||||||
|
@cindex inferior packages
|
||||||
|
Technically, an ``inferior'' is essentially a separate Guix process connected
|
||||||
|
to your main Guix process through a REPL (@pxref{Invoking guix repl}). The
|
||||||
|
@code{(guix inferior)} module allows you to create inferiors and to
|
||||||
|
communicate with them. It also provides a high-level interface to browse and
|
||||||
|
manipulate the packages that an inferior provides---@dfn{inferior packages}.
|
||||||
|
|
||||||
|
When combined with channels (@pxref{Channels}), inferiors provide a simple way
|
||||||
|
to interact with a separate revision of Guix. For example, let's assume you
|
||||||
|
want to install in your profile the current @code{guile} package, along with
|
||||||
|
the @code{guile-json} as it existed in an older revision of Guix---perhaps
|
||||||
|
because the newer @code{guile-json} has an incompatible API and you want to
|
||||||
|
run your code against the old API@. To do that, you could write a manifest for
|
||||||
|
use by @code{guix package --manifest} (@pxref{Invoking guix package}); in that
|
||||||
|
manifest, you would create an inferior for that old Guix revision you care
|
||||||
|
about, and you would look up the @code{guile-json} package in the inferior:
|
||||||
|
|
||||||
|
@lisp
|
||||||
|
(use-modules (guix inferior) (guix channels)
|
||||||
|
(srfi srfi-1)) ;for 'first'
|
||||||
|
|
||||||
|
(define channels
|
||||||
|
;; This is the old revision from which we want to
|
||||||
|
;; extract guile-json.
|
||||||
|
(list (channel
|
||||||
|
(name 'guix)
|
||||||
|
(url "https://git.savannah.gnu.org/git/guix.git")
|
||||||
|
(commit
|
||||||
|
"65956ad3526ba09e1f7a40722c96c6ef7c0936fe"))))
|
||||||
|
|
||||||
|
(define inferior
|
||||||
|
;; An inferior representing the above revision.
|
||||||
|
(inferior-for-channels channels))
|
||||||
|
|
||||||
|
;; Now create a manifest with the current "guile" package
|
||||||
|
;; and the old "guile-json" package.
|
||||||
|
(packages->manifest
|
||||||
|
(list (first (lookup-inferior-packages inferior "guile-json"))
|
||||||
|
(specification->package "guile")))
|
||||||
|
@end lisp
|
||||||
|
|
||||||
|
On its first run, @command{guix package --manifest} might have to build the
|
||||||
|
channel you specified before it can create the inferior; subsequent runs will
|
||||||
|
be much faster because the Guix revision will be cached.
|
||||||
|
|
||||||
|
The @code{(guix inferior)} module provides the following procedures to open an
|
||||||
|
inferior:
|
||||||
|
|
||||||
|
@deffn {Scheme Procedure} inferior-for-channels @var{channels} @
|
||||||
|
[#:cache-directory] [#:ttl]
|
||||||
|
Return an inferior for @var{channels}, a list of channels. Use the cache at
|
||||||
|
@var{cache-directory}, where entries can be reclaimed after @var{ttl} seconds.
|
||||||
|
This procedure opens a new connection to the build daemon.
|
||||||
|
|
||||||
|
As a side effect, this procedure may build or substitute binaries for
|
||||||
|
@var{channels}, which can take time.
|
||||||
|
@end deffn
|
||||||
|
|
||||||
|
@deffn {Scheme Procedure} open-inferior @var{directory} @
|
||||||
|
[#:command "bin/guix"]
|
||||||
|
Open the inferior Guix in @var{directory}, running
|
||||||
|
@code{@var{directory}/@var{command} repl} or equivalent. Return @code{#f} if
|
||||||
|
the inferior could not be launched.
|
||||||
|
@end deffn
|
||||||
|
|
||||||
|
@cindex inferior packages
|
||||||
|
The procedures listed below allow you to obtain and manipulate inferior
|
||||||
|
packages.
|
||||||
|
|
||||||
|
@deffn {Scheme Procedure} inferior-packages @var{inferior}
|
||||||
|
Return the list of packages known to @var{inferior}.
|
||||||
|
@end deffn
|
||||||
|
|
||||||
|
@deffn {Scheme Procedure} lookup-inferior-packages @var{inferior} @var{name} @
|
||||||
|
[@var{version}]
|
||||||
|
Return the sorted list of inferior packages matching @var{name} in
|
||||||
|
@var{inferior}, with highest version numbers first. If @var{version} is true,
|
||||||
|
return only packages with a version number prefixed by @var{version}.
|
||||||
|
@end deffn
|
||||||
|
|
||||||
|
@deffn {Scheme Procedure} inferior-package? @var{obj}
|
||||||
|
Return true if @var{obj} is an inferior package.
|
||||||
|
@end deffn
|
||||||
|
|
||||||
|
@deffn {Scheme Procedure} inferior-package-name @var{package}
|
||||||
|
@deffnx {Scheme Procedure} inferior-package-version @var{package}
|
||||||
|
@deffnx {Scheme Procedure} inferior-package-synopsis @var{package}
|
||||||
|
@deffnx {Scheme Procedure} inferior-package-description @var{package}
|
||||||
|
@deffnx {Scheme Procedure} inferior-package-home-page @var{package}
|
||||||
|
@deffnx {Scheme Procedure} inferior-package-location @var{package}
|
||||||
|
@deffnx {Scheme Procedure} inferior-package-inputs @var{package}
|
||||||
|
@deffnx {Scheme Procedure} inferior-package-native-inputs @var{package}
|
||||||
|
@deffnx {Scheme Procedure} inferior-package-propagated-inputs @var{package}
|
||||||
|
@deffnx {Scheme Procedure} inferior-package-transitive-propagated-inputs @var{package}
|
||||||
|
@deffnx {Scheme Procedure} inferior-package-native-search-paths @var{package}
|
||||||
|
@deffnx {Scheme Procedure} inferior-package-transitive-native-search-paths @var{package}
|
||||||
|
@deffnx {Scheme Procedure} inferior-package-search-paths @var{package}
|
||||||
|
These procedures are the counterpart of package record accessors
|
||||||
|
(@pxref{package Reference}). Most of them work by querying the inferior
|
||||||
|
@var{package} comes from, so the inferior must still be live when you call
|
||||||
|
these procedures.
|
||||||
|
@end deffn
|
||||||
|
|
||||||
|
Inferior packages can be used transparently like any other package or
|
||||||
|
file-like object in G-expressions (@pxref{G-Expressions}). They are also
|
||||||
|
transparently handled by the @code{packages->manifest} procedure, which is
|
||||||
|
commonly use in manifests (@pxref{Invoking guix package, the
|
||||||
|
@option{--manifest} option of @command{guix package}}). Thus you can insert
|
||||||
|
an inferior package pretty much anywhere you would insert a regular package:
|
||||||
|
in manifests, in the @code{packages} field of your @code{operating-system}
|
||||||
|
declaration, and so on.
|
||||||
|
|
||||||
@node Invoking guix describe
|
@node Invoking guix describe
|
||||||
@section Invoking @command{guix describe}
|
@section Invoking @command{guix describe}
|
||||||
|
|
Loading…
Reference in New Issue