이 사이트는 의 를 yeokja로 기계 번역한 비공식 한국어판입니다. 정확한 내용은 원문을 확인하세요.

실체화

Nix가 derivation의 빌드 명령을 Nix 스토어의 빌드 출력으로 바꾸는 과정

개념/실체화

먼저 Nix 빠른 시작부터 따라가고, 개념 문서는 주로 보충 설명이 필요할 때 참고하기를 권합니다. 오른쪽의x를 누르면 모든 개념 문서에서 이 안내를 숨길 수 있습니다.

실체화는 Nix derivation이 패키지로 변환되는 과정입니다. derivation이 본질적으로 패키지에 대한 계획이라면, 실체화는 그 계획을 내용으로 가득 찬 실제 출력 디렉터리로 바꾸는 빌드 과정입니다.

.drv 파일

패키지를 빌드하기 위해 nix build를 실행하면, Nix CLI는 먼저 해당 함수의 derivation 함수를 살펴보고 이를 중간 단계의 .drv 파일로 변환합니다. 이 파일은 본질적으로 derivation 함수를 형식적으로 표현한 것입니다. 모든 .drv 파일은 /nix/store/m2nb4d0pfydr8bq5ww1yqbrkvvf18zbl-perl-5.36.0.drv와 같이 해시가 포함된 경로로 Nix 스토어에 저장되며, 이를 통해 derivation 함수에 어떤 변경이라도 생기면 새 경로를 가진 새 .drv 파일이 만들어지도록 보장합니다. 그런 다음 CLI는 .drv 파일을 실제 빌드 과정의 청사진으로 사용하며, 이 빌드 과정에서는 항상 패키지의 전체 의존성 트리를 빌드합니다.

빌드 과정

Nix는 derivation에 대한 .drv 파일을 만든 뒤, 파일에 인코딩된 명령을 사용해 샌드박스 환경에서 실제로 패키지를 빌드합니다. 이는 본질적으로 실체화가 /etc의 설정 파일과 같은 머신의 전역 상태에 의존하지도, 영향을 주지도 않는다는 뜻입니다. 빌드 과정에 필요한 모든 것은 다음에서 가져옵니다.

  1. derivation의 빌드 명령입니다. 예를 들어 cat, touch, mkdir, mv와 같은 명령입니다.
  2. Nix 스토어의 산출물입니다. 예를 들어 Git을 빌드 입력으로 하는 derivation을 작성하면, 실체화 과정은 Git을 빌드하여 그 결과 패키지를 (아직 빌드되어 저장되어 있지 않은 경우) Nix 스토어에 저장하고, 빌드 로직에서 git 명령이 호출될 때 /usr/bin/git과 같은 경로에 있는 “전역” Git 대신 그 패키지를 사용합니다.