私の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つのバージョンのみをインストールする必要があり、選択したチャンネルにハードコードされています。」。ポイントは何ですか?
答え1
ここでは、パッケージのすべての以前のバージョンとインストール方法を確認できます。https://lazamar.co.uk/nix-versions
Nixは最新バージョンのパッケージのみをフォークに保存します。広く使用されているメジャーバージョン(python2やpython3など)が複数ある場合は、各バージョンの最新バージョンが一覧表示されます。
残念ながら、 nix には、以前のフォークで使用可能なすべてのバージョンのパッケージを検索するための基本的な方法はありません。
この問題を解決するためにリンクされたツールを作成しました。
答え2
nix-env -iA nixpkgs.gcc8
チャンネル名をそのように指定したので、プロパティパス(たとえば「nixpkgs」)を使用することをお勧めします(NixOSユーザーは通常「nixos」名を使用します)。属性パスは、一般名とは異なり、明示的です。
これらをどのように発見しますか? 1つの方法は、たとえばクエリ-P
に追加することです。nix-env -qa
私は通常、タブ補完を使用するか、ファイルをnix repl
ナビゲートしますall-packages.nix
:-) (attrpathを知ったり推測しようとしない限り)
注:
- 単一の構成ファイルに複数のバージョンを同時に含めようとすると(優先順位を付けて)、優先順位を設定しない限り、構成ファイル用の
nix-env
シンボリックリンクツリーを作成するとクラッシュが発生します。 - シングルチャンネルリリース(例:nixpkgsコミット)内では、パッケージあたりのバージョンと設定の数を最小限に(通常は1つだけ)維持しようとします。これは、リソースの節約(バイナリの構築と展開)とより良い品質/メンテナンス管理によって動機付けられます。