nix-env --delete-Generations を実行して失われたパッケージを一覧表示する

nix-env --delete-Generations を実行して失われたパッケージを一覧表示する

私は使うニックOS、ニックスバージョン1.10。nix-env、Nixパッケージマネージャのインストールコマンドを使用して新しいパッケージを作成します。世代パッケージがインストールされるたびに。これにより、さまざまなパッケージ構成がさまざまな世代に保存され、構成間で切り替えられ、今後さまざまなパッケージがインストールされているシステムの以前の状態にロールバックできます。

パッケージをインストールemacsし、新しい世代が作成されるとします。

$ nix-env --list-generations
1   2015-09-18 14:32:51   
2   2015-09-19 15:41:58   (current)

第1世代には含まれず、emacs第2世代には含まれます。 1世代に切り替えて2世代を削除すると、以下が失われますemacs

$ nix-env --switch-generation 1
switching from generation 2 to 1
$ nix-env --delete-generations 2
removing generation 2

情報が少なすぎてジョブが実行され、追加または削除する--delete-generationsパッケージのリストが指定されていません。役に立ちません。--verbose--dry-run-vvvvv

$ nix-env --dry-run --delete-generations 14
(dry run; not doing anything)
would remove generation 14
$ nix-env --verbose --dry-run --delete-generations 14
(dry run; not doing anything)
evaluating file ‘/nix/store/13lmbyk148z95sp96gh0vr2b867ypl8g-nix-1.10/share/nix/corepkgs/derivation.nix’
would remove generation 14

しかし、私が負けたことをどうやって知ることができますかemacs?世代を永久に削除すると、失われるパッケージのリストを表示するコマンドや非常に単純なスクリプトがありますか?それとも、2世代の違いを確認する方法はありますか?私は最も簡単な慣用的な解決策に取り組んでいます。

答え1

「パッケージ紛失」の意味によって異なります。

あなたが意味すると仮定すると:

ビルドを削除した後は、パッケージが提供するコマンドを実行することはできません。

最新でないプロファイルを削除しても、すべてのコマンドは存在し続けます。この構成ファイルは独立しています。

現在の構成ファイルに含まれている内容を確認するには、次のようにします。

nix-store --query --references /nix/var/nix/profiles/per-user/$USER/profile

それはユーザー情報。システム構成ファイルを表示します。

nix-store --query --references /nix/var/nix/profiles/system

より簡単な方法があるかもしれませんが、上記の方法では答えを見つけることができます。

# Replace $1 by previous profile number
nix-store --query --references /nix/var/nix/profiles/{system,per-user/$USER/profile} > /tmp/current-packages
nix-store --query --references /nix/var/nix/profiles/{system,per-user/$USER/profile-$1-link} > /tmp/prev-packages 
# The packages "lost" by changing profile from current to profile-$1-link is the set difference
comm -32 <(sort /tmp/current-packages) <(sort /tmp/prev-packages)

以下を意味する場合:

「物理的に」削除されるパッケージは何ですか?

私の考えでは、これは少し面倒だと思います。可能な開始点の1つは、nix-store --query --roots削除する構成ファイルの各パッケージに使用することです。

答え2

正確に必要なわけではありませんが、コード名を知ることで2つの世代を比較できます。

nix-store -q --referencesフォークが依存するフォーク(「パッケージ」)のリストを取得するために使用できます。そして「システム構成」はもう一つの派生物です!

基本的に例は次のとおりです。

diff <(nix-store -q --references /nix/var/nix/profiles/system) <(nix-store -q --references /nix/var/nix/profiles/system-615-link)

関連情報