본문 바로가기
리눅스

(번역) Nix (package manager)

by 다움위키 2025. 4. 26.

원문 보기: https://dawoum.duckdns.org/wiki/Nix_(package_manager)

Original article: w:Nix (package manager)

 

Nix유닉스-계열 시스템을 위한 크로스-플랫폼 패키지 관리자이고, Eelco Dolstra에 의해 2003년에 개발된 그들 시스템을 인스턴스화하고 관리하는 도구입니다.[1]

Installations

개발자가 제공하는 패키지를 설치할 수 있습니다. Bash (Unix shell)Z shell과 달리, Fish (Unix shell)는 아래와 같이 설치할 수 있습니다:

이는 시스템 전역에 걸쳐 nix를 설치하고 보통의 다른 패키지와 마찬가지로 sudo를 통한 권한 상승을 사용, 및 systemd에서 서비스 제어, 등을 하게 됩니다.

설치 시에 6개의 안내 메시지가 나옵니다. 특히, 사용자 32개를 만들고, 1개의 그룹을 만듭니다.

어쨌든, 몇 번의 y를 선택 후에 설치가 완료됩니다.

Uninstalling

테스트를 위해, FirefoxFastfetch를 설치해 보니, /nix/store의 크기가 2.5G 정도에 이릅니다.

원래 목적은 데비안에 없는 몇 개의 패키지를 설치하는 것인데, 이런 식이라면 너무 많은 디스크 자원을 차지할 것으로 예상되어, 그런 용도에는 부적합한 것으로 판단됩니다.

따라서, 제거하는 과정이 필요합니다.

먼저 서비스를 중지합니다:

  • sudo systemctl stop nix-daemon.service
  • sudo systemctl disable nix-daemon.socket nix-daemon.service
  • sudo systemctl daemon-reload

다음으로 관련 파일들을 제거합니다:

  • sudo rm -rf /etc/nix /etc/profile.d/nix.sh /etc/tmpfiles.d/nix-daemon.conf /nix ~root/.nix-channels ~root/.nix-defexpr ~root/.nix-profile

다음으로, 사용자와 그룹을 제거합니다. 이를 위해, 간단한 Bash (Unix shell) 스크립트를 사용할 것이므로, Fish (Unix shell)에서는 파일로 만들어서 실행하는 것도 좋겠고, 아니면, AlacrittyBash (Unix shell) 또는 Z shell로 시작하도록 변경 후에, 그기에서 작업할 수도 있습니다.

for i in $(seq 1 32); do
  sudo userdel nixbld$i
done
  • sudo groupdel nixbld

다음으로, 쉘 관련하여 수정된 파일들을 원상 복구해야 합니다:

  • /etc/bash.bashrc (이것은 백업 파일이 존재합니다, mv로 이동)
  • /etc/bashrc (새로 생성, rm으로 제거)
  • /etc/zsh/zshrc (이것도 백업 파일이 존재합니다, mv로 이동)
  • /etc/zshrc (새로 생성, rm으로 제거)

다음 문서를 참조하십시오.

Approach

Nix 패키지 관리자는 소프트웨어 패키지가 각각 변경할 수 없는 콘텐츠를 가진 고유한 디렉토리에 설치되는 모델을 사용합니다. 이들 디렉토리 이름은 Nix에 의해 관리되는 다른 패키지를 포함하여 패키지의 모든 종속성을 고려하는 암호화 해시에 해당합니다. 결과로서, Nix 패키지 이름은 같은 이름을 갖는 패키지가 같은 입력과 같은 빌드 플랫폼을 가지고, 따라서 같은 빌드 결과를 갖기 때문에 컨텐츠-식별화입니다.[2]

Implementation

Nix에 대해 패키지 레시피는 선언적, 순전하게 함수형, 지연 평가된, 동적으로 입력되는 프로그래밍 언어, 특수-제작된 "Nix 언어"로 작성되었습니다.[3]  Nix 언어의 구별되는 기능은 "context", string interpolation, first-class file system paths, 및 "indented strings"를 갖는 문자열이며, 이는 조합하여 새로운 파일의 컨텐츠를 지정할 때 파일 시스템 데이터 사이의 종속성을 간결하게 표현하도록 허용합니다.

Nix 언어에서 선언된 파일 사이의 종속성은 자동으로 추적되고 "Nix 스토어"에 유지됩니다.[4]  Nix 스토어에서 새 파일은 "파생"을 통해 생성됩니다. 파생은 실행 파일, 호출에 대한 인수와 환경 변수 (execve 참조), 및 Nix 스토어에서 읽을 기타 파일을 지정하는 영구 데이터 구조입니다. 실행 파일은 그런-다음 명시적으로 지정된 입력 파일 이외의 항목에 대한 접근을 금지하고 지정된 출력 경로에 대한 쓰기만 허용하는 샌드박스에서 실행됩니다. Nix는 패키지 디렉토리 이름에 사용되는 구별되는 해시에 대해 스캔함으로써 출력 파일에서 종속성 정보를 보존합니다.[2]

자동 참조 추적은 패캐지가 기계에 걸쳐 전송되될 때조차도 패키지의 무결성을 보장합니다. 그것은 역시 다른 패키지가 그것들에 종속되지 않을 때 사용되지 않는 패키지의 가비지 수집을 활성화합니다. 더 큰 스토리지 요구 사항을 희생하는 대신, Nix에서 모든 업그레이드는 원자적이고 효율적인 롤백의 기능을 보장합니다. 고유한 디렉토리 이름은 서로 다른 버전의 공유 라이브러리를 갖는 많은 패키지 설치를 허용하고, 소위 의존성 지옥을 제거한다고 주장됩니다.[5]  이것은 역시 여러 사용자에게 관리자 권한 없이 같은 시스템에 소프트웨어를 안전하게 설치하도록 허용합니다. 결과로서, Nix 패키지 관리 및 배포 모델은 보다 안정적이고 재현 가능하고, 이식 가능한 패키지를 광고합니다.[2][6]

Nix는 Linux, macOS, 및 WSL을 완벽하게 지원하고, 또 다른 패키지 관리자와 나란히 안전하게 설치될 수 있습니다.

Nixpkgs

Nixpkgs는 Nix 패키지 관리자를 기반으로 구축된 패키지 저장소입니다. Repology에 따르면, 2025년 1월 기준 그것은 122,000개 이상의 패키지를 포함하고 있고[7] 임의의 다른 패키지 저장소보다 더 많은 수의 최신 패키지를 보유하고 있습니다.[8] Nixpkgs에 의해 지원되는 운영 시스템은 주로 Linux와 Darwin이며, 일부는 Windows와 BSD 변형을 지원합니다. 지원되는 CPU 아키텍처에는 64비트 x86 및 ARM이 포함됩니다. 이들 아키텍처에 대한 패키지는 Hydra라고 불리는 지속적인 통합 서비스를 사용하여 정기적으로 빌드되고,[9] 이들 빌드의 결과는 공용 바이너리 캐시에 업로드됩니다.[10]  Nix는 패키지를 설치할 때, 이 캐시를 확인하고 바이너리 패키지를 지역에서 빌드하는 것을 방지하기 위해 다운로드합니다.

Nixpkgs는 GitHub의 단일 Git 저장소에서 개발되었습니다.[11]  패키지 외에도, 그것은 NixOS에 대한 소스 코드도 포함하고 있습니다.

Projects using Nix

NixOS[12] 리눅스 커널을 포함한 전체 시스템 설정을 관리하기 위해 Nix를 사용하는 리눅스 배포입니다.[13]

Nix는 CERNLHCb 실험에서 소프트웨어 패키징 및 배포에 사용됩니다.[14]  Nix는 분산 소프트웨어 개발 플랫폼인 Replit[15]Google IDX의 기반이 됩니다.[16]

Forks and alternative implementations

2021년에, 모듈화, Nixpkgs와의 완전한 호환성, 및 평가자 성능 향상을 목표로 Tvix라는 이름의 재구현이 발표되었습니다.[17] 2024년 기준, Tvix에는 평가자와[18] 스토어 구현이 있지만, 작성자는 프로젝트가 아직 안정적이거나 프로덕션에서 사용할 준비가 되었다고 생각하지 않습니다.[19] Tvix는 주로 Rust로 작성되었습니다.[20]

2024년에, 자원 봉사자 팀은 Meson 빌드 자동화 시스템을 사용하는 정확성과 호환성에 중점을 둔 Nix 포크, Lix의 첫 번째 버전을 출시했습니다.[21] 이 프로젝트는 Rust에서 코드의 일부를 점진적으로 다시 작성하려고 합니다.[21]