[ anterior ] [ Contenidos ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ siguiente ]
Ahora deberíamos estar preparados para construir el paquete.
Para realizar correctamente la (re)compilar completa de un paquete, debes asegurarte que tienes instalados:
el paquete build-essential
.
los paquetes listados en el campo Build-Depends del archivo
«control» (El archivo
control
, Sección 4.1).
los paquetes listados en el campo Build-Depends-indep (también
del archivo «control», El archivo
control
, Sección 4.1).
Después ejecuta la siguiente orden en el directorio raíz del código fuente del programa:
$ dpkg-buildpackage
Esto hará todo lo necesario para construir los paquetes binarios y de fuentes para ti:
limpia el árbol del código fuente («debian/rules clean»)
construye el paquete de código («dpkg-source -b»)
construye el programa («debian/rules build»)
construye el paquete binario («fakeroot debian/rules binary»),
usando fakeroot
firma el fichero fuente .dsc, usando gpg
crea y firma el fichero de envío .changes, usando
dpkg-genchanges
y gpg
Lo único que se te pedirá es que escribas tu contraseña secreta de la clave GPG, dos veces.
Después de hacer todo esto, verás los siguientes archivos en el directorio
superior al directorio de trabajo (~/gentoo/
):
gentoo_0.9.12.orig.tar.gz
Este es el código fuente original comprimido, simplemente se ha renombrado para seguir los estándares de Debian. Nótese que ha sido creado usando la opción «-f» de dh_make -f ../gentoo-0.9.12.tar.gz ejecutada en el inicio.
gentoo_0.9.12-1.dsc
Este es un sumario de los contenidos del código fuente. Este fichero se
genera a partir del fichero de «control
» y se usa cuando se
descomprimen las fuentes con dpkg-source(1)
. Este fichero está
firmado con GPG de forma que cualquiera pueda estar seguro de que es realmente
tuyo.
gentoo_0.9.12-1.debian.tar.gz
Este fichero comprimido contiene el directorio debian
completo.
Todas las modificaciones de las fuentes originales se conservan en los archivos
de parches quilt
en el directorio debian/patches
.
Si alguien quiere volver a crear tu paquete desde cero, puede hacerlo fácilmente usando los tres ficheros de arriba. El proceso de extracción es trivial: sólo se debe copiar los tres ficheros en algún lado y ejecutar dpkg-source -x gentoo_0.9.12-1.dsc [47].
gentoo_0.9.12-1_i386.deb
Este es el paquete binario completo. Puedes usar dpkg
para
instalar o eliminar tanto este paquete como cualquier otro.
gentoo_0.9.12-1_i386.changes
Este fichero describe todos los cambios hechos en la revisión actual del paquete, y se usa por los programas de gestión del archivo FTP para instalar los paquetes binarios y fuentes en él. Se genera parcialmente a partir del fichero «changelog» y el fichero «.dsc». Este fichero está firmado con GPG, de forma que cualquiera puede estar aún más seguro de que es realmente tuyo.
Mientras sigues trabajando en el paquete, éste cambiará su comportamiento y
se le añadirán nuevas funciones. Las personas que descarguen tu paquete
pueden leer este fichero y ver qué ha cambiado. Los programas de
mantenimiento del archivo de Debian, también enviarán el contenido de este
fichero a la lista de correo debian-devel-announce@lists.debian.org
.
Las largas listas de números en los ficheros .dsc
y
.changes
son las sumas MD5/SHA1/SHA256 para los ficheros. Las
personas que descarguen estos ficheros pueden comprobarlos con
md5sum(1)
, sha1sum(1)
o sha256sum(1)
y
si los números no coinciden, sabrán que el fichero está corrupto o ha sido
modificado.
Debian mantiene diversas adaptaciones «ports»
con la
red de servidors de
compilación automática
que ejecuta demonios buildd
en
ordenadores con diferentes arquitecturas. Aunque no deberás hacer todo esto
tú mismo, debes conocer el procesamiento a que se verá sometido tu paquete.
Veamos cómo se procesa el paquete para compilarlo en diversas arquitecturas.
[48].
Los paquetes del tipo Architecture: any, son construidos por el sistema de compilación automática. El sistema garantiza la instalación de:
el paquete build-essential
, y
los paquetes listados en el campo Build-Depends (véase El archivo control
, Sección
4.1).
A continuación se ejecuta la siguiente orden en el directorio de las fuentes:
$ dpkg-buildpackage -B
De esta manera, se ejecuta todo lo necesario para construir el paquete binario dependiente de la arquitectura en cada arquitectura. Hace lo siguiente:
limpia el árbol del código fuente («debian/rules clean»)
construye el programa («debian/rules build»)
construye el paquete binario para la arquitectura (fakeroot debian/rules binary-arch)
firma el fichero fuente .dsc, usando gpg
crea y firma el fichero de envío .changes, usando
dpkg-genchanges
y gpg
Esta es la razón por la que el paquete estará disponible para otras arquitecturas.
Aunque es necesario instalar los paquetes listados en el campo
Build-Depends-indep para el empaquetamiento normal (véase Reconstrucción completa, Sección 6.1), el sistema
automático de construcción no lo requiere puesto únicamente construye
paquetes binarios dependientes de la arquitectura [49]. Estas diferencias entre el
empaquetamiento normal y el automático determinan si los paquetes requeridos
para la compilación se deben listar en el campo Build-Depends o
bien en el campo Build-Depends-indep del archivo
debian/control
(véase El
archivo control
, Sección 4.1).
orig.tar.gz
para la transferencia del paquete al repositorio.
Cuando se envía por primera vez al archivo, se debe incluir el archivo
orig.tar.gz
con las fuentes originales. Si la última entrada del
último archivo de cambios (changelog
) no es la primera de la
versión del autor original, deberás ejecutar la orden
dpkg-buildpackage
con el la opción -sa para forzar
la inclusión del archivo orig.tar.gz
. Por otra parte, es posible
excluir la inclusión del archivo orig.tar.gz
con la opción
-sd.
debuild
Puedes automatizar aún más el proceso de construcción de paquetes con la
orden debuild
. Veáse debuild(1)
.
La personalización de la orden debuild puede hacerse a través de
/etc/devscripts.conf
o ~/.devscripts
. Te sugiero al
menos los siguientes valores:
DEBSIGN_KEYID="Tu_ID_clave_GPG" DEBUILD_LINTIAN=yes DEBUILD_LINTIAN_OPTS="-i -I --show-overrides"
Con estos valores, puedes construir paquetes siempre con tu clave GPG, evitando
incluir componentes no deseados (facilitará que te patrocinen el paquete), e
inspeccionar el paquete con la orden lintian
en el modo detallado.
Por ejemplo, limpiar el código y reconstruir el paquete desde una cuenta de usuario es tan simple como:
$ debuild
Tenga en cuenta que puede especificar la opción «-sa» de
dpkg-buildpackage
para incluir el fichero original
orig.tar.gz
como sigue:
$ debuild -sa
Puedes eliminar los archivos generados en la compilación ejecutando:
$ debuild clean
pbuilder
El paquete pbuilder
es muy útil para conseguir un entorno de
compilación limpio (chroot
) donde verificar las dependencias de
compilación. [50] Esto
asegura una construcción limpia desde el código en los auto-compiladores de
sid para las distintas arquitecturas y evita fallos de nivel de
severidad serios del tipo FTBFS («Fail to Build From Source», o «fallo al
construir desde la fuente », N. del T.), que son siempre de categoría RC
(fallos críticos o «release critical»). Para más información del paquete
Debian auto-builder
consulte http://buildd.debian.org/
.
Para personalizar el funcionamiento del paquete pbuilder
haz lo
siguiente:
permite que tu usuario del sistema tenga permiso de escritura en el directorio
/var/cache/pbuilder/result
.
crea un directorio, p.e. /var/cache/pbuilder/hooks
,
con permiso de escritura para tu usuario. En este directorio pondrás los
guiones «hook»
establece los archivos ~/.pbuilderrc
o
/etc/pbuilderrc
con el siguiente contenido:
AUTO_DEBSIGN=yes HOOKDIR="/var/cache/pbuilder/hooks"
Así podrás firmar los paquetes con tu clave GPG almacenada en el directorio
~/.gnupg/
.
Ahora puedes inicializar el sistema local pbuilder
chroot
por primera vez ejecutando:
$ sudo pbuilder create
Si ya dispones de un paquete fuente completo, ejecuta las siguientes órdenes
en el directorio donde tengas los archivos
nombre_paquete.orig.tar.gz
,
nombre_paquete.debian.tar.gz
y
nombre_paquete.dsc
para actualizar el sistema local
pbuilder
chroot
y, a continuación, compilar el
paquete binario en él:
$ sudo pbuilder --update $ sudo pbuilder --build nombre_paquete.dsc
Tenga en cuenta que puede especificar la opción «-sa» de
dpkg-buildpackage
para incluir el fichero original
orig.tar.gz
como sigue:
$ sudo pbuilder --build --debbuildopts "-sa" nombre_paquete.dsc
Una vez finalizada la compilación, el paquete compilado estará en el
directorio /var/cache/pbuilder/result/
con usuario que no será el
administrador (sino tu usuario).
Si en lugar de iniciar la construcción del paquete a partir de un paquete ya
construido, dispones de un directorio con las fuentes originales actualizadas,
deberás ejecutar las siguientes órdenes desde el directorio de las fuentes
originales (y en el que deberá estar presente el directorio
debian
con todo su contenido):
$ sudo pbuilder --update $ pdebuild
Tenga en cuenta que puede especificar la opción «-sa» de
dpkg-buildpackage
para incluir el fichero original
orig.tar.gz
como sigue:
$ pdebuild --debbuildopts "-sa"
Puedes «conectarte» al entorno chroot
ejecutando la orden
pbuilder --login --save-after-login y configurarlo para adaptarlo
a tus necesidades. Este entorno puede guardarse saliendo del «shell» con
^D (Control-D).
La última versión de la orden lintian
puede ejecutarse
automáticamente en el entorno chroot utilizando el guión
«hook» disponible en
/var/cache/pbuilder/hooks/B90lintian
y configurado como
sigue [51]:
#!/bin/sh set -e install_packages() { apt-get -y --force-yes install "$@" } install_packages lintian echo "+++ informe de lintian +++" su -c "lintian -i -I --show-overrides /tmp/buildd/*.changes" - pbuilder # si quieres evitar que lintian para la construcción utiliza lo siguiente #su -c "lintian -i -I --show-overrides /tmp/buildd/*.changes; :" - pbuilder echo "+++ final del informe de lintian +++"
Debes tener un entorno sid actualizado para construir
correctamente paquetes para sid. En realidad, al versión
sid puede contener errores que no hacen recomendable la migración
de tu sistema a esta versión. El paquete pbuilder
te ayuda a
hacer frente a esta situación.
Es posible que debas actualizar tu paquete stable después de
distribuirlo para stable-proposed-updates,
stable/updates, etc [52]. En algunas ocasiones, «Yo trabajo con la versión
sid» puede no ser una excusa para dejar de actualizar el paquete.
El paquete pbuilder
te ayuda trabajar en entornos para todas las
distribuciones derivadas Debian para una arquitectura determinada.
Consulta http://www.netfort.gr.jp/~dancer/software/pbuilder.html
,
pdebuild(1)
, pbuilderrc(5)
, y
pbuilder(8)
.
git-buildpackage
y similares
Si el autor original utiliza un sistema de gestión de versiones para el
código (VCS
)
puedes considerar utilizarlo. Así se facilita la coordinación y la
selección de los parches en las fuentes. Debian dispone de varios paquetes de
guiones especializados en cada tipos de VCS:
git-buildpackage
: conjunto para la compilación de paquetes en
repositorios «Git».
topgit
: para gestionar las pilas de parches en «Git».
svn-buildpackage
: programas de ayuda para el mantenimiento de
paquetes Debian con «Subversion».
cvs-buildpackage
: conjunto de paquete de guiones Debian para
estructuras de directorios CVS.
Estos paquetes ofrecen un entorno más cómodo de trabajo que la utilización
«manual» de órdenes quilt
para usuarios experimentados, con el
objetivo de automatizar la construcción de paquetes. No se explica
el uso de estas herramientas en este tutorial [53].
Con un paquete grande, puede que no quieras recompilar desde cero cada vez que
tocas un detalle en el fichero debian/rules
. Para propósitos de
prueba, puedes hacer un fichero .deb
sin necesidad de recompilar
las fuentes originales de esta forma:
fakeroot debian/rules binary
O simplemente puedes comprobar si el paquete se compila con:
$ fakeroot debian/rules build
Una vez que has terminado la puesta a punto, recuerda reconstruir el paquete
siguiendo el procedimiento adecuado que está arriba. Puede que no seas capaz
de enviar correctamente el paquete si intentas enviar los archivos
.deb
construidos de esta forma.
[ anterior ] [ Contenidos ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ siguiente ]
Guía del nuevo desarrollador de Debian
versión 1.2.25, 2010-12-22 12:44:34 UTCjoy-mg@debian.org
jfs@debian.org
ender@debian.org
ana@debian.org
fcocuadrado@gmail.com
tangram.peces@gmail.com