Home Explore Blog CI



nix

1st chunk of `doc/manual/source/store/building.md`
e470625c51a2f34f48aaf13ee1db1a47aa6724e92635274b00000001000007e9
# Building

## Normalizing derivation inputs

- Each input must be [realised] prior to building the derivation in question.


- Once this is done, the derivation is *normalized*, replacing each input deriving path with its store path, which we now know from realising the input.

## Builder Execution

The [`builder`](./derivation/index.md#builder) is executed as follows:

- A temporary directory is created under the directory specified by
  `TMPDIR` (default `/tmp`) where the build will take place. The
  current directory is changed to this directory.

- The environment is cleared and set to the derivation attributes, as
  specified above.

- In addition, the following variables are set:

  - `NIX_BUILD_TOP` contains the path of the temporary directory for
    this build.

  - Also, `TMPDIR`, `TEMPDIR`, `TMP`, `TEMP` are set to point to the
    temporary directory. This is to prevent the builder from
    accidentally writing temporary files anywhere else. Doing so
    might cause interference by other processes.

  - `PATH` is set to `/path-not-set` to prevent shells from
    initialising it to their built-in default value.

  - `HOME` is set to `/homeless-shelter` to prevent programs from
    using `/etc/passwd` or the like to find the user's home
    directory, which could cause impurity. Usually, when `HOME` is
    set, it is used as the location of the home directory, even if
    it points to a non-existent path.

  - `NIX_STORE` is set to the path of the top-level Nix store
    directory (typically, `/nix/store`).

  - `NIX_ATTRS_JSON_FILE` & `NIX_ATTRS_SH_FILE` if `__structuredAttrs`
    is set to `true` for the derivation. A detailed explanation of this
    behavior can be found in the
    [section about structured attrs](@docroot@/language/advanced-attributes.md#adv-attr-structuredAttrs).

  - For each output declared in `outputs`, the corresponding
    environment variable is set to point to the intended path in the
    Nix store for that output. Each output path is a concatenation

Title: Building: Normalizing Derivation Inputs and Builder Execution
Summary
Before building a derivation, its inputs are realized and normalized by replacing derivation paths with store paths. The builder is then executed in a temporary directory with a cleared environment set to derivation attributes, along with specific variables like NIX_BUILD_TOP, TMPDIR, PATH, HOME, and NIX_STORE to ensure a clean and controlled build process. Structured attributes also influence the environment through `NIX_ATTRS_JSON_FILE` & `NIX_ATTRS_SH_FILE`.