2017-12-23 28 views
2

私は最近NixOSをインストールしました。bruno(ユーザプロファイル)、デフォルト(rootで使用)、システム(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 

Firefoxのみがリストされているが。ルートプロファイルを使用してみましょう:

~> 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」として定義されていることは、パッケージを普遍的に問い合わせるツールを提供していないようです。マニュアルとdebian aptのalter egoのような感じ。
このようなツールはありますか、これは問題ではない、つまり、一般的にプロファイル/環境全体に存在するすべてのパッケージのリストがない人は大丈夫ですか?

答えて

3

nix-env -qは、nix-env -iによって作成されたもののような必須の「環境」にインストールされたパッケージのみを報告します。

nix-envは、宣言的で不変なNixシステムに比べて薄い層である命令的パッケージ管理のためのツールです。 profilesメカニズムは、変更のための手段を提供し、環境内にあるパッケージのセットを記録するためにプロファイル内にmanifest.nixを作成します。

NixOSシステムはprofilesを使用しますが、manifest.nixファイルは提供しません。これは理にかなっています。なぜなら、NixOSシステムは毎回ゼロから再構築されるため、うまく宣言的になります。

したがって、nix-envはNixOSプロファイルを照会できません。

したがって、nix-env -qは、必須インストールされたユーザーパッケージを照会します。 sudo nix-env -qは、あなたのシステムの一部であるため、あなたのNixOSパッケージを含んでいない、rootによって必須にインストールされたものを宣言的に示しています。あなたのNixOSシステムで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

    ありがとうございました。あなたの2番目の段落は私にはあまり明確ではありません。「Nixの機能概念の上に構築されました」はNixOSでも当てはまります。 nixos.orgのNixは "The Purely Functional Package Manager"として定義されているので、 "Nixの機能部分の中に組み込まれています" 私が混乱しているのは、パッケージマネージャであるNixが、nix-envまたはNixOS経由でインストールされているかどうかにかかわらず、パッケージを問い合わせる手段を提供するはずだということです。 –

    +0

    最後の段落で質問を編集しました。私はあなたに+1を与えていますが、私はそこにもっと説明があるかもしれないと感じるので、これを受け入れません:) –

    +0

    私は混乱しやすい段落を展開し、あなたを助けるかもしれないいくつかのコマンドを追加しました –

    関連する問題