(pinning-nixpkgs)=

# 재현성을 향하여: Nixpkgs 고정하기

다양한 Nix 예제에서 다음과 같은 코드를 자주 보게 됩니다.

```nix
{ pkgs ? import <nixpkgs> {} }:

...
```

:::{note}
`<nixpkgs>`는 {term}`Nixpkgs`의 특정 리비전이 있는 파일 시스템 경로를 가리킵니다. [조회 경로](lookup-path-tutorial)에 대한 자세한 정보는 [](reading-nix-language)에서 확인하십시오.
:::

이는 Nix 패키지를 가져와 Nix 표현식을 빠르게 시연하고 동작하게 만드는 **편리한** 방법입니다.

하지만 <ref-search-path>**이렇게 만든 Nix 표현식은 완전히 재현 가능하지 않습니다**.

## Nix 표현식 안에서 URL로 패키지 고정하기

**완전히 재현 가능한** Nix 표현식을 만들려면 Nixpkgs의 정확한 버전을 고정하면 됩니다.

가장 간단한 방법은 필요한 Nixpkgs 버전을 해당 Git 커밋 해시로 지정한 tarball로 가져오는 것입니다.

```nix
{ pkgs ? import (fetchTarball "https://github.com/NixOS/nixpkgs/archive/06278c77b5d162e62df170fec307e83f1812d94b.tar.gz") {}
}:

...
```

커밋은 [status.nixos.org](https://status.nixos.org/)에서 고를 수 있으며, 이 사이트에는 모든 릴리스와 모든 테스트를 통과한 최신 커밋이 나열되어 있습니다.

커밋을 고를 때는 다음 중 하나를 따르는 것을 권장합니다.

- `nixos-21.05`처럼 특정 버전을 사용하여 **최신 안정 NixOS** 릴리스를 따르거나, **또는**
- `nixos-unstable`을 통해 최신 **불안정 릴리스**를 따릅니다.

## 다음 단계

- `nixpkgs`를 고정하는 다양한 방법에 대한 더 많은 예제와 자세한 내용은 {ref}`ref-pinning-nixpkgs`를 참조하십시오.
- [](dependency-management-npins)
