AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 703950
Accepted
Philip Couling
Philip Couling
Asked: 2022-05-27 06:28:10 +0800 CST2022-05-27 06:28:10 +0800 CST 2022-05-27 06:28:10 +0800 CST

O que significa um til (~) no final de um requisito de dependência em um arquivo deb ou em apt?

  • 772

Estou curioso para entender como ~é processado em uma dependência pelo Apt ou como é definido para arquivos deb (não tenho certeza exatamente onde a sintaxe é definida).

Eu o encontrei em relação às dependências do metapacote Ubuntu (Focal) python3que tem a restrição de dependência: python3.8 >= 3.8.2-1~(veja aqui ).

Eu acredito que as versões do pacote são definidas para que eles classifiquem lexicalmente em ordem, mas quando eu verifiquei o ubuntu focal, não há uma versão python3.8que classifique lexicalmente >= 3.8.2-1~, mas há uma versão 3.8.10-0ubuntu1~20.04.4inferindo que as dependências do Ubuntu Focal estão quebradas ( não são ) ou há algum significado especial para ~uma dependência.

A única documentação que posso encontrar sobre o tópico é Debian's Declaring relations between packages . Mas isso não menciona a ~ou correspondência de padrões.

Então, qual é o significado do trailing ~em uma dependência .deb?

dpkg apt
  • 2 2 respostas
  • 1072 Views

2 respostas

  • Voted
  1. Eduardo Trápani
    2022-05-27T07:48:22+08:002022-05-27T07:48:22+08:00

    A documentação sobre os Versionestados de campo de controle (veja a página para o algoritmo completo):

    Primeiro, a parte inicial de cada string consistindo inteiramente de caracteres não-dígitos é determinada. Essas duas partes (uma das quais pode estar vazia) são comparadas lexicalmente. Se uma diferença for encontrada, ela será retornada.

    A comparação léxica é uma comparação de valores ASCII modificados para que todas as letras sejam classificadas antes de todas as não letras e para que um til seja classificado antes de qualquer coisa, até mesmo do final de uma parte. Por exemplo, as seguintes partes estão ordenadas da mais antiga para a mais recente: ~~, ~~a, ~, a parte vazia, a.

    Uma nota de rodapé adiciona isso sobre o til:

    Um uso comum de ~é para pré-lançamentos upstream. Por exemplo, 1.0~beta1~svn1245classifica antes de 1.0~beta1, que classifica antes de 1.0.

    • 10
  2. Best Answer
    Stephen Kitt
    2022-05-27T07:47:51+08:002022-05-27T07:47:51+08:00

    Os tils nas versões estão descritos na seção Política de versões . Basicamente, os tils são classificados antes de qualquer coisa.

    Assim >= 3.8.2-1~, é satisfeito por qualquer versão começando com 3.8.2-1, incluindo versões com sufixos começando com um til, como 3.8.2-1~bpo(como seria usado para backports), desde que não haja dois tils seguidos. Na verdade, tais dependências, com um til no final da versão (incluindo a revisão do Debian), são normalmente usadas para facilitar backports.

    Já que isso é especificamente sobre o que sua pergunta trata, e não é abordada pela Política Debian, vale a pena entrar em mais detalhes. Uma dependência de versão típica seria semelhante a python3.8 >= 3.8.2-1, exigindo a versão 3.8.2-1 ou posterior do python3.8pacote. Isso seria satisfatível por qualquer versão upstream posterior do Python 3.8, e qualquer revisão Debian posterior do pacote (3.8.2-2, ou 3.8.2-1ubuntu1, etc.). Mas não seria satisfeito por backports, que possuem versões da forma 3.8.2-1~bpo10+1; como o til classifica antes da string vazia, 3.8.2-1~bpo10+1 é considerado menor que 3.8.2-1. Backporting de pacotes usando dependências versionadas desta forma requer a mudança de suas dependências, o que vai contra a regra geral de que backports devem ser o mais próximo possível do pacote original.

    Portanto, adicionar um til como o último caractere de uma versão em uma dependência com versão ajuda a relaxar um pouco a dependência: permite que versões com o mesmo prefixo e um sufixo separado por til satisfaçam a dependência com versão. Isso é o oposto do uso documentado de tils para pré-lançamentos , que resulta em versões que não podem satisfazer dependências estritamente versionadas na versão final.

    (Observe que um til como o último caractere em um número de versão que inclui uma revisão do Debian, conforme fornecido na pergunta, não pode permitir pré-lançamentos upstream - eles se pareceriam com 3.8.2~pre1-1, que é menor que 3.8.2-1~.)

    As versões não são classificadas lexicalmente, elas são classificadas por componente, numericamente se possível, lexicalmente caso contrário. Assim, 3.8.10-0ubuntu1~20.04.4 satisfaz esta relação: 10 é maior que 2, então a dependência é satisfeita e a comparação para por aí.

    • 7

relate perguntas

  • O que procurar ao misturar software em diferentes versões de uma distribuição?

  • Entendendo a saída da lista apt

  • Tentar instalar o pacote debian npm faz com que o apt-get remova o libssl-dev

  • Como baixar o pacote não instalá-lo com o comando apt-get?

  • Qual é o benefício de /etc/apt/sources.list.d sobre /etc/apt/sources.list

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve