2020-07-22 21:17:48 +00:00
|
|
|
|
# Glossary
|
|
|
|
|
|
2022-05-25 10:36:46 +00:00
|
|
|
|
- [derivation]{#gloss-derivation}\
|
2020-07-22 21:17:48 +00:00
|
|
|
|
A description of a build action. The result of a derivation is a
|
|
|
|
|
store object. Derivations are typically specified in Nix expressions
|
2022-08-04 09:36:32 +00:00
|
|
|
|
using the [`derivation` primitive](language/derivations.md). These are
|
2020-07-22 21:17:48 +00:00
|
|
|
|
translated into low-level *store derivations* (implicitly by
|
|
|
|
|
`nix-env` and `nix-build`, or explicitly by `nix-instantiate`).
|
|
|
|
|
|
2022-09-01 21:41:27 +00:00
|
|
|
|
- [content-addressed derivation]{#gloss-content-addressed-derivation}\
|
|
|
|
|
A derivation which has the
|
2022-09-02 00:46:31 +00:00
|
|
|
|
[`__contentAddressed`](language/advanced-attributes.md#adv-attr-__contentAddressed)
|
2022-09-01 21:41:27 +00:00
|
|
|
|
attribute set to `true`.
|
2022-09-01 21:09:06 +00:00
|
|
|
|
|
2022-09-01 21:41:27 +00:00
|
|
|
|
- [fixed-output derivation]{#gloss-fixed-output-derivation}\
|
2022-09-01 21:47:33 +00:00
|
|
|
|
A derivation which includes the
|
|
|
|
|
[`__outputHash`](language/advanced-attributes.md#adv-attr-outputHash) attribute.
|
2022-09-01 21:09:06 +00:00
|
|
|
|
|
2022-05-25 10:36:46 +00:00
|
|
|
|
- [store]{#gloss-store}\
|
2020-07-22 21:17:48 +00:00
|
|
|
|
The location in the file system where store objects live. Typically
|
|
|
|
|
`/nix/store`.
|
|
|
|
|
|
2022-08-05 17:39:43 +00:00
|
|
|
|
From the perspective of the location where Nix is
|
2022-08-08 17:52:31 +00:00
|
|
|
|
invoked, the Nix store can be referred to
|
2022-08-05 17:39:43 +00:00
|
|
|
|
as a "_local_" or a "_remote_" one:
|
|
|
|
|
|
2022-09-01 20:38:07 +00:00
|
|
|
|
+ A *local store* exists on the filesystem of
|
2022-08-05 17:39:43 +00:00
|
|
|
|
the machine where Nix is invoked. You can use other
|
|
|
|
|
local stores by passing the `--store` flag to the
|
2022-09-01 20:38:07 +00:00
|
|
|
|
`nix` command. Local stores can be used for building derivations.
|
2022-08-05 17:39:43 +00:00
|
|
|
|
|
|
|
|
|
+ A *remote store* exists anywhere other than the
|
|
|
|
|
local filesystem. One example is the `/nix/store`
|
|
|
|
|
directory on another machine, accessed via `ssh` or
|
|
|
|
|
served by the `nix-serve` Perl script.
|
|
|
|
|
|
|
|
|
|
- [binary cache]{#binary-cache}\
|
|
|
|
|
A *binary cache* is a Nix store which uses a different format: its
|
|
|
|
|
metadata and signatures are kept in `.narinfo` files rather than in a
|
|
|
|
|
Nix database. This different format simplifies serving store objects
|
|
|
|
|
over the network, but cannot host builds. Examples of binary caches
|
|
|
|
|
include S3 buckets and the [NixOS binary
|
|
|
|
|
cache](https://cache.nixos.org).
|
|
|
|
|
|
2022-05-25 10:36:46 +00:00
|
|
|
|
- [store path]{#gloss-store-path}\
|
2020-07-22 21:17:48 +00:00
|
|
|
|
The location in the file system of a store object, i.e., an
|
|
|
|
|
immediate child of the Nix store directory.
|
|
|
|
|
|
2022-05-25 10:36:46 +00:00
|
|
|
|
- [store object]{#gloss-store-object}\
|
2020-07-22 21:17:48 +00:00
|
|
|
|
A file that is an immediate child of the Nix store directory. These
|
|
|
|
|
can be regular files, but also entire directory trees. Store objects
|
|
|
|
|
can be sources (objects copied from outside of the store),
|
|
|
|
|
derivation outputs (objects produced by running a build action), or
|
|
|
|
|
derivations (files describing a build action).
|
|
|
|
|
|
2022-09-01 21:09:06 +00:00
|
|
|
|
- [input-addressed store object]{#gloss-input-addressed-store-object}\
|
2022-09-01 22:09:10 +00:00
|
|
|
|
A store object produced by building a
|
|
|
|
|
non-[content-addressed](#gloss-content-addressed-derivation),
|
|
|
|
|
non-[fixed-output](#gloss-fixed-output-derivation),
|
2022-09-01 21:09:06 +00:00
|
|
|
|
derivation.
|
|
|
|
|
|
|
|
|
|
- [output-addressed store object]{#gloss-output-addressed-store-object}\
|
|
|
|
|
A store object whose store path hashes its content. This
|
2022-09-01 21:41:27 +00:00
|
|
|
|
includes derivations, the outputs of
|
|
|
|
|
[content-addressed derivations](#gloss-content-addressed-derivation),
|
|
|
|
|
and the outputs of
|
|
|
|
|
[fixed-output derivations](#gloss-fixed-output-derivation).
|
2022-09-01 21:09:06 +00:00
|
|
|
|
|
2022-05-25 10:36:46 +00:00
|
|
|
|
- [substitute]{#gloss-substitute}\
|
2020-07-22 21:17:48 +00:00
|
|
|
|
A substitute is a command invocation stored in the Nix database that
|
|
|
|
|
describes how to build a store object, bypassing the normal build
|
|
|
|
|
mechanism (i.e., derivations). Typically, the substitute builds the
|
|
|
|
|
store object by downloading a pre-built version of the store object
|
|
|
|
|
from some server.
|
|
|
|
|
|
2022-08-05 17:39:43 +00:00
|
|
|
|
- [substituter]{#gloss-substituter}\
|
2022-09-01 20:40:39 +00:00
|
|
|
|
A *substituter* is an additional store from which Nix will
|
2022-09-01 22:01:07 +00:00
|
|
|
|
copy store objects it doesn't have. Nix will copy a store
|
|
|
|
|
path from a remote store only if one of the following is true:
|
2022-08-05 17:39:43 +00:00
|
|
|
|
|
|
|
|
|
- the store object is signed by one of the `trusted-public-keys`
|
|
|
|
|
- the substituter is in the `trusted-substituters` list
|
|
|
|
|
- the `no-require-sigs` option has been set to disable signature checking
|
2022-09-01 21:09:06 +00:00
|
|
|
|
- the store object is [output-addressed](#gloss-output-addressed-store-object)
|
2022-08-05 17:39:43 +00:00
|
|
|
|
|
2022-05-25 10:36:46 +00:00
|
|
|
|
- [purity]{#gloss-purity}\
|
2020-07-22 21:17:48 +00:00
|
|
|
|
The assumption that equal Nix derivations when run always produce
|
|
|
|
|
the same output. This cannot be guaranteed in general (e.g., a
|
|
|
|
|
builder can rely on external inputs such as the network or the
|
|
|
|
|
system time) but the Nix model assumes it.
|
|
|
|
|
|
2022-05-25 10:36:46 +00:00
|
|
|
|
- [Nix expression]{#gloss-nix-expression}\
|
2020-07-22 21:17:48 +00:00
|
|
|
|
A high-level description of software packages and compositions
|
|
|
|
|
thereof. Deploying software using Nix entails writing Nix
|
|
|
|
|
expressions for your packages. Nix expressions are translated to
|
|
|
|
|
derivations that are stored in the Nix store. These derivations can
|
|
|
|
|
then be built.
|
|
|
|
|
|
2022-05-25 10:36:46 +00:00
|
|
|
|
- [reference]{#gloss-reference}\
|
2020-07-22 21:17:48 +00:00
|
|
|
|
A store path `P` is said to have a reference to a store path `Q` if
|
|
|
|
|
the store object at `P` contains the path `Q` somewhere. The
|
|
|
|
|
*references* of a store path are the set of store paths to which it
|
|
|
|
|
has a reference.
|
2021-11-30 16:13:46 +00:00
|
|
|
|
|
2020-07-22 21:17:48 +00:00
|
|
|
|
A derivation can reference other derivations and sources (but not
|
|
|
|
|
output paths), whereas an output path only references other output
|
|
|
|
|
paths.
|
|
|
|
|
|
2022-05-25 10:36:46 +00:00
|
|
|
|
- [reachable]{#gloss-reachable}\
|
2020-07-24 12:31:33 +00:00
|
|
|
|
A store path `Q` is reachable from another store path `P` if `Q`
|
|
|
|
|
is in the *closure* of the *references* relation.
|
2020-07-22 21:17:48 +00:00
|
|
|
|
|
2022-05-25 10:36:46 +00:00
|
|
|
|
- [closure]{#gloss-closure}\
|
2020-07-22 21:17:48 +00:00
|
|
|
|
The closure of a store path is the set of store paths that are
|
|
|
|
|
directly or indirectly “reachable” from that store path; that is,
|
2020-07-24 12:31:33 +00:00
|
|
|
|
it’s the closure of the path under the *references* relation. For
|
|
|
|
|
a package, the closure of its derivation is equivalent to the
|
|
|
|
|
build-time dependencies, while the closure of its output path is
|
|
|
|
|
equivalent to its runtime dependencies. For correct deployment it
|
|
|
|
|
is necessary to deploy whole closures, since otherwise at runtime
|
|
|
|
|
files could be missing. The command `nix-store -qR` prints out
|
|
|
|
|
closures of store paths.
|
2021-11-30 16:13:46 +00:00
|
|
|
|
|
2020-07-22 21:17:48 +00:00
|
|
|
|
As an example, if the store object at path `P` contains a reference
|
|
|
|
|
to path `Q`, then `Q` is in the closure of `P`. Further, if `Q`
|
|
|
|
|
references `R` then `R` is also in the closure of `P`.
|
|
|
|
|
|
2022-05-25 10:36:46 +00:00
|
|
|
|
- [output path]{#gloss-output-path}\
|
2020-07-22 21:17:48 +00:00
|
|
|
|
A store path produced by a derivation.
|
|
|
|
|
|
2022-05-25 10:36:46 +00:00
|
|
|
|
- [deriver]{#gloss-deriver}\
|
2020-07-24 12:31:33 +00:00
|
|
|
|
The deriver of an *output path* is the store
|
2020-07-22 21:17:48 +00:00
|
|
|
|
derivation that built it.
|
|
|
|
|
|
2022-05-25 10:36:46 +00:00
|
|
|
|
- [validity]{#gloss-validity}\
|
2020-07-22 21:17:48 +00:00
|
|
|
|
A store path is considered *valid* if it exists in the file system,
|
|
|
|
|
is listed in the Nix database as being valid, and if all paths in
|
|
|
|
|
its closure are also valid.
|
|
|
|
|
|
2022-05-25 10:36:46 +00:00
|
|
|
|
- [user environment]{#gloss-user-env}\
|
2020-07-22 21:17:48 +00:00
|
|
|
|
An automatically generated store object that consists of a set of
|
|
|
|
|
symlinks to “active” applications, i.e., other store paths. These
|
2020-07-24 12:31:33 +00:00
|
|
|
|
are generated automatically by
|
|
|
|
|
[`nix-env`](command-ref/nix-env.md). See *profiles*.
|
2020-07-22 21:17:48 +00:00
|
|
|
|
|
2022-05-25 10:36:46 +00:00
|
|
|
|
- [profile]{#gloss-profile}\
|
2020-07-24 12:31:33 +00:00
|
|
|
|
A symlink to the current *user environment* of a user, e.g.,
|
|
|
|
|
`/nix/var/nix/profiles/default`.
|
2020-07-22 21:17:48 +00:00
|
|
|
|
|
2022-05-25 10:36:46 +00:00
|
|
|
|
- [NAR]{#gloss-nar}\
|
2020-07-22 21:17:48 +00:00
|
|
|
|
A *N*ix *AR*chive. This is a serialisation of a path in the Nix
|
2020-07-24 12:31:33 +00:00
|
|
|
|
store. It can contain regular files, directories and symbolic
|
|
|
|
|
links. NARs are generated and unpacked using `nix-store --dump`
|
|
|
|
|
and `nix-store --restore`.
|
2022-05-25 10:36:46 +00:00
|
|
|
|
- [`∅`]{#gloss-emtpy-set}\
|
2021-11-30 18:19:42 +00:00
|
|
|
|
The empty set symbol. In the context of profile history, this denotes a package is not present in a particular version of the profile.
|
2022-05-25 10:36:46 +00:00
|
|
|
|
- [`ε`]{#gloss-epsilon}\
|
2021-11-30 16:13:46 +00:00
|
|
|
|
The epsilon symbol. In the context of a package, this means the version is empty. More precisely, the derivation does not have a version attribute.
|