Empaquetar un paquete Debian por medio de mercurial
1. Empaquetado con Mercurial
Ernesto Crespo
ecrespo@debianvenezuela.org
Debian Venezuela www.debian.org.ve
Velug www.velug.org.ve
Blog ernesto-ecrespo.blogspot.com
Twitter: @ernestocrespo
Día Debian
Barquisimeto 21 de
Presentación liberada bajo Licencia GDFL Agosto de 2010
2. Agenda
●¿Qué es Debian?
●Contrato Social de Debian
●Directrices de Debian
●Objetivos
●Organigrama
●Algunas estadísticas
●¿Dónde contribuir?
●Proceso de adopción de un paquete
●Empaquetado
●Herramientas para facilitar el empaquetado
●¿Dónde seguir?
●Proceso para ser un Nuevo Mantenedor
●Mapa Conceptual. Lo necesario para ser DD
●Empaquetado con Mercurial
●Referencias
3. ¿Qué es Debian?
Debian nace como una iniciativa de la FSF y su Proyecto GNU
●
Ian Murdock se hace cargo de la dirección del Proyecto en 1993
●
El nombre de Debian deriva del nombre de su esposa Debra e Ian
●
El ideal es crear un Sistema Operativo totalmente Libre y Universal
●
Su desarrollo corresponde a voluntarios a nivel mundial
●
5. Contrato Social de Debian
Debian permanecerá 100% Libre
●
Contribuir a la comunidad del Software Libre
●
No ocultaremos los problemas
●
Nuestra prioridad son los usuarios y el Software Libre
●
Trabajos que no reúnan nuestros estándares irán a contrib y/o non-free
●
6. Directrices de Debian
De libre distribución
●
Incluir código fuente
●
Debe permitir trabajos derivados
●
Integridad del código fuente del autor original del programa
●
Ninguna discriminación contra personas o grupos
●
No discriminación en función de la finalidad perseguida
●
Distribución de la Licencia
●
La Licencia no debe ser específica para Debian
●
La Licencia no debe contaminar otros programas
●
Ejemplos de Licencias: GPLv2, GPLv3,BSD y Artística
●
7. Objetivos
Mejor sistema operativo libre posible
●
Facilitar la instalación de Software
●
● Precompilado,configurado, legal y libre
● Dependencias, actualizaciones, seguridad
Facilitar la desinstalación de Software
●
● Que paquete es el responsable de cada archivo
Asegurar que todo el Software funciona
●
8. Organigrama
●Directores
● DPL – Líder del Proyecto Stefano Zacchiroli
● Comité Técnico. 1 Presidente y 7 miembros
● Secretario
●Distribución
● Proyectos de Desarrollo
● Paquetes Individuales
● Documentación
● Lista de paquetes que necesitan ayuda
● Equipo APT
● Adaptaciones GNU/Linux
● GNU/Hurd
● BSD
● Configuraciones Especiales
●Publicidad
●Apoyo e Infraestructura
●Custom Debian Distribution
9. Algunas estadísticas
Más de 230 millones de líneas de código
Más de 40 mil paquetes
Para que una empresa privada desarrolle Debian tendría que invertir
8 millones de dolares!
10. ¿Cómo contribuir?
Escribir documentación
●
Traducir documentación
●
Ayudar en la traducción de la página www.debian.org wiki.debian.org
●
Colaborar en las listas
●
Administrar las listas
●
Reportar fallos
●
Desarrolladores
●
Mantenedores
●
Donaciones
●
● Metálico
● Máquinas para desarrollo y conectividad
● Sitios replicas
● UNESR
11. Traducciones en general
Documentación de Debian - http://www.debian.org/doc/
●
● Cómo's
● Preguntas frecuentes
● Manuales de instalación
● Otros documentos
Ayuda con las páginas de Debian
●
● http://www.debian.org/devel/website/
Debian se vuelve internacional
●
● http://www.debian.org/intl/
12. Donaciones
●Donaciones a Software en el Interés Público
● http://www.debian.org/donations
● Donaciones de dinero
● http://www.spi-inc.org/donations
● Donaciones de equipos y servicios
● http://www.debian.org/misc/equipment_donations
● Debian Venezuela :-p
● Lista de Hardware que se necesita
● http://www.spi-inc.org/donations
●Socios
● http://www.debian.org/partners/
●Mirrors
● http://www.debian.org/mirror/
● Mirrors Oficiales
● http://www.debian.org/mirror/official_sponsors
13. Apoyar en las listas de Correo
Introducción a la lista de correo, código de conducta y uso
●
● http://www.debian.org/MailingLists/
Listas de correo, suscripción
●
● http://www.debian.org/MailingLists/subscribe
● debian-user-spanish
● debian-devel-spanish
● debian-l10n-spanish
Archivo de las listas
●
● http://lists.debian.org/
14. ¿Qué hay que conocer para ser Mantenedor/Desarrollador?
●Conocer la filosofía y principios de Debian
● Contrato Social
● Directrices
● DFSG
Conocer los requisitos que debe cumplir un paquete
●
● Debian Policy http://www.debian.org/doc/debian-policy/
Familiarizarse con el manual de Referencia del Mantenedor
●
● http://www.debian.org/doc/packaging-manuals/developers-reference/
http://www.debian.org/doc/packaging-manuals/developers-reference
Tener una llave GPG firmada mínimo por un DD
●
18. Proceso de adopción de un paquete huérfano en Debian
●Es la forma más rápida para adoptar un paquete huérfano
● http://www.debian.org/devel/wnpp/
● Buscar un paquete que sea de su interés
● Que corra en el hardware que uno tiene
●Enviar un correo con la intención de adopción del paquete huérfano
●Crear una jaula sid para trabajar con el paquete
● debootstrap sid sid-root/ http://ftp.debian.org/debian/
● chroot sid-root/
●Bajar la fuente del paquete
● apt-get source paquete
●Realizar los cambios necesarios
● Corrección de bugs
● Modificar Changelog, Copyright, Control, rules
●Empaquetar el paquete
● fakeroot dpkgbuildpackage us uc
●Verificar el paquete con linda, lintian, piuparts,pbuilder
●Firmar el paquete y enviarlo a su sponsor
19. Proceso de empaquetado
Anunciar intención de empaquetar (ITP)
●
● Comprobar WNPP si existen ITPs previos
Obtener y descomprimir el código fuente original
●
● Comprobar la Licencia
Añadir cambios específicos para Debian
●
Construir paquete fuente Debian
●
Construir paquetes binarios para Debian
●
Comprobar y arreglar problemas (repetir)
●
30. debian/changelog
Cambios en el empaquetado para Debian
En el caso de adopción de un paquete se debe
cerrar el bug que deja huérfano
El “upstream” changelog tiene los cambios de
upstream o resumen
Caso upstream
gnusim8085 (1.2.90-1) unstable; urgency=low
* New upstream release.
-- Ernesto Nadir Crespo Avila <ecrespo@debianvenezuela.org> Mon, 07 Aug
2006 19:59:53 -0400:
Caso adopción de un paquete:
nitpic (0.1-9) unstable; urgency=low
* New maintainer (closes: #227784).
* Fixed "FTBFS with gcc-3.4: default arguments are only permitted for function
parameters"
(closes: #287809, #263265). Patch by Andreas Jochens <aj@andaco.de>
-- Ernesto Nadir Crespo Avila <ecrespo@debianvenezuela.org> Sun, 02 Jan 2005
23:28:09 -0400
31. debian/control
Metadatos de los paquetes fuentes y binarios
Source: nitpic
Section: electronics
Priority: extra
Maintainer: Ernesto Nadir Crespo Avila <ecrespo@debianvenezuela.org>
Uploaders: Ana Isabel Delgado Dominguez <anubis@debianvenezuela.org>
Build-Depends: libx11-dev, libxt-dev, libxaw7-dev, xutils, binutils-dev,
binutils
Standards-Version: 3.6.2
Package: nitpic
Architecture: any
Depends: ${shlibs:Depends}
Description: Simulator for the Microchip PIC16C84 microcontroller
Nitpic is an X-based simulator for the Microchip PIC family of
microcontrollers. It currently supports only the PIC16C84.
This is beta software.
32. debian/rules
Reglas para compilar y construir el paquete
Técnicamente un Makefileconf metas especificas:
build, binary,binary-arch,binary-indep,clean
La mayoría de las veces se usan herramientas
Algunas veces muy simple otras veces muy complejo
La integración en el sistema puede resultar difícil
build: Compila el programa
binary: Crea el paquete binario
Instala el programa bajo debian/tmp
Pone los metadatos de empaquetado en
debian/tmp/DEBIAN
clean: Limpia el árbol
33. Herramientas para facilitar el empaquetado
●debhelper
● Conjunto de programas para realizar tareas comunes
● Crea el archivo debian/rules
● dh_installman: Instala páginas de manual
●cdbs
● Sistema de construcción de paquetes basado en la herencia entre
Makefiles
● Proporciona reglas estándar que pueden ser extendidas o
reemplazadas
38. Proceso para ser nuevo mantenedor de Debian
No se preocupen por el proceso hasta que se sientan cómodos
●
Es importante tener una clave GPG y buscar firmas
●
Puede llevar meses, sobre todo de espera
●
Es temido, pero no debería, es un proceso natural para aprender de
●
la organización de Debian, la filosofía del SL y a desarrollar aplica
ciones
● Mucho trabajo, mucho que aprender, es necesario para crear
buenos paquetes
39. Proceso de Nuevo Mantenedor
●El proceso comienza al llenar el formulario que está en:
http://nm.debian.org/newnm.php
●Luego de llenar el formulario, la persona queda en la cola NM en la
sección “No Advocate” http://nm.debian.org/nmlist.php
●El advocate (abogado) tiene que ser un DD y muchas veces es el
sponsor, quién se responsabiliza de subir los paquetes del solicitante
al archivo de Debian
●El advocate recibe un email del Front Desk (FD) pidiéndole que expli-
●La persona solicitante pasa a la sección Un-assigned Applicants” de la
cola NM
●Cuando un Application Manager (http://nm.debian.org/whoisam.php)
queda con un cupo disponible,FD verifica que la persona solicitante si
haya hecho una contribución a Debian y asigna esa persona solicitante
al AM, la cual pasa a la sección “Applicants being processed” de la cola
NM
41. ¿Como funciona Mercurial?
Mercurial es un sistema de control de versiones distribuido para desarrolladores
de Software. Está implementado haciendo uso del lenguaje de programación Python.
Sus comandos básicos son:
●Para ver las opciones del comando se ejecuta hg
●Para clonar un repositorio por ejemplo el de bitbucket.org de pyloro se jecuta:
hg clone http://bitbucket.org/ecrespo/pyloro/
destination directory: pyloro
requesting all changes
adding changesets
adding manifests
adding file changes
added 3 changesets with 26 changes to 20 files
updating working directory
20 files updated, 0 files merged, 0 files removed, 0 files unresolved
42. ¿Como funciona Mercurial?
Dentro del directorio python-loro se tiene lo siguiente:
ConfigurepyLoro.py Festival.py MANIFEST pyloro.desktop pyloro.py setup.py
Convert.py .hg PKG-INFO pyloro.glade README TODO audio COPYING images
pyloro.conf pyloro.png Reproducir.py verifyconfig.py
Note que existe un directorio .hg, dentro de el se encuentra lo siguiente:
00changelog.i branch branch.cache dirstate hgrc requires store undo.branch
undo.dirstate
Editar el archivo hgrc y agregar la información del usuario, nombre y correo:
[paths]
default = http://bitbucket.org/ecrespo/pyloro/
[ui]
username = Ernesto Nadir Crespo Avila
El primero es la ruta de donde se bajo el repositorio, el segundo es la definición del
usuario.
43. ¿Como funciona Mercurial?
Para ver el log del control de versiones se ejecuta hg log dentro del directorio:
ecrespo@canaima:~/repositorio/python-loro$ hg log
changeset: 0:8f241da3b2f9
tag: tip
user: ernesto@moonlighting
date: Wed Nov 05 23:32:58 2008 -0430
summary: Agregado pyloro a mercurial
44. ¿Como funciona Mercurial?
Para una descripción más detallada de log se ejecuta hg -v log
ecrespo@canaima:~/repositorio/pyloro$ hg -v log
changeset: 2:6d1d0bf8236c
tag: tip
user: ecrespo@canaima
date: Wed Apr 08 19:28:08 2009 -0430
files: ConfigurepyLoro.py Convert.py Festival.py Reproducir.py verifyconfig.py
description:
Change developer information in all files dot py
changeset: 1:33662d0db317
user: ecrespo@canaima
date: Wed Apr 08 18:15:04 2009 -0430
files: pyloro.py
description:
Change developer team in pyloro.py
45. ¿Como funciona Mercurial?
Para ver los tip de cada repositorio se ejecuta hg tip en cada repo:
ecrespo@canaima:~/repositorio/pyloro-prueba$ hg tip
changeset: 5:0ede87ad831c
tag: tip
user: ecrespo@canaima
date: Thu Apr 09 15:17:50 2009 -0430
summary: Change TODO file
ecrespo@canaima:~/repositorio/pyloro$ hg tip
changeset: 2:6d1d0bf8236c
tag: tip
user: ecrespo@canaima
date: Wed Apr 08 19:28:08 2009 -0430
summary: Change developer information in all files dot py
Como se puede ver, los tips son diferentes por que se han hecho cambios en pyloro-
prueba.
46. ¿Como funciona Mercurial?
Ahora lo que viene es propagar los cambios a pyloro:
ecrespo@canaima:~/repositorio/pyloro$ hg pull ../pyloro-prueba
pulling from ../pyloro-prueba
searching for changes
adding changesets
adding manifests
adding file changes
added 3 changesets with 3 changes to 2 files
(run 'hg update' to get a working copy)
Por defecto no se actualiza el directorio de trabajo, es necesario ejecutar hg update:
ecrespo@canaima:~/repositorio/pyloro$ hg update
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
47. ¿Como funciona Mercurial?
Para subir la información al servidor de repositorio mercurial se hace el commit
luego se hace push.
hg commit
hg push http://bitbucket.org/ecrespo/pyloro/
pushing to http://bitbucket.org/ecrespo/pyloro/
searching for changes
http authorization required
realm: Bitbucket.org HTTP
user: ecrespo
password:
bb/acl: ecrespo is allowed. accepted payload.
quota: 185.8 KB in use, 150.0 MB available (0.12% used)
48. Mantener un paquete Debian con Mercurial
Es necesario tener un repositorio mercurial.
Este se crea con el comando hg init.
hg init repositorio
Es necesario también crear 2 directorios:
●Un directorio para el paquete fuente de Debian
●Un directorio para el paquete fuente del upstream
Cd repositorio
Hg init sshguard
Hg init sshguard.upstream
49. Mantener un paquete Debian con Mercurial
Importar las fuentes de Debian:
hg-importdsc /home/ecrespo/paquetes/sshguard/sshguard_1.3-1.dsc
*** Processing upstream file
/home/ecrespo/paquetes/sshguard/sshguard_1.3.orig.tar.gz
VCSCMD: hg
LOGTEXT Imported sshguard_1.3.orig.tar.gz
into Mercurial repository
adding Changes
adding Makefile.am
adding Makefile.in
.......
50. Mantener un paquete Debian con Mercurial
Importar las fuentes de upstream:
/home/ecrespo/paquetes/sshguard/sshguard_1.3.orig.tar.gz imported into
/home/ecrespo/repositorio/repositorio/sshguard.upstream
Remember to run hg fetch
/home/ecrespo/repositorio/repositorio/sshguard.upstream
*** Done processing upstream file
/home/ecrespo/paquetes/sshguard/sshguard_1.3.orig.tar.gz
*** Processing Debian source tree for
/home/ecrespo/paquetes/sshguard/sshguard_1.3-1.dsc
0:b438c8517fe7
pulling from /home/ecrespo/repositorio/repositorio/sshguard.upstream
requesting all changes
adding changesets
adding manifests
adding file changes
added 3 changesets with 53 changes to 52 files
(run 'hg update' to get a working copy)
52 files updated, 0 files merged, 0 files removed, 0 files unresolved
dpkg-source: extracting sshguard in sshguard-1.3
dpkg-source: info: unpacking sshguard_1.3.orig.tar.gz
dpkg-source: info: applying sshguard_1.3-1.diff.gz
51. Mantener un paquete Debian con Mercurial
Ahora se tienen los directorios sshguard y sshguard.upstream con archivos y
directorios.
ecrespo@canaima:~/repositorio/repositorio/sshguard$ ls
aclocal.m4 config.h.in configure.ac depcomp install-sh Makefile.in missing README
src ylwrap
Changes configure debian examples Makefile.am man mkinstalldirs scripts stamp-
h1
ecrespo@canaima:~/repositorio/repositorio/sshguard.upstream$ ls
aclocal.m4 config.h.in configure.ac examples Makefile.am man mkinstalldirs
scripts stamp-h1
Changes configure depcomp install-sh Makefile.in missing README src ylwrap
52. Cambios en el paquete fuente de Debian
Archivo debian/rules
./configure $(CROSS) --prefix=/usr --mandir=$${prefix}/share/man --with-
firewall=hosts --infodir=$${prefix}/share/info CFLAGS="$(CFLAGS)" LDFLAGS="-
Wl,-z,defs"
53. Cambios en el paquete fuente de Debian
Archivo debian/control
Source: sshguard
Section: net
Priority: optional
Maintainer: Ernesto Nadir Crespo Avila
Build-Depends: debhelper (>= 7), autotools-dev
Standards-Version: 3.8.0
Homepage: http://sshguard.sourceforge.net/
Package: sshguard
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}, tcpd
Description: Protects from brute force attacks against ssh
Protects networked hosts from the today's widespread
brute force attacks against ssh servers. It detects such attacks
and blocks the author's address with a firewall rule.
54. Cambios en el paquete fuente de Debian
Exportar variables de ambiente relativas al empaquetador:
export DEBFULLNAME="Ernesto Nadir Crespo Avila"
export DEBEMAIL="ecrespo@debianvenezuela.org".
55. Cambios en el paquete fuente de Debian
Cambiar el archivo debian/changelog agregando los cambios que se realizaron:
dch -i
sshguard (1.3-2) unstable; urgency=low
* Remove iptables depend in build-depends in debian/control file.
* Add tcpd depend in depends in debian/control file.
* Change configure option in debian/rules to hosts.
-- Ernesto Nadir Crespo Avila Tue, 14 Apr 2009 14:06:01 -0430
56. Cambios en el paquete fuente de Debian
Cambiar el archivo debian/changelog agregando los cambios que se realizaron:
dch -i
sshguard (1.3-2) unstable; urgency=low
* Remove iptables depend in build-depends in debian/control file.
* Add tcpd depend in depends in debian/control file.
* Change configure option in debian/rules to hosts.
-- Ernesto Nadir Crespo Avila Tue, 14 Apr 2009 14:06:01 -0430
57. Cambios en el paquete fuente de Debian
Al ejecutar el comando hg status apareceran los cambios realizados a los archivos:
ecrespo@canaima:~/repositorio/repositorio/sshguard/debian$ hg status
M debian/changelog
M debian/control
M debian/rules
Para agregar los cambios al repositorio se ejecuta un commit:
ecrespo@canaima:~/repositorio/repositorio/sshguard$ hg commit -m"Change
control and rules files" -u "Ernesto Nadir Crespo Avila "
58. Cambios en el paquete fuente de Debian
Al ejecutar hg log se muestra los cambios realizados:
changeset: 5:7a64e00a1c05
tag: tip
user: Ernesto Nadir Crespo Avila
date: Tue Apr 14 14:11:19 2009 -0430
summary: Change control and rules files
changeset: 4:19b2688f71ec
user: ecrespo@canaima
date: Tue Apr 14 13:57:26 2009 -0430
summary: Added tag DEBIAN_sshguard_1.3-1 for changeset a7094766c4e6
changeset: 3:a7094766c4e6
tag: DEBIAN_sshguard_1.3-1
user: ecrespo@canaima
date: Tue Apr 14 13:57:25 2009 -0430
summary: Import Debian sshguard 1.3-1
changeset: 2:85a24e090d85
user: ecrespo@canaima
date: Tue Apr 14 13:57:24 2009 -0430
summary: Added tag UPSTREAM_sshguard_1.3_TAG for changeset f61bc4db3564
changeset: 1:f61bc4db3564
tag: UPSTREAM_sshguard_1.3_TAG
user: ecrespo@canaima
date: Tue Apr 14 13:57:24 2009 -0430
summary: Added tag UPSTREAM_sshguard_1.3 for changeset b438c8517fe7
changeset: 0:b438c8517fe7
tag: UPSTREAM_sshguard_1.3
user: ecrespo@canaima
date: Tue Apr 14 13:57:24 2009 -0430
summary: Import upstream sshguard version 1.3
59. Cambios en el paquete fuente de Debian
Se jalan los cambios al repositorio:
ecrespo@canaima:~/repositorio/repositorio$ hg pull sshguard
pulling from sshguard
requesting all changes
adding changesets
adding manifests
adding file changes
added 7 changesets with 66 changes to 60 files
(run 'hg update' to get a working copy)
Se actualiza el repositorio:
ecrespo@canaima:~/repositorio/repositorio$ hg update
60 files updated, 0 files merged, 0 files removed, 0 files unresolved
60. Cambios en el paquete fuente de Debian
Ahora se crea el paquete:
ecrespo@canaima:~/repositorio/repositorio$ hg-buildpackage -rfakeroot -k
Building ../sshguard_1.3.orig.tar.gz from Mercurial history
dpkg-buildpackage -rfakeroot -D -us -uc -i.hg -I.hg
dpkg-buildpackage: set CFLAGS to default value: -g -O2
dpkg-buildpackage: set CPPFLAGS to default value:
dpkg-buildpackage: set LDFLAGS to default value:
dpkg-buildpackage: set FFLAGS to default value: -g -O2
dpkg-buildpackage: set CXXFLAGS to default value: -g -O2
dpkg-buildpackage: source package sshguard
dpkg-buildpackage: source version 1.3-2
dpkg-buildpackage: source changed by Ernesto Nadir Crespo Avila
dpkg-buildpackage: host architecture i386
fakeroot debian/rules clean
dh_testdir
dh_testroot
rm -f build-stamp
# Add here commands to clean up after the build process.
[ ! -f Makefile ] || /usr/bin/make distclean
rm -f config.sub config.guess config.status config.status.lineno config.log
dh_clean
61. Cambios en el paquete fuente de Debian
dh_testdir
dh_testroot
dh_installchangelogs Changes
dh_installdocs
dh_installexamples
dh_installman
dh_link
dh_strip
dh_compress
dh_fixperms
dh_installdeb
dh_shlibdeps
dh_gencontrol
dpkg-gencontrol: warning: unknown substitution variable ${misc:Depends}
dh_md5sums
dh_builddeb
dpkg-deb: construyendo el paquete `sshguard' en `../sshguard_1.3-2_i386.deb'.
dpkg-genchanges >../sshguard_1.3-2_i386.changes
dpkg-genchanges: not including original source code in upload
dpkg-buildpackage: binary and diff upload (original source NOT included)
Now running lintian...
Finished running lintian.
Now signing changes and any dsc files...
signfile sshguard_1.3-2.dsc C97E7015
Necesita una frase contraseña para desbloquear la clave secreta
del usuario: "Ernesto Nadir Crespo Avila (seraph1) "
clave DSA de 1024 bits, ID C97E7015, creada el 2005-08-15
signfile sshguard_1.3-2_i386.changes C97E7015
Necesita una frase contraseña para desbloquear la clave secreta
del usuario: "Ernesto Nadir Crespo Avila (seraph1) "
clave DSA de 1024 bits, ID C97E7015, creada el 2005-08-15
Successfully signed dsc and changes files
62. Cambios en el paquete fuente de Debian
En este momento se tiene el paquete .deb y los archivos creados en el momento
del empaquetado:
ecrespo@canaima:~/repositorio$ ls
sshguard_1.3-2.diff.gz
sshguard_1.3-2_i386.build
sshguard_1.3-2_i386.deb
sshguard_1.3-2.dsc
sshguard_1.3-2_i386.changes
sshguard_1.3.orig.tar.gz