Apt의 종속성이 어떻게 처리되는지 또는 deb 파일에 대해 어떻게 정의되는지 알고 싶습니다 ~
(구문이 어디에 정의되어 있는지 잘 모르겠습니다).
python3
종속성 제약 조건이 있는 Ubuntu(Focal) 메타패키지와 관련된 종속성 문제를 발견했습니다 python3.8 >= 3.8.2-1~
.여기).
python3.8
패키지 버전이 사전순으로 정렬되도록 정의되어 있다고 생각하는데, 우분투 포커스를 확인해 보니 사전순으로 정렬된 버전 은 없었지만 Ubuntu Focal의 종속성이 손상된 것으로 추론되는 >=
3.8.2-1~
버전이 하나 있었습니다 (3.8.10-0ubuntu1~20.04.4
그들은 그렇지 않다~
) 또는 종속성에 특별한 의미가 있습니다.
이 주제에 관해 내가 찾을 수 있는 유일한 문서는 데비안의 문서입니다.패키지 간의 관계 선언. 그러나 이것은 ~
OR 패턴 일치를 언급하지 않습니다 .
~
그렇다면 .deb 종속성에 대한 후행의 의미는 무엇입니까?
답변1
이것문서제어 Version
필드 상태(전체 알고리즘은 페이지 참조):
숫자가 아닌 문자로만 구성된 각 문자열의 초기 부분을 식별하는 것부터 시작합니다. 이 두 부분(그 중 하나는 비어 있을 수 있음)은 어휘적으로 비교됩니다. 차이점이 발견되면 반환됩니다.
어휘 비교는 수정된 ASCII 값을 비교하여 모든 문자가 모든 비문자보다 먼저 정렬되고 물결표가 다른 것보다 먼저(섹션 끝에서도) 정렬되도록 합니다. 예를 들어, 다음 섹션은 가장 빠른 것부터 최신 것까지 정렬됩니다:
~~
,~~a
,~
, 빈 섹션,a
.
물결표에 대해 추가된 각주:
일반적인 용도 중 하나
~
는 업스트림 시험판입니다. 예를 들어1.0~beta1~svn1245
이전 정렬1.0~beta1
, 이전 정렬 입니다1.0
.
답변2
버전의 물결표 문자를 설명합니다.버전 정책 섹션에서. 기본적으로 물결표는 무엇보다 먼저 정렬됩니다.
따라서 연속해서 두 개의 물결표가 없는 한 물결표 자체로 시작하는 접미사가 있는 버전(예: 백포트의 경우)을 포함하여 >= 3.8.2-1~
으로 시작하는 모든 버전으로 충분합니다 . 실제로 이러한 종속성(버전 끝에 물결표가 있음(Debian 개정 포함))은 백포팅을 용이하게 하는 데 자주 사용됩니다.3.8.2-1
3.8.2-1~bpo
이것이 바로 당신의 문제이고 데비안 정책으로 해결되지 않기 때문에 더 자세히 논의할 가치가 있습니다. 일반적인 버전 종속성은 다음과 같으며 python3.8 >= 3.8.2-1
패키지 버전 3.8.2-1 이상이 필요합니다 python3.8
. Python 3.8의 이후 업스트림 버전은 이 패키지의 이후 Debian 버전(3.8.2-2 또는 3.8.2-1ubuntu1 등)과 마찬가지로 이 요구 사항을 충족합니다. 그러나 백포트된 버전은 3.8.2-1~bpo10+1 형식입니다. 물결표가 빈 문자열 앞에 오기 때문에 3.8.2-1~bpo10+1은 3.8.2보다 작은 것으로 간주됩니다. -1. 따라서 이러한 형태의 버전 종속성이 있는 패키지를 백포트하려면 해당 종속성을 변경해야 하며, 이는 백포트가 원본 패키지에 최대한 가까워야 한다는 일반 규칙을 위반합니다.
따라서 버전이 지정된 종속성에서 버전의 마지막 문자로 물결표를 추가하면 종속성 관계가 약간 완화되는 데 도움이 됩니다. 이를 통해 동일한 접두사와 물결표로 구분된 접미사가 있는 버전이 버전 종속성을 충족할 수 있습니다. 이것은 반대이다시험판 버전의 물결표 사용 기록, 그 결과 버전할 수 없다최종 릴리스에 대한 엄격한 버전 종속성을 충족합니다.
(질문에 제공된 것처럼 데비안 개정판을 포함하는 버전 번호의 마지막 문자로 물결표를 참고하세요.할 수 없다업스트림 사전 릴리스가 허용됩니다. 이는 3.8.2~pre1-1과 유사하며 3.8.2-1~보다 작습니다. )
버전은 어휘순으로 정렬되지 않고 구성요소별로, 가능하면 숫자순으로, 그렇지 않으면 어휘순으로 정렬됩니다. 따라서 3.8.10-0ubuntu1~20.04.4는 이 관계를 충족합니다. 10이 2보다 크므로 종속 관계가 충족되고 비교가 여기서 끝납니다.