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