
Entonces, después de pasar de un documento a otro, me aferré a este tutorial y lo seguí:http://packaging.ubuntu.com/html/packaging-new-software.html
Entonces probé los pasos allí y comencé a tener problemas. Buscar en Google ha sido en gran medida inútil. Tengo un proyecto de autotools c++ muy estándar que crea una biblioteca y algunos ejecutables. Quería crear un paquete estilo libfoo-dev y pegarlo en un PPA.
Para ayudar a mostrar lo que estoy haciendo, he pegado un script que sigue los pasos propuestos en el tutorial (hasta donde los entiendo correctamente...). Esto es lo que tengo:https://github.com/kevinkreiser/ppa-libprime-server
Tengo un script bash allí build.sh
que tiene todos los pasos que he estado siguiendo. Al principio tenía problemas para dh_*
compilar algo de mi proyecto hasta que @sneetsher me indicó que cambiara el archivo de reglas para realizar autoreconf. En este punto mis únicos problemas son W: libprime-server0: empty-binary-package
y W: prime-server-bin: empty-binary-package
.
Y como dice, el problema ahora es que un par de mis paquetes no contienen mucho de nada:
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
El primer paquete funciona si cambio el nombre de los archivos a libprime-server1.install
y libprime-server1.dirs
. No he podido descubrir qué estoy haciendo mal con el -bin
paquete. bzr
pregunta sobre el tipo de paquete que estoy haciendo y elijo l
¿ library
debería elegir otra cosa?
EDITAR:
Todo funciona:https://launchpad.net/~kevinkreiser/+archive/ubuntu/prime-server
¡Con la ayuda de @sneetsher pude instalar todo esto en un ppa y funcionar correctamente en Trusty! Solo quiero agradecer a @sneetsher por toda la ayuda y paciencia a lo largo del camino. Esperemos que este script pueda ayudar a otros que quieran hacer algo similar:https://github.com/kevinkreiser/ppa-libprime-server/blob/master/build.sh
Respuesta1
Bueno, podría probarlo en Ubuntu 14.04 y (con la última confirmación) en Ubuntu 16.04.
Como es nuevo en el empaquetado, es mejor habilitar la
debhelper
salida detallada. Descomentarexport DH_VERBOSE=1
en elrules
archivo.El paquete parece depender
autoreconf
no solo deautomake
/autotools
. Entonces cambie larules
línea principal a:%: #dh $@ --with autotolls-dev dh $@ --parallel --list-missing --with autoreconf
y agregar
dh-autoreconf
para crear dependencias encontrol
el archivo.Por lo tanto, ya no es necesario generar previamente los archivos de compilación automática ejecutándolos
./autogen.sh
manualmente. Tenga en cuenta que todo debe hacerse a través derules
un archivo; de lo contrario, fallará cuando se construya en un servidor PPA con un árbol de fuentes limpio.Una de las pruebas falla, me las salto. anulando el
dh_auto_test
. Entonces agrego esto alrules
archivo:override_dh_auto_test: echo skip auto-test
déjalo más tarde para que lo arreglen.
Para el
libprime-server
paquete vacío, esto se debe a que tiene un nombre incorrecto.libprime-server
encontrol
archivo ylibprime-server1
con1
otros (comolibprime-server1.install
)Sí,
lintian
(herramienta de control de calidad) genera esa advertencia porque espera ser la versión principal del paquete. Sí, debería estar bien cambiarle el nombre alibprime-server0
. Solo hay una nota: debes limpiar el árbol de compilación de la compilación anterior. Así que eliminedebian/libprime-server1
la carpeta e intente reconstruirla nuevamente.Puede agregar tantos paquetes como desee; consulte los archivos actualizados a continuación.
Sí, las dependencias deben incluir el paquete binario
libprime-server0
. El paquete fuentelibprime-server
no depende de ninguno.No estaba usando su script para compilar, estaba usando otro flujo de trabajo manual (descargar el archivo zip original, extraerlo, agregar la carpeta Debian, compilar usando
debuild
). No pude reproducir el mismo problema que el de los paquetes binarios vacíos.Podría reproducirlo con
build.sh
. El problema es que has cambiado el completodebian/
:rm -rf libprime-server/debian cp -rp ../debian libprime-server
pero cometió solo un archivo
bzr add debian/source/format
para solucionarlo, confirme toda la carpeta:
bzr add debian
bzr builddeb
parece usar solo losDebian
archivos de confirmación/etiqueta (con etiqueta), no el árbol de trabajo actual.
Aquí están los archivos que he cambiado:
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
se cambia el nombre alibprime-server0.install
libprime-server1.dir
se cambia el nombre alibprime-server0.dir
Crear
prime-server-bin.dirs
usr/bin
Crear
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