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

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

apt install '*'충돌(예: 여러 버전의 편집기)로 인해 아무것도 설치되지 않았지만 실수로 실행했지만 vim설치된 모든 패키지가 "자동" 속성을 잃어버렸습니다. 즉, 더 이상 APT의 자동 종속성 검사를 즐길 수 없습니다. 즉, 을 삭제하면 vimapt는 더 이상 삭제하라는 메시지를 표시하지 않습니다 vim-runtime. 고급 패키징 도구의 간단한 버전을 사용하고 있어서 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/status데비안에 있습니다. Aptitude에는 종속성에 대해 작동할 수 있는 고급 검색 기능이 있지만 apt에는 그렇지 않습니다. 임시 구문 분석을 수행할 수 있습니다 /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

출력 파일을 확인하고 만족스러우면 적절한 위치로 이동합니다.

관련 정보