apt-get은 Debian/Ubuntu 패키지의 고정 버전 종속성을 올바르게 해결할 수 없습니다.

apt-get은 Debian/Ubuntu 패키지의 고정 버전 종속성을 올바르게 해결할 수 없습니다.

foo제어 파일이 다른 패키지의 고정 버전에 의존하는 사용자 정의 패키지가 있습니다 bar.

Depends: bar (= 1.2.3)

foo패키지는 bar내 저장소에 게시됩니다. 또한 bar저장소에 1.2.3 및 2.1.0과 같은 여러 버전이 있습니다. 이제 foo다음 명령을 사용하여 새 컴퓨터에 설치하려고 하면

apt-get install foo

실패했어

The following packages have unmet dependencies:
 foo : Depends: bar (= 1.2.3) but 2.1.0 is to be installed

즉, apt-get은 사용할 패키지의 올바른 버전을 파악할 수 없는 것 같습니다.

충돌을 추가하려고 합니다.

Depends: bar (= 1.2.3)
Conflicts: bar (>> 1.2.3)

하지만 이로 인해 오류가 다음으로 변경됩니다.

The following packages have unmet dependencies:
 foo : Depends: bar (= 1.2.3) but it is not going to be installed

설치할 때 bar 버전을 지정하면 작동합니다.

apt-get install foo bar=1.2.3

그러나 이것은 실현 가능하지 않습니다(실제 사례에는 여러 수준의 종속성이 있으며 명령줄에서 모든 것을 수동으로 찾고 지정하기 위해 자체 종속성 파서를 구현하고 싶지 않습니다. apt이 경우 건너뛰는 것이 좋습니다).

따라서 문제는 올바른 동작을 얻고 올바른 버전의 종속성을 자동으로 설치할 수 있는 방법이 있습니까(명령줄에서 해당 버전을 명시적으로 지정하지 않고도)는 것입니다. 또한 버전 고정을 사용하는 apt_preferences 경로를 사용하고 싶지 않다는 점을 덧붙여야 합니다. 그러려면 서로 다른 두 위치에서 버전을 관리해야 하기 때문입니다.

완성도를 높이기 위해 다양한 적절한 디버그 출력이 켜졌을 때의 전체 출력은 다음과 같습니다.

apt-get -o Debug::pkgProblemResolver=1 -o Debug::pkgDepCache::AutoInstall=1 -o Debug::pkgDepCache::Marker=1 install foo

Reading package lists... Done
Building dependency tree       
Reading state information... Done
  foo:amd64 Depends on bar [ amd64 ] < none -> 2.1.0 > ( universe/utils ) (= 1.2.3) can't be satisfied!
Starting pkgProblemResolver with broken count: 1
Starting 2 pkgProblemResolver with broken count: 1
Investigating (0) foo [ amd64 ] < none -> 1.0.0 > ( misc )
Broken foo:amd64 Depends on bar [ amd64 ] < none -> 2.1.0 > ( universe/utils ) (= 1.2.3)
  Considering bar:amd64 0 as a solution to foo:amd64 9998
  Re-Instated bar:amd64
Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 foo : Depends: bar (= 1.2.3) but 2.1.0 is to be installed
E: Unable to correct problems, you have held broken packages.

답변1

적절한 파서는 설치하려는 것이 주어진 대상 버전에서 사용 가능한 최신 패키지 버전이 아닐 가능성을 고려하지 않습니다. 데비안은 최신 버전의 패키지 이외의 설치를 지원하지 않습니다. 귀하의 시스템을 위해.

패키지 세트의 각 버전에 대해 서로 다른 저장소를 사용하는 경우 고정을 사용하여 특정 소스를 선호하거나 다른 코드 이름을 지정하고 apt의 -t 옵션을 사용하여 대상 버전을 선택할 수 있습니다. 그렇지 않으면 이것은 불가능합니다.

답변2

OP를 돕기에는 조금 늦었다는 것을 알고 있지만 실제로 작동하는 이 질문을 Google에 검색하는 것이 여전히 어렵습니다. apt-get이 실패하면 적성 파서는 몇 가지 힌트를 통해 성공적인 솔루션을 제안할 수 있습니다.

aptitude install -o "Aptitude::ProblemResolver::Hints::=reject foo :UNINST" foo

기본적으로 위의 팁은종속성 해결 프로그램이 말합니다.패키지를 "설치하지 않음"과 관련된 모든 솔루션을 거부 foo하고 적성 파서가 더 열심히 노력하도록 강제합니다 apt-get.

관련 정보