나는 -f가 --fix-broken
매뉴얼의 의미라는 것을 알고 있습니다. 패키지의 문제를 해결하려고 시도하고 있지만 정확히 무엇을 합니까? 이러한 패키지를 수정하는 방법이나 수정이 필요한지 여부 및 방법을 어떻게 결정합니까? 가끔 실패하는 이유는 무엇입니까?
답변1
, --fix-broken
또는 옵션을 true로 -f
설정 APT::Get::Fix-Broken
하지만 이는 재미있는 부분이 아닙니다. APT::Get::Fix-Broken
그것이 사실 일 때마다부울 값을 설정합니다.FixBroken
true라고 부르세요 .apt-get에서 더 많은 로직 활성화. 이 논리는 두 가지 작업을 수행합니다. 즉, pkgFixBroken
false를 반환해야 하는 알고리즘.cc 파일에 있는 함수를 호출하고 BrokenCount()
함수가 0을 반환하는지 확인합니다. 후자는 명백합니다. BrokenCount가 0이 아니면 손상된 패킷이 있고 뭔가 잘못된 것입니다.여기서 관련 부분은 pkgFixBroken
초기화된 후 함수로 호출되는 클래스의 인스턴스 입니다 Resolve()
.
패키지 복구는 pkgFixBroken
설치된 모든 패키지를 업그레이드 가능으로 표시하고 다운로드 가능한 버전이 없는 패키지를 복구 가능으로 표시하는 것만큼 간단합니다. 작업이 완료되면 pkgProblemResolver
함수(또는 무엇이든)를 호출하므로 상황이 약간 복잡해집니다. 그러나 무슨 일이 일어나고 있는지 어느 정도 설명하는 주석이 있습니다.
이 루틴은 각 패킷의 점수를 계산하여 작동합니다. 점수는 패키지의 우선순위와 모든 역방향 종속성을 고려하여 도출되며, 이는 패키지 조정으로 인해 발생할 수 있는 손상 정도를 반영하는 정수를 제공합니다.
가장 높은 점수에서 가장 낮은 점수로 진행됩니다.종속 패키지를 유지하거나 제거하여 중단을 수정하세요.. 실패하면 패키지 자체를 삭제하고 계속합니다. 루틴은 손상된 상태에서 고정된 상태로 지능적으로 전환할 수 있어야 합니다.
BrokenFix 플래그는 알고리즘이 문제를 피하기 위해 패키지 업그레이드를 시도하는 모드를 활성화합니다.
그것은 어느 정도 설명이 됩니다. 점수를 할당하고 점수가 더 높은 패키지의 모든 패키지 종속성을 해결하려고 시도합니다.
그렇지 않은 경우를 제외하고는 대부분의 문제를 해결하는 데 충분해 보입니다. 그 이유는 "깨진 부분 수정"이 패키지를 "수정"하려고 시도하는 것이 아니라 단순히 모든 패키지 종속성이 충족되는지 확인하기 때문입니다. 즉, A가 B와 C에 의존하는 경우 B와 C가 A보다 먼저 설치되었는지 확인하고다른 사람은 없어.
일반적인 실패 이유는 종속성이 충족되지 않았기 때문이 아닙니다. 즉, 모든 패키지가 존재하고 이론적으로 설치될 수 있기 때문이 아니라, 실패하는 또 다른 dpkg 테스트가 있기 때문입니다. 이러한 경우에는 dpkg --audit
적절한 dpkg --configure -a
것보다 더 많은 정보를 제공할 수 있습니다.
모든 설명을 읽어 보시기를 권장하며, C++에 대한 배경 지식이 있는 경우 해당 코드가 수행하는 작업에 대해 더 사려 깊은 설명이 필요한 경우 코드를 읽어 보십시오.