Packaging deb: como lidar com dependências potencialmente ausentes

3

Problema:

Estou tentando criar um pacote DEB a partir de minhas próprias fontes.
Tudo está bem, exceto lidar com as dependências.

Pelo que entendi, a maneira mais genuína de marcar as dependências é listá-las na seção Depends do arquivo control . Meu aplicativo requer dois pacotes ( aapt e zipalign ) que estão presentes somente no Debian recente (≥ jessie ) e no Ubuntu (≥ willy repositórios, então definitivamente haveria um problema ao instalar meu .deb nos antigos.

Idéias:

Diversas ideias sobre esta questão:

  • Instale os binários autônomos necessários (como parte do meu .deb) em /usr/bin .
    • PRO : As dependências necessárias estão presentes no meu pacote como binários autônomos, portanto, a seção Depends não será usada e os pacotes de repositórios ausentes não serão um problema.
    • CON : se os binários de destino já existirem na máquina de destino como parte de outro pacote, dpkg encontrará um erro e forçar o usuário a transmitir a opção --force-overwrite não é uma ótima ideia.
  • Instale os binários autônomos necessários (como parte do meu .deb) em /usr/share/myapp .
    • PRO : O aplicativo usa seu próprio diretório isolado para os binários de terceiros, portanto, ele não altera os pacotes potencialmente existentes (e, novamente, a seção Depends não é mais necessária).
    • CON : o diretório share é destinado a dados independentes de arquitetura, que os binários não são.
  • Instale o aplicativo inteiro no diretório /opt/myapp .
    • PRO : Este método não viola a estrutura do FHS e mantém os arquivos em um diretório totalmente isolado.
    • CON : No entanto, essa não é uma forma autêntica do UNIX, especialmente para o software de código aberto.
  • Use a seção Recommends em vez de Depends para uma relação mais fraca e forneça algumas instruções para os usuários sobre como obter os pacotes que faltam.
    • CON : O próprio pacote .deb perde o ponto.

Nenhum desses métodos parece certo para mim. Existe alguma maneira padrão de lidar com este problema, eu perdi alguma solução óbvia? Por exemplo, algum tipo de instalação condicional seria muito útil (instale os binários de terceiros somente se o comando which não produzir nada, etc.).

Quaisquer pensamentos e conselhos serão apreciados.

    
por kefir500 07.08.2016 / 12:13

1 resposta

3

Forneça (além do pacote principal) pacotes separados aapt e zipalign . Certifique-se de que eles tenham ~ em sua versão (assim: zipalign-21-4~kefir1.deb ). Em seguida, coloque-os em seu repositório junto com seu pacote principal, que tem Depends: aapt, zipalign (eu uso fácil reprepro para hospedar meu repositório, não é difícil).

Este é o modo Debian (da mesma forma que backports.debian.org funciona) - se o sistema é Jessie e fornece aapt , que será usado (como você pacote tem til na versão, ele é usado apenas como último recurso). Se o sistema for um Debian antigo, só então seus pacotes extras serão extraídos. E os usuários obtêm o benefício de atualizações fáceis de obter atualizações / segurança para seus pacotes.

A vantagem adicional é que, ao atualizar o Jessie, os pacotes oficiais serão extraídos e sobrescreverão seus pacakges extras mais antigos (a menos que você dependa especificamente de versões específicas ou pacotes extras, é claro). E assim você não tem versões antigas / duplicadas por aí, e os usuários obtêm benefícios adicionais dos patches da equipe de segurança da Debian, etc.

    
por 07.08.2016 / 15:20