Como configurar o debian / control para forçar a atualização de uma biblioteca?

5

Esta questão é destinada a mantenedores de PPA / pacotes.

Eu tenho um PPA com 2 pacotes:

  • mypackage (atualmente versão 1 ~ ppa1 ~ quantal)
  • mypackagelib (atualmente versão 1 ~ ppa1 ~ quantal)

Atualmente, o arquivo de controle do mypackage possui:

Depends: mypackagelib

Eu quero atualizar os 2 pacotes para a versão '2' (mypackage versão 2 e mypackagelib versão 2).

Como posso ter certeza de que os 2 pacotes serão atualizados quando o usuário atualizar o 'mypackage'?

FYI, alterando o campo "Depende" para:

Depends: mypackagelib (>= 2)

NÃO funciona e retorna o seguinte erro:

mypackage : Depends: mypackagelib (>= 2) but mypackagelib-2~ppa1~quantal is to be installed
    
por LovinBuntu 16.12.2012 / 21:25

1 resposta

2

Seus números de versão são inconsistentes. A relação de ordem nos números de versão é bastante complexa. É descrito no manual de políticas do Debian . Em particular:

  

Primeiro, a parte inicial de cada string consistindo inteiramente de caracteres não dígitos é determinada. Estas duas partes (uma das quais pode estar vazia) são comparadas lexicalmente. Se uma diferença for encontrada, será retornada. A comparação lexical é uma comparação de valores ASCII modificados para que todas as letras sejam classificadas mais cedo do que todas as não-letras e para que um til seja classificado antes de qualquer coisa, até o final de uma parte. Por exemplo, as seguintes partes estão em ordem de classificação do mais antigo para o mais recente: ~~, ~~ a, ~, a parte vazia, a.

Em particular, 3.196~ppa1~quantal é considerado mais antigo que 3.196 . O caso de uso típico de ~ é versões beta: 1.42~beta3 vem antes de 1.42 . Você pode verificar sua compreensão dos números de versão do pacote Debian executando dpkg --compare-versions :

$ dpkg --compare-versions '3.196~ppa1~quantal' '>=' '3.196'; echo $?
1

0 significa que a relação de ordem é satisfeita, 1 significa que não é.

Há alguns conselhos incompletos sobre os números de versão na ajuda de empacotamento do PPA . Como o seu pacote não está no Ubuntu, você não precisa do sufixo ~ ; você deve usar um número de versão como 3.196ppa1 . A dependência de origem pode ser (>= 3.196) se qualquer release de 3.196 for feito, ou algo como (>= 3.196ppa5) se você precisar de pelo menos uma certa liberação de pacote.

Se você manter o ~ aqui, você deve colocá-lo na dependência de origem também: (>= 3.196~ppa1~quantal) . Para dizer "pelo menos a mesma versão do pacote principal", escreva

Depends: mypackagelib (>= ${binary:Version})

Outra possibilidade ( graças a tumbleweed é declarar uma dependência em 3.196~ (o número e um til e nada mais), o que é uma versão mais antiga que 3.196~anything .

(Isso não se aplica a você, mas pode se aplicar a futuros visitantes. O que segue se aplica quando libmypackage contém uma biblioteca compartilhada ( .so ).)

A propósito, a convenção de nomes para bibliotecas é libmypackage1 e libmypackage2 . Se você começou com mypackagelib-1 , você deve deixar isso, mas mude para libmypackage2 para a próxima versão.

Os dois pacotes de biblioteca mypackagelib-1 e mypackagelib-2 podem coexistir se ainda houver programas usando a biblioteca antiga e programas usando a nova biblioteca instalada ao mesmo tempo. A menos que o administrador solicite explicitamente a instalação do pacote da biblioteca (que ele só faria se tivesse um programa não empacotado exigindo a biblioteca, por exemplo, em /usr/local ), o pacote da biblioteca antiga será marcado como instalado automaticamente, ele será desinstalado automaticamente quando não houver dependências.

Para mais informações sobre como empacotar uma biblioteca, leia a Biblioteca Debian Guia de embalagem . Embora as políticas do Debian não sejam obrigatórias para um PPA do Ubuntu, é uma boa idéia segui-las: elas ilustram as melhores práticas para trabalhar com ferramentas de empacotamento do Debian.

    
por Gilles 16.12.2012 / 22:58