
나는 사용한다닉스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세대에는 가 포함되어 있지 않지만 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)
대신 다음을 의미하는 경우:
어떤 패키지가 "물리적으로" 삭제될지
좀 더 까다로운 것 같아요. 가능한 시작점은 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)