Skip to content

기본 패키지 관리

패키지 관리 기본 명령은 nix-env입니다.
이를 통해 패키지를 설치, 업그레이드, 삭제할 수도 있고 이미 설치되어 있는 패키지 혹은 설치 가능한 패키지를 찾을 수도 있습니다.

닉스에서는, 각기 다른 사용자들이 이미 설치된 어플리케이션 집합에 대한 각기 다른 "관점"을 가집니다. 이는, 시스템에 굉장히 많은 패키지(게다가 서로 다른 버전으로)가 있더라도, 사용자는 그 패키지들 중 특정한 것들만을 활용(active)하기로 선택할 수 있습니다 - 활용(active)라는 말은 단지 사용자의 PATH에 노출되는 디렉터리에 선택된 패키지들이 등장한다는 것을 뜻합니다. 설치된 어플리케이션에 대한 그러한 관점들을 사용자 환경이라 부르고, 사용자 환경이란 단지, 활용되는 어플리케이션 파일들을 향하는 심볼릭 링크를 담은 디렉터리 구조를 의미합니다.

구성품들은 닉스 표현식 세트를 통해 설치되는데, 이 표현식은 패키지를 어떻게 빌드하는지, 그리고 필요하다면 패키지의 의존성들을 포함합니다. Nixpkgs 패키지 모음으로 불리는 닉스 표현식 모음집에는 기본 개발 도구인 GCC나 Glibc부터 일반 사용자용 어플리케이션인 모질라 파이어폭스에 이르기까지 다양한 패키지를 포함하고 있습니다. (하지만 닉스는 Nixpkgs에만 국한되지 않습니다; Nixpkgs에 기반하거나 혹은 완전히 새로운 닉스 표현식을 사용자 스스로 작성할 수도 있습니다)

최신 버전의 Nixpkgs는 http://nixos.org/nixpkgs/download.html에서 다운로드 받을 수 있습니다. 그러나 Nixpkgs의 채널를 활용하면 새로운 버전의 Nixpkgs를 따라가는 것을 편리하게 해주므로 그 방법이 훨씬 더 수월합니다. Nixpkgs는 닉스 설치할 때 자동적으로 "구독" 채널 목록을 생성합니다. 무슨 이유로든 채널 목록이 없다면, 다음을 통해 추가할 수 있습니다:

$ nix-channel --add https://nixos.org/channels/nixpkgs-unstable
$ nix-channel --update

주의

