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세대에는 포함되지 않고 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? 세대를 영구적으로 삭제하면 잃게 될 패키지 목록을 볼 수 있는 명령이나 매우 간단한 스크립트가 있습니까? 아니면 두 세대의 차이를 확인할 수 있는 방법이 있나요? 나는 가장 간단한 관용적 솔루션을 위해 노력합니다.

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

관련 정보