내 Linux 시스템에 설치 nix
하고 채널을 추가했습니다 nixpkgs-unstable
. 이제 다음 패키지를 설치할 수 있습니다 gcc
.
% nix-env --install gcc
installing 'gcc-7.4.0'
...
created 78 symlinks in user environment
와 같은 디렉토리를 보면 ~/.nix-defexpr/channels/nixpkgs/pkgs/development/compilers/gcc/
여러 버전이 있고 모두 default.nix
.
ghc-env --query
또는 다른 친숙한 도구를 사용하여 이러한 숨겨진 패키지 버전을 어떻게 찾을 수 있습니까 ?내 사용자 환경에 버전 8을 설치하고 싶다면
gcc
어떻게 해야 합니까?gcc
한 번에 여러 버전을 얻을 수 있나요 ?
나는 Nix에 대한 광범위한 문서를 살펴봤지만 어디에서나 다음과 같은 말을 합니다."Nix를 사용하면 한 번에 원하는 만큼 많은 버전을 설치할 수 있으며 충돌이 발생하지 않습니다."동시에"한 번에 하나의 버전만 설치해야 하며, 선택한 채널에 하드코딩되어 있습니다.". 점은 무엇인가?
답변1
여기에서 패키지의 모든 이전 버전과 설치 방법을 볼 수 있습니다.https://lazamar.co.uk/nix-versions
Nix는 최신 버전의 패키지만 포크에 보관합니다. 널리 사용되는 주요 버전(예: python2 및 python3)이 여러 개 있는 경우 각 버전의 최신 버전이 나열됩니다.
불행하게도 nix에는 이전 포크에서 사용 가능했던 모든 버전의 패키지를 검색할 수 있는 기본 방법이 없습니다.
이 문제를 해결하기 위해 연결된 도구를 작성했습니다.
답변2
nix-env -iA nixpkgs.gcc8
채널 이름을 그런 식으로 지정했으므로 속성 경로(예: "nixpkgs")를 사용하는 것이 좋습니다 (NixOS 사용자는 일반적으로 "nixos" 이름을 사용합니다). 속성 경로는 일반 이름과 달리 명시적입니다.
이것들을 어떻게 발견하나요? 한 가지 방법은 예를 들어 쿼리 -P
에 추가하는 것입니다. nix-env -qa
나는 보통 탭 완성을 사용 nix repl
하거나 파일을 탐색합니다 all-packages.nix
:-) (attrpath를 알거나 추측하려고 시도하지 않는 한)
참고 사항:
- 단일 구성 파일에 여러 버전을 동시에 포함하려고 하면(예: 를 통해
nix-env
) 우선순위를 설정하지 않는 한 구성 파일에 대한 심볼릭 링크 트리를 생성할 때 종종 충돌이 발생합니다. - 단일 채널 릴리스(예: nixpkgs 커밋) 내에서 우리는 패키지당 버전 및 구성 수를 최소한으로(일반적으로 하나만) 유지하려고 노력합니다. 이는 리소스 절약(바이너리 구축 및 배포)과 더 나은 품질/유지 관리에 의해 동기가 부여됩니다.