닉스OS에서, 사용자의 닉스OS 주요 버전(예. http://nixos.org/channels/nixos-14.12)에 해당하는 닉스OS 채널에 자동 구독됩니다. 닉스OS 채널은 Nixpkgs 채널과 동일하지만, 리눅스 바이너리만 포함하고 각종 테스트에 통과해야만 업데이트된다는 점이 다릅니다.

Nixpkgs에서 사용 가능한 패키지 목록을 확인합니다:

$ nix-env -qa
aterm-2.2
bash-3.0
binutils-2.15
bison-1.875d
blackdown-1.4.2
bzip2-1.0.2

-q 플래그는 쿼리 기능을 의미하고, -a는 이미 설치된 것이 아니라 (예를 들어, 설치 등이) 가능한 패키지들을 보일 것을 의미합니다. Nixpkgs를 직접 다운로드했거나 깃허브에서 체크아웃 했다면, -f 플래그를 이용해 경로를 직접 주어야 합니다:

$ nix-env -qaf /path/to/nixpkgs

/path/to/nixpkgs가 압축 해제했거나 체크 아웃한 Nixpkgs 경로를 의미합니다.

패키지를 이름으로 특정해 선택할 수 있습니다:

$ nix-env -qa firefox
firefox-34.0.5
firefox-with-plugins-34.0.5

그리고 정규 표현식도 지원합니다:

$ nix-env -qa 'firefox.*'

가능한 패키지의 상태를 보는 것도 가능합니다, 즉, 사용자 환경에 설치되어 있는지 그리고/혹은 현재 시스템에 존재하는지를 확인할 수 있습니다:

$ nix-env -qas

-PS bash-3.0
--S binutils-2.15
IPS bison-1.875d

첫 글자(I)는 패키지가 현재 사용자 환경에 설치되어 있는지를 표시합니다. 두 번째(P)는 현재 시스템에 존재하는지 (그런 경우 명령을 사용한 사용자의 환경에 설치하는 것은 매우 빠른 작업입니다.)를 나타냅니다. 마지막의 (S)는 패키지의 소위 대체재가 존재하는지를 나타냅니다. 대체재란 닉스의 바이너리 배포 방법입니다. 어렵게 생각할 것이 아니라, 단지 로컬에서 빌드하지 않고 어딘가(통상적으로 네트워크 서버)에서 이미 빌드된 패키지를 다운로드 할 수 있는지를 의미합니다.

nix-env -i를 이용해 패키지를 설치합니다. 예를 들어,

$ nix-env -i subversion

subversion이라는 이름의 패키지를 설치합니다. (이는 당연히 Subversion 버전 관리 시스템을 말합니다).

주의

닉스에게 패키지 설치를 요구하면, 먼저 바이너리 캐시가 존재하면 그것을 가져오려고 시도합니다. 기본값으로 닉스는 바이너리 캐시 https://cache.nixos.org를 사용합니다; 해당 캐시는 거의 모든 Nixpkgs의 패키지 캐시를 담고 있습니다. 바이너리 캐시에 가능한 바이너리가 없을 경우에만, 닉스는 소스 코드로부터 패키지를 빌드합니다. 따라서 nix-env -i subversion의 결과가 소스 코드로부터 빌드하는 것이라면, Nixpkgs 빌드 서버에 사용자 플랫폼에 해당하는 이미 빌드된 패키지가 없거나 사용자의 Nixpkgs가 너무 오래되었거나 너무 이른 버전인 것입니다. 예를 들어, 사용자가 Nixpkgs의 너무 최신 버전의 체크아웃을 가지고 있다면 Nixpkgs의 빌드 서버는 모든 것을 빌드하여 결과 바이너리들을 https://cahce.nixos.org에 업로드할 기회조차 없었을 지도 모릅니다. Nixpkgs 채널은 캐시에 모든 바이너리가 업로드된 이후 업데이트되므로, (Nixpkgs 트리의 깃 체크아웃 버전이 아니라) Nixpkgs 채널을 고수한다면, 대부분 패키지의 바이너리를 얻을 수 있으리라 예상합니다.

당연히, 패키지는 삭제될 수 있습니다:

$ nix-env -e subversion

새 버전으로 업그레이드하는 것도 매우 쉽습니다. 만약 Nix 패키지의 새 버전이 있다면:

$ nix-env -u subversion

이는 새 닉스 표현식에 따랐을 때, "더 신규의" 버전이 존재하는 경우라면, 단지 Subversion 만을 따로 업그레이드합니다. 새로운 버전이라 함은 버전 넘버의 순서를 규약하는 몇몇의 예쁜 규칙들(대부분 사용자가 예측 가능함)을 따릅니다. 닉스 표현식에 존재하는 어떤 버전이든지 상관없이 Subversion을 대체하고자 하는거라면, -u 대신에 -i를 사용하면 됩니다; -i는 이미 설치된 버전이 뭐든지간에 삭제합니다.

뿐만 아니라, 새 버전이 있다면 한번에 모두 업그레이드 할 수도 있습니다:

$ nix-env -u

가끔은 실제로 수행하기보다, nix-env가 무엇을 수행할지 예상해볼 줄 안다면 도움이 될 것입니다. 예를 들어, nix-env -u로 어떤 패키지들이 업그레이드될 지 확인하고 싶다면, 아래 명령을 활용합니다.

$ nix-env -u --dry-run
(dry run; not doing anything)
upgrading `libxslt-1.1.0' to `libxslt-1.1.10'
upgrading `graphviz-1.10' to `graphviz-1.12'
upgrading `coreutils-5.0' to `coreutils-5.2.1'

Last update: November 4, 2021
Back to top