2017-12-23 18 views
2

최근에 NixOS가 설치되었으며 bruno (사용자 프로필), 기본값 (루트에서 사용) 및 시스템 (NixOS에서 사용)의 3 가지 프로필이있었습니다.NixOS 채널, 프로필 및 패키지

environment.systemPackages = with pkgs; [ 
    firefox 
    chromium 
    htop 
    # ... 
]; 
: 다음 선언적 /etc/nixos/configuration.nix을 통해 몇 가지 패키지를 설치 한

~> nix-channel --list 
unstable https://nixos.org/channels/nixos-unstable 
~> sudo nix-channel --list 
nixos https://nixos.org/channels/nixos-17.09 

:

나는 편리 시스템 프로파일에 대한 안정적인 채널과 나를 위해 불안정한 채널 (브루노 프로파일)를 사용하는 것으로

그리고 일부 명령형 : nix-env --install firefox.

지금 (그들이 내 사용자 프로필에서 사용할 수 있습니다로), 나는 또한 시스템 프로파일이 제공하는 사람을보고 기대했던 내 설치된 패키지 목록 :

~> htop --version 
htop 2.0.2 - (C) 2004-2016 Hisham Muhammad 
Released under the GNU GPL. 

~> nix-env -q | grep htop 
~> nix-env -q | grep firefox 
firefox-57.0 

만 파이어 폭스가 나열됩니다. 루트 프로필을 사용해 보겠습니다.

~> sudo nix-env -q | grep htop 

같은 것은 실제로 완전히 비어 있습니다. 아직

~> sudo nix-env -p /nix/var/nix/profiles/system -q 

아무것도 : 은 아마 시스템 프로파일을 사용하여.

전통적인 패키지 관리자 (Debian, Red Hat)의 Nix가 "The Purely Functional Package Manager"로 정의되어있어 패키지를 보편적으로 쿼리하는 도구가 아닌 것 같습니다. nix-env는 매뉴얼과 느낌은 debian apt 's alter ego와 비슷합니다.
그런 도구가 있습니까? 아니면 문제가되지 않습니다. 즉, 사람들이 일반적으로 프로필/환경에있는 모든 패키지 목록을 가지고 있지 않아도 괜찮습니까?

답변

3

nix-env -qnix-env -i으로 작성된 것과 같은 필수 '환경'에 설치된 패키지 만보고합니다.

nix-env은 선언적이며 변경 불가능한 Nix 시스템에 비해 얇은 레이어 인 필수 패키지 관리 도구입니다. profiles 메커니즘은 변경 가능성을 제공하며 nix-env은 프로파일에 manifest.nix을 작성하여 환경에있는 패키지 세트를 기록합니다.

NixOS 시스템은 profiles 만 사용하지만 manifest.nix 파일은 제공하지 않습니다. 이는 NixOS 시스템이 매번 처음부터 다시 빌드되기 때문에 매끄럽게 선언됩니다.

결과적으로 nix-env은 NixOS 프로파일을 조회 할 수 없습니다.

따라서 nix-env -q은 필수적으로 설치된 사용자 패키지를 쿼리합니다. sudo nix-env -q은 NixOS 패키지를 포함하지 않는 root가 필수적으로 설치 한 것을 보여줍니다. 이는 시스템에 선언적으로 포함되어 있기 때문입니다. Nexus 시스템에서 nix-env -q -p을 가리키는 것은 nix-env으로 생성 된 환경이 아니므로 빈 목록을 제공합니다.

사용자가 시스템 명령을 사용할 수있는 이유는 시스템이 사용자 프로필의 (Nix) 환경에 속하기 때문이 아니라 (UNIX) 환경 변수가 두 프로필을 가리키기 때문입니다.

$ which firefox 
/home/user/.nix-profile/bin/firefox 
$ which cp 
/run/current-system/sw/bin/cp 
$ echo $PATH 
[...] 

는 다음 명령을 실행할 수 있습니다, 여러분의 시스템에 설치되어있는 것을 파악하려면

  • nix-env -q는 필수적 사용자 환경에 설치되어있는 알아낼 수 있습니다.
  • nixos-option environment.systemPackages은 구성이 빌드되고 활성화 될 때/run/current-system/sw에 나타날 패키지 집합을 쿼리합니다. 문서를 인용하면 "이 패키지는 모든 사용자가 자동으로 사용할 수 있습니다."
  • nix-store -q --requisites /run/current-system ~/.nix-profile 결합 된 현재 시스템의 의존성의 폐쇄 및 사용자 프로필 현재 시스템

  • nix-store -q --references /run/current-system 직접 종속성은 더 많은 옵션에 대한 nix-store --help--query 섹션을 참조하십시오.

  • +0

    감사합니다. 두 번째 문단은 나에게 분명하지 않습니다. "Nix의 기능적 개념을 바탕으로 구축되었습니다"는 NixOS에도 해당됩니다. "Nix의 기능적인 부분에 내장되어 있습니다."라는 말은 nixos.org 이후로 불분명합니다. Nix는 "The Purely Functional Package Manager"로 정의됩니다. 내가 헷갈리는 부분은 패키지 관리자가되는 Nix가 nix-env 또는 NixOS를 통해 설치되었는지 여부에 관계없이 패키지를 쿼리하는 방법을 제공해야한다는 것입니다. –

    +0

    마지막 단락으로 내 질문을 편집했습니다. 나는 당신에게 +1을 주겠지 만 더 많은 설명이있을 수 있다고 느낄 때 이것을 받아들이지 않습니다 :) –

    +0

    나는 혼란스러운 단락을 확장하고 당신을 도울 수있는 몇 가지 명령을 추가했습니다. –