Como fazer com que o pacote Debian gere dois pacotes, devido a um arquivo fonte upstream?

14

Estou empacotando algo para o meu PPA. A fonte upstream é um .tar.gzarquivo que é baseado em Makefile.

Como este pacote possui uma quantidade significativa de dados independentes da arquitetura, seria aconselhável que os scripts de construção gerassem dois pacotes:

  • pacote
  • pacote -dados

Como posso configurar isso? Eu editei meu controlarquivo Debian para gerar dois pacotes, mas não tenho idéia de como obter os arquivos certos para o pacote certo.

Como os arquivos de dados estão atualmente instalados no Makefile, estou meio perdido aqui.

Nathan Osman
fonte

Respostas:

14

Este é um lugar onde eu sempre achei a documentação ausente. Aprendi apenas como isso funciona, observando como é feito em outros pacotes. Como na maioria das coisas no pacote Debian, existem algumas maneiras de fazer isso. Acho que a maneira mais simples é usar debian/package.installarquivos. Aqui está um exemplo de um pacote no qual trabalhei, a imaginação (ramo bzr) .

Primeiro, precisamos criar o pacote debian/control. Existem três estrofes agora. Um para o pacote de origem e um para cada pacote binário. Observe que o pacote foo-data deve ser Architecture: all. Observe também que a imaginação depende imagination-common (= ${source:Version}).

Em seguida, criamos um debian/imagination.installarquivo. Isso contém os arquivos ou caminhos específicos que queremos encontrar no pacote imaginação. Para este pacote, queremos todos os arquivos dependentes da arquitetura. O arquivo da área de trabalho está incluído, como é necessário dizer com o binário que ele chama em sua Exec:linha.

usr/bin/
usr/lib/
/usr/share/applications/imagination.desktop

Precisamos criar um debian/imagination-common.installarquivo. Isso conterá todos os arquivos, imagens, traduções, documentos e similares independentes da arquitetura.

/usr/share/doc/
/usr/share/icons/
/usr/share/imagination/
/usr/share/locale/

man dh_install descreve o que realmente está acontecendo aqui:

talvez você tenha um pacote grande que cria vários pacotes binários. Você pode usar o Makefile upstream para instalar tudo no debian / tmp e, em seguida, usar o dh_install para copiar diretórios e arquivos de lá para os diretórios apropriados de compilação de pacotes.

O que significa "os diretórios apropriados de compilação de pacotes" é que, ao final do processo de compilação, tudo o que estará no resultado foo.debserá encontrado em src/debian/foo. Os arquivos que terminarão foo-data.debserão encontrados em src/debian/foo-data. Como debian/rulesé essencialmente apenas um Makefile, você pode começar a imaginar outras maneiras de obter o mesmo resultado.

andrewsomething
fonte
Muito obrigado! Explicação muito clara e funciona perfeitamente.
Nathan Osman