실수로 "apt install *"을 실행하면 이제 모든 패키지가 "수동 설치"로 표시됩니다.

실수로 "apt install *"을 실행하면 이제 모든 패키지가 "수동 설치"로 표시됩니다.

실수로 달렸습니다 apt install '*'. 충돌(예: 여러 버전의 편집기)로 인해 아무 것도 설치되지 않았지만 vim설치된 모든 패키지는 "자동" 속성을 잃었습니다. 이는 더 이상 APT의 자동 종속성 검사를 즐길 수 없음을 의미합니다. 즉, 을 제거하면 vimapt는 더 이상 을 제거하라는 메시지를 표시하지 않습니다 vim-runtime. 저는 고급 패키징 도구(Advanced Packaging Tool)의 간단한 버전을 사용하고 있으므로 apt-mark사용할 수 없습니다. automatic다른 사람이 의존하고 있는 재산을 어떻게 복원할 수 있나요 ?

참고: apt, apt-get, apt-cache및 사용 가능 apt-config합니다 apt-key.

답변1

Debian 및 파생 제품에서는 수동 설치와 자동 설치에 대한 정보가 /var/lib/apt/extended_states. 자동 백업이나 로그가 없습니다. 해당 파일의 백업이 있으면 복원하십시오.

백업이 없다면, 혹시라도 만들 경우를 대비해 먼저 백업을 만들어 두세요. 그런 다음 각 패키지에 대해 행을 변경하여 패키지를 수동으로 설치된 것으로 표시합니다 Auto-Installed: 0.Auto-Installed: 1

APT 자체는 dpkg에 의해 수행되는 설치된 패키지의 종속성을 추적하지 않습니다. 정보는 /var/lib/dpkg/statusDebian에 있습니다. Aptitude에는 종속성에 대해 작동할 수 있지만 적절하지는 않은 고급 검색 기능이 있습니다. 의 임시 구문 분석을 수행할 수 있습니다 /var/lib/dpkg/status. 다음 스크립트(최소 테스트)는 설치된 일부 패키지가 의존하는 패키지 목록을 생성합니다.

</var/lib/dpkg/status awk '
    /^Package:/ {package=$2}
    /^Status:/ && $4 != "installed" {package=""}
    /^(Depends|Pre-Depends|Recommends|Suggests):/ && package != "" {
        sub(/^[^:]*: */, "");
        gsub(/ (\([^()]*\))/, "");
        split($0, dependencies, /[|, ]+/);
        for (d in dependencies) print dependencies[d]}
' | sort -u >dependencies.txt

해당 목록을 검토하고 종속성으로 존재하지만 관계없이 유지하고 싶은 패키지의 일부 줄을 제거할 수도 있습니다. 그런 다음 이것을 사용하여 조정하십시오 /var/lib/apt/extended_states.

</var/lib/apt/extended_states awk '
    BEGIN {
        while (getline <"dependencies.txt") auto[$0]=1;
        RS="";
    }
    $2 in auto {sub(/\nAuto-Installed: 0/, "\nAuto-Installed: 1")}
    {print $0 "\n"}
' >extended_states.new

출력 파일을 검토하고 만족스러우면 해당 위치로 이동합니다.

관련 정보