2023-03-23 17:27:41 +02:00
|
|
|
|
# Name
|
|
|
|
|
|
|
|
|
|
`nix-store --realise` - realise specified store paths
|
|
|
|
|
|
|
|
|
|
# Synopsis
|
|
|
|
|
|
|
|
|
|
`nix-store` {`--realise` | `-r`} *paths…* [`--dry-run`]
|
|
|
|
|
|
|
|
|
|
# Description
|
|
|
|
|
|
|
|
|
|
The operation `--realise` essentially “builds” the specified store
|
|
|
|
|
paths. Realisation is a somewhat overloaded term:
|
|
|
|
|
|
|
|
|
|
- If the store path is a *derivation*, realisation ensures that the
|
|
|
|
|
output paths of the derivation are [valid] (i.e.,
|
|
|
|
|
the output path and its closure exist in the file system). This
|
|
|
|
|
can be done in several ways. First, it is possible that the
|
|
|
|
|
outputs are already valid, in which case we are done
|
|
|
|
|
immediately. Otherwise, there may be [substitutes]
|
|
|
|
|
that produce the outputs (e.g., by downloading them). Finally, the
|
|
|
|
|
outputs can be produced by running the build task described
|
|
|
|
|
by the derivation.
|
|
|
|
|
|
|
|
|
|
- If the store path is not a derivation, realisation ensures that the
|
|
|
|
|
specified path is valid (i.e., it and its closure exist in the file
|
|
|
|
|
system). If the path is already valid, we are done immediately.
|
|
|
|
|
Otherwise, the path and any missing paths in its closure may be
|
|
|
|
|
produced through substitutes. If there are no (successful)
|
|
|
|
|
substitutes, realisation fails.
|
|
|
|
|
|
|
|
|
|
[valid]: @docroot@/glossary.md#gloss-validity
|
|
|
|
|
[substitutes]: @docroot@/glossary.md#gloss-substitute
|
|
|
|
|
|
|
|
|
|
The output path of each derivation is printed on standard output. (For
|
|
|
|
|
non-derivations argument, the argument itself is printed.)
|
|
|
|
|
|
|
|
|
|
The following flags are available:
|
|
|
|
|
|
|
|
|
|
- `--dry-run`\
|
|
|
|
|
Print on standard error a description of what packages would be
|
|
|
|
|
built or downloaded, without actually performing the operation.
|
|
|
|
|
|
|
|
|
|
- `--ignore-unknown`\
|
|
|
|
|
If a non-derivation path does not have a substitute, then silently
|
|
|
|
|
ignore it.
|
|
|
|
|
|
|
|
|
|
- `--check`\
|
|
|
|
|
This option allows you to check whether a derivation is
|
|
|
|
|
deterministic. It rebuilds the specified derivation and checks
|
|
|
|
|
whether the result is bitwise-identical with the existing outputs,
|
|
|
|
|
printing an error if that’s not the case. The outputs of the
|
|
|
|
|
specified derivation must already exist. When used with `-K`, if an
|
|
|
|
|
output path is not identical to the corresponding output from the
|
|
|
|
|
previous build, the new output path is left in
|
|
|
|
|
`/nix/store/name.check.`
|
|
|
|
|
|
|
|
|
|
Special exit codes:
|
|
|
|
|
|
|
|
|
|
- `100`\
|
|
|
|
|
Generic build failure, the builder process returned with a non-zero
|
|
|
|
|
exit code.
|
|
|
|
|
|
|
|
|
|
- `101`\
|
|
|
|
|
Build timeout, the build was aborted because it did not complete
|
|
|
|
|
within the specified `timeout`.
|
|
|
|
|
|
|
|
|
|
- `102`\
|
|
|
|
|
Hash mismatch, the build output was rejected because it does not
|
|
|
|
|
match the [`outputHash` attribute of the
|
|
|
|
|
derivation](@docroot@/language/advanced-attributes.md).
|
|
|
|
|
|
|
|
|
|
- `104`\
|
|
|
|
|
Not deterministic, the build succeeded in check mode but the
|
|
|
|
|
resulting output is not binary reproducible.
|
|
|
|
|
|
|
|
|
|
With the `--keep-going` flag it's possible for multiple failures to
|
|
|
|
|
occur, in this case the 1xx status codes are or combined using binary
|
|
|
|
|
or.
|
|
|
|
|
|
|
|
|
|
1100100
|
|
|
|
|
^^^^
|
|
|
|
|
|||`- timeout
|
|
|
|
|
||`-- output hash mismatch
|
|
|
|
|
|`--- build failure
|
|
|
|
|
`---- not deterministic
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{{#include ./opt-common.md}}
|
|
|
|
|
|
|
|
|
|
{{#include ../opt-common.md}}
|
|
|
|
|
|
|
|
|
|
{{#include ../env-common.md}}
|
|
|
|
|
|
|
|
|
|
# Examples
|
|
|
|
|
|
|
|
|
|
This operation is typically used to build [store derivation]s produced by
|
|
|
|
|
[`nix-instantiate`](@docroot@/command-ref/nix-instantiate.md):
|
|
|
|
|
|
|
|
|
|
[store derivation]: @docroot@/glossary.md#gloss-store-derivation
|
|
|
|
|
|
|
|
|
|
```console
|
2023-04-30 16:52:38 +03:00
|
|
|
|
$ nix-store --realise $(nix-instantiate ./test.nix)
|
2023-03-23 17:27:41 +02:00
|
|
|
|
/nix/store/31axcgrlbfsxzmfff1gyj1bf62hvkby2-aterm-2.3.1
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
This is essentially what [`nix-build`](@docroot@/command-ref/nix-build.md) does.
|
|
|
|
|
|
|
|
|
|
To test whether a previously-built derivation is deterministic:
|
|
|
|
|
|
|
|
|
|
```console
|
2023-04-30 16:52:38 +03:00
|
|
|
|
$ nix-build '<nixpkgs>' --attr hello --check -K
|
2023-03-23 17:27:41 +02:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Use [`nix-store --read-log`](./read-log.md) to show the stderr and stdout of a build:
|
|
|
|
|
|
|
|
|
|
```console
|
|
|
|
|
$ nix-store --read-log $(nix-instantiate ./test.nix)
|
|
|
|
|
```
|