nix-env --delete- Generations를 실행하여 손실되는 패키지 나열

nix-env --delete- Generations를 실행하여 손실되는 패키지 나열

나는 사용한다닉스OS, 닉스 버전 1.10. nix-env, Nix 패키지 관리자의 설치 명령으로 새 패키지를 생성합니다.세대패키지를 설치할 때마다. 이렇게 하면 다양한 패키지 구성이 별도의 세대에 저장되며, 구성 간을 전환하여 지금부터 다른 패키지가 설치되어 있던 시스템의 이전 상태로 롤백할 수 있습니다.

emacs새로운 세대를 생성하는 package 를 설치했다고 가정해 보겠습니다 .

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

1세대에는 가 포함되어 있지 않지만 emacs2세대에는 포함되어 있습니다. 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)

대신 다음을 의미하는 경우:

어떤 패키지가 "물리적으로" 삭제될지

좀 더 까다로운 것 같아요. 가능한 시작점은 nix-store --query --roots삭제할 프로필의 각 패키지에 사용하는 것입니다.

답변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)

관련 정보