
Então, depois de me debater de documento em documento, agarrei-me e segui este tutorial:http://packaging.ubuntu.com/html/packaging-new-software.html
Então tentei as etapas e comecei a ter problemas. Pesquisar no Google tem sido em grande parte inútil. Eu tenho um projeto autotools c++ muito padrão que cria uma biblioteca e alguns executáveis. Eu queria fazer um pacote no estilo libfoo-dev e colocá-lo em um PPA.
Para ajudar a mostrar o que estou fazendo, coloquei um script que executa os passos propostos no tutorial (até onde estou entendendo corretamente..). Aqui está o que eu tenho:https://github.com/kevinkreiser/ppa-libprime-server
Eu tenho um script bash build.sh
que contém todas as etapas que venho executando. No começo eu estava tendo problemas para dh_*
construir qualquer coisa do meu projeto até que @sneetsher me deu uma dica para alterar o arquivo de regras para fazer o autoreconf. Neste ponto, meus únicos problemas são W: libprime-server0: empty-binary-package
e W: prime-server-bin: empty-binary-package
.
E como diz, o problema agora é que alguns dos meus pacotes não contêm muita coisa:
user@pc$ lesspipe libprime-server0_0.3.2-0ubuntu1_amd64.deb
libprime-server0_0.3.2-0ubuntu1_amd64.deb:
neues Debian-Paket, Version 2.0.
Größe 2004 Byte: control-Archiv= 528 Byte.
425 Byte, 12 Zeilen control
160 Byte, 2 Zeilen md5sums
Package: libprime-server0
Source: libprime-server
Version: 0.3.2-0ubuntu1
Architecture: amd64
Maintainer: Kevin Kreiser <[email protected]>
Installed-Size: 26
Section: contrib/libs
Priority: optional
Homepage: https://github.com/kevinkreiser/prime_server
Description: Service oriented distributed computing API
A set of APIs designed around the zeromq butterfly pattern
specifically focused on servicing http requests
*** Contents:
drwxr-xr-x root/root 0 2016-04-21 11:48 ./
drwxr-xr-x root/root 0 2016-04-21 11:48 ./usr/
drwxr-xr-x root/root 0 2016-04-21 11:48 ./usr/share/
drwxr-xr-x root/root 0 2016-04-21 11:48 ./usr/share/doc/
drwxr-xr-x root/root 0 2016-04-21 11:48 ./usr/share/doc/libprime-server0/
-rw-r--r-- root/root 167 2016-04-18 11:04 ./usr/share/doc/libprime-server0/changelog.Debian.gz
-rw-r--r-- root/root 1558 2016-04-15 09:46 ./usr/share/doc/libprime-server0/copyright
user@pc:~/sandbox/ppa-libprime-server/build$ lesspipe prime-server-bin_0.3.2-0ubuntu1_amd64.deb
prime-server-bin_0.3.2-0ubuntu1_amd64.deb:
neues Debian-Paket, Version 2.0.
Größe 1994 Byte: control-Archiv= 517 Byte.
437 Byte, 12 Zeilen control
160 Byte, 2 Zeilen md5sums
Package: prime-server-bin
Source: libprime-server
Version: 0.3.2-0ubuntu1
Architecture: amd64
Maintainer: Kevin Kreiser <[email protected]>
Installed-Size: 26
Depends: libprime-server0 (= 0.3.2-0ubuntu1)
Section: contrib/misc
Priority: optional
Homepage: https://github.com/kevinkreiser/prime_server
Description: Service oriented distributed computing executables
A set of executables for use in running a distributed http service
*** Contents:
drwxr-xr-x root/root 0 2016-04-21 11:48 ./
drwxr-xr-x root/root 0 2016-04-21 11:48 ./usr/
drwxr-xr-x root/root 0 2016-04-21 11:48 ./usr/share/
drwxr-xr-x root/root 0 2016-04-21 11:48 ./usr/share/doc/
drwxr-xr-x root/root 0 2016-04-21 11:48 ./usr/share/doc/prime-server-bin/
-rw-r--r-- root/root 167 2016-04-18 11:04 ./usr/share/doc/prime-server-bin/changelog.Debian.gz
-rw-r--r-- root/root 1558 2016-04-15 09:46 ./usr/share/doc/prime-server-bin/copyright
O primeiro pacote funciona se eu renomear os arquivos para libprime-server1.install
e libprime-server1.dirs
. Não consegui descobrir o que estou fazendo de errado com o -bin
pacote. bzr
pergunta sobre o tipo de pacote que estou fazendo e escolho, l
devo library
escolher outra coisa?
EDITAR:
A coisa toda funciona:https://launchpad.net/~kevinkreiser/+archive/ubuntu/prime-server
Com a ajuda do @sneetsher consegui colocar tudo isso em um ppa e funcionando corretamente no confiável! Só quero agradecer a @sneetsher por toda a ajuda e paciência ao longo do caminho. Esperamos que este script possa ajudar outras pessoas que desejam fazer algo semelhante:https://github.com/kevinkreiser/ppa-libprime-server/blob/master/build.sh
Responder1
Bem, eu poderia testá-lo no Ubuntu 14.04 e (com o último commit) no Ubuntu 16.04.
Como você é novo em empacotamento, é melhor habilitar a
debhelper
saída detalhada. Remova o comentárioexport DH_VERBOSE=1
norules
arquivo.O pacote parece depender
autoreconf
não apenas deautomake
/autotools
. Então mude arules
linha principal para:%: #dh $@ --with autotolls-dev dh $@ --parallel --list-missing --with autoreconf
e adicione
dh-autoreconf
para construir dependências nocontrol
arquivo.Portanto, agora você não precisa pré-gerar os arquivos de compilação automática executando
./autogen.sh
manualmente. Tenha em mente que tudo deve ser feito através derules
arquivo, caso contrário ele falhará quando for construído em um servidor PPA com árvore de origem limpa.Um dos testes falha, eu ignoro-os. substituindo o
dh_auto_test
. Então eu adiciono isso aorules
arquivo:override_dh_auto_test: echo skip auto-test
deixe mais tarde para ser consertado.
Para o
libprime-server
pacote vazio, isso ocorre porque ele tem um nome errado.libprime-server
emcontrol
arquivo elibprime-server1
com1
em outros (comolibprime-server1.install
)Sim,
lintian
(ferramenta de controle de qualidade) gera esse aviso porque espera ser a versão principal do pacote. Sim, não há problema em renomeá-lo paralibprime-server0
. Há apenas uma observação: você deve limpar a árvore de construção da construção anterior. Portanto, excluadebian/libprime-server1
a pasta e tente reconstruir novamente.Você pode adicionar quantos pacotes quiser, veja os arquivos atualizados abaixo.
Sim, as dependências devem incluir o pacote binário
libprime-server0
. O pacote fontelibprime-server
não é uma dependência de nenhum.Eu não estava usando seu script para construir, estava usando outro fluxo de trabalho manual (baixe o arquivo zip original, extraia-o, adicione a pasta debian, construa usando
debuild
). Não consegui reproduzir o mesmo problema dos pacotes binários vazios.Eu poderia reproduzi-lo com
build.sh
. O problema, você mudou o completodebian/
:rm -rf libprime-server/debian cp -rp ../debian libprime-server
mas commitou apenas um arquivo
bzr add debian/source/format
para consertar, envie a pasta inteira:
bzr add debian
bzr builddeb
parece usar apenas osDebian
arquivos commit/tag (com rótulo), não a árvore de trabalho atual.
Aqui estão os arquivos que alterei:
debian/rules
#!/usr/bin/make -f # -*- makefile -*- # Uncomment this to turn on verbose mode. export DH_VERBOSE=1 %: #dh $@ --with autotools-dev dh $@ --parallel --list-missing --with autoreconf override_dh_auto_test: echo skip auto-test
debian/control
Source: libprime-server Priority: optional Maintainer: Kevin Kreiser <[email protected]> Build-Depends: debhelper (>= 9), autotools-dev, dh-autoreconf, libcurl4-openssl-dev, libzmq3-dev Standards-Version: 3.9.5 Section: libs Homepage: https://github.com/kevinkreiser/prime_server Vcs-Git: git://github.com/kevinkreiser/prime_server.git Package: libprime-server-dev Section: contrib/libdevel Architecture: any Depends: libprime-server0 (= ${binary:Version}), ${misc:Depends} Description: Service oriented distributed computing API A set of APIs designed around the zeromq butterfly pattern specifically focused on servicing http requests Package: libprime-server0 Section: contrib/libs Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Description: Service oriented distributed computing API A set of APIs designed around the zeromq butterfly pattern specifically focused on servicing http requests Package: prime-server-bin Section: contrib/misc Architecture: any Depends: libprime-server0 (= ${binary:Version}), ${misc:Depends} Description: Service oriented distributed computing API A set of APIs designed around the zeromq butterfly pattern specifically focused on servicing http requests
libprime-server1.install
é renomeado paralibprime-server0.install
libprime-server1.dir
é renomeado paralibprime-server0.dir
Criar
prime-server-bin.dirs
usr/bin
Criar
prime-server-bin.install
usr/bin/*
build.sh
#!/bin/bash set -e rm -rf build mkdir build pushd build #get prime_server software #sudo apt-get install autoconf automake libtool make gcc-4.9 g++-4.9 lcov sudo apt-get install libcurl4-openssl-dev libzmq3-dev git clone --branch 0.3.2 --recursive https://github.com/kevinkreiser/prime_server.git tar pczf prime_server.tar.gz prime_server rm -rf prime_server #start building the package sudo apt-get install dh-make dh-autoreconf bzr-builddeb bzr dh-make libprime-server 0.3.2 prime_server.tar.gz rm -rf libprime-server/debian cp -rp ../debian libprime-server pushd libprime-server bzr add debian bzr commit -m "Initial commit of Debian packaging." bzr builddeb -- -us -uc #TODO: sign the package popd #TODO: push the package to the ppa #TODO: make an ITP for inclusion in mainline popd