를 확인해 보세요. 에서 제공하는 Nix 플레이크를 발견하고 게시할 수 있는 최고의 장소입니다.

We use a single, first-party analytics cookie to focus our limited time and energy on the most important documentation. Check out our privacy policy .

파생

Nix 언어를 사용하여 표현된 Nix 패키지에 대한 빌드 지침입니다.

Concepts / 파생

We recommend starting with the Nix quick start and consulting concept docs primarily for clarification. Feel free to click x to the right to disable this notification on all concept docs.

_파생_은 Nix가 Nix 패키지를 실현하는 데 사용하는 지침입니다. Nix 언어의 특수 derivation 함수를 사용하여 만들어집니다. 다른 여러 파생에 의존할 수 있으며 하나 이상의 최종 출력을 생성할 수 있습니다. 파생과 이를 빌드하는 데 필요한 모든 종속성(직접 종속성 및 해당 종속성의 모든 종속성 등)을 클로저라고 합니다.

파생 출력

가장 일반적인 출력:

  • out, 가장 일반적인 출력
  • lib, 라이브러리 출력용
  • dev, 헤더 파일과 같은 일반적인 개발 리소스
  • man, 매뉴얼 페이지용

파생과 이를 빌드하는 데 필요한 모든 종속성(직접 종속성 및 해당 종속성의 모든 종속성 등)을 _패키지 클로저_라고 합니다.

멘탈 모델

파생을 Nix 패키지의 계획 또는 청사진으로 생각하면 도움이 될 수 있습니다.

Nix 언어의 파생

Nix 언어에서 파생은 derivation 함수를 사용하여 만들어집니다. 다음은 Haskell과 유사한 시그니처로 표현된 derivation의 유형 시그니처입니다.1

파생 유형 시그니처
derivation ::
{ system : String
, name : String
, builder : Path | Derivation
, ?args : [String]
, ?outputs : [String]
} -> Derivation

다음은 예제 파생입니다.

예제 파생
derivation {
# 파생 이름 (원하는 대로 선택)
name = "hello-text";
# 파생을 실현하는 시스템
system = "x86_64-linux";
# 파생을 실현하는 프로그램
builder = "bash";
# 빌더 프로그램에 전달되는 인수
args = ["-c" "mkdir $out && echo Hello world > $out/hello.txt"]
};

이것이 전부입니다! derivation 함수는 이러한 인수만 사용합니다. 그러나 args를 통해 전달하는 스크립팅 논리가 임의로 복잡할 수 있기 때문에 파생은 훨씬 덜 간단할 수 있습니다.

문자열 보간

Nix가 이 문자열을 보면…

my-file.nix
{
buildPhase = ''
mv ${pkgs.website}/favicon.ico
'';
}

파생의 문자열 출력은 항상 Nix 스토어 경로입니다.

파생 출력

실현

특수 변수

파생을 작성할 때 알아야 할 두 가지 특수 변수가 있습니다.

  • $out은 빌드 출력의 디렉터리 구조 루트를 나타냅니다.
  • $src는 빌드 소스를 나타냅니다.

표준 환경

Nix 생태계의 대부분의 파생은 표준 환경mkDerivation 함수를 기반으로 합니다.

원시 derivation 함수를 사용하여 파생을 만들 수도 있지만 이를 둘러싼 래퍼 함수를 사용하는 것이 훨씬 일반적입니다. 아마도 가장 일반적으로 사용되는 래퍼 함수는 stdenv.mkDerivation일 것입니다. 인수:

  • 패키지의 name입니다. 대신 pnameversion을 지정하면 name${pname}-${version}이 됩니다.

기타 파생 함수

stdenv.mkDerivation 외에도 특정 언어, 프레임워크 등을 위한 많은 사용자 지정 파생 래퍼가 있으며 그 중 다수는 실제로 stdenv.mkDerivation을 래핑합니다. 몇 가지 예:

Nix 생태계에서 훨씬 더 많은 것을 접하게 될 것입니다. 그리고 언제든지 자신만의 파생 함수를 만들고 buildPythonApplication과 같은 도우미 함수를 래핑할 수도 있습니다.

Footnotes

  1. 이 아이디어에 대해 Ian Henry에게 찬사를 보냅니다.


Was this page helpful?