特定のバージョンのパッケージを検索してインストールする方法は?

特定のバージョンのパッケージを検索してインストールする方法は?

私の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つだけ)維持しようとします。これは、リソースの節約(バイナリの構築と展開)とより良い品質/メンテナンス管理によって動機付けられます。

関連情報