Como fazer com que o empacotamento do Debian gere dois pacotes dado um arquivo fonte de upstream?

14

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

Como esse pacote tem uma quantidade significativa de dados independentes de arquitetura, seria sensato ter os scripts de construção gerando dois pacotes:

  • pacote
  • pacote -data

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

Como os arquivos de dados estão atualmente todos instalados através do Makefile, estou meio que perdido aqui.

    
por Nathan Osman 15.12.2010 / 04:20

1 resposta

14

Este é um lugar onde eu sempre achei a documentação em falta. Eu praticamente só aprendi como isso funciona, observando como isso é feito em outros pacotes. Como a maioria das coisas no empacotamento da Debian, existem algumas maneiras de fazer isso. Acho que a maneira mais simples é usar arquivos debian/package.install . Aqui está um exemplo de um pacote em que trabalhei, imagination (ramificação bzr) .

Primeiro, precisamos criar o pacote em debian/control . Existem três estrofes agora. Um para o pacote fonte 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 de imagination-common (= ${source:Version}) .

Em seguida, criamos um arquivo debian/imagination.install . Isto contém os arquivos ou caminhos específicos que queremos finalizar no pacote de imaginação. Para este pacote, queremos todos os arquivos dependentes da arquitetura. O arquivo da área de trabalho é incluído, já que ele precisa dizer com o binário que chama na linha Exec: .

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

Precisamos criar um arquivo debian/imagination-common.install . Isso conterá todos os arquivos independentes de arquitetura, imagens, traduções, documentos e afins.

/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   constrói vários pacotes binários. Você   pode usar o Makefile upstream para   instala tudo em debian / tmp e   então use o dh_install para copiar   diretórios e arquivos de lá em   os diretórios de compilação do pacote adequado.

O que significa "os diretórios de compilação de pacotes apropriados" é que, no final do processo de compilação, tudo o que estará no foo.deb resultante será encontrado em src/debian/foo . Os arquivos que serão encontrados em foo-data.deb serã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.

    
por andrewsomething 15.12.2010 / 05:13