Introducción al desarrollo de paquetes para Debian José Manuel Santamaría Lema Dudesconf III, 9 de Abril, La Coruña.

1 Introducción al desarrollo de paquetes para Debian José...
Author: María Jesús Blanco Navarro
0 downloads 0 Views

1 Introducción al desarrollo de paquetes para Debian José Manuel Santamaría Lema Dudesconf III, 9 de Abril, La Coruña

2 ¿Qué es un paquete de debian?...

3 El problema (I) Dado un programa desarrollado usando un lenguaje no de scripting, queremos hacer algo para...... proporcionarle a otro humano los binarios para ejecutar el programa, así como información sobre las dependencias para que de esta manera pueda ejecutar el programa sin compilarlo ni saber cómo se compila.... proporcionarle a una máquina o a otro humano el código fuente de tal manera que pueda compilarlo con un comando (o dos) (bueno, o tres o cuatro, pero no muchos) sin que sepa cómo se compila. Además los dos, tres, cuatro, o no muchos comandos deben ser siempre los mismos para cualquier programa, porque como dijimos antes queremos que el código fuente lo pueda compilar una máquina.

4 El problema (II) Servidor ARM obtiene el c. fuente del FTP, lo compila y le develve al FTP los binarios para ARM Servidor i386 obtiene el c. fuente del FTP, lo compila y le develve al FTP los binarios para i386 Servidor FTP contiene el c. fuente de los programas así como los binarios para i386 y ARM

5 El problema (III) Para empaquetar cada programa necesitamos al menos: 1.Saber qué órdenes hay que ejecutar para compilarlo. 2.Saber qué nos hace falta tener instalado para compilarlo (compilador, liberías, herramientas...) (build depends) 3.Saber que va a hacer falta para ejecutarlo (librerías, otros programas...) 4.Comprobar la/s licencia/s para asegurarnos de que podemos distribuir el programa, además mientras lo hacemos, podemos ir tomando nota en un fichero que después vamos a distribuir con los binarios.

6 El programa El programa se llama antxon, tiene licencia GPLv2 o posterior y se publica en un tarball de nombre antxon-version.tar.gz Vamos a suponer que estos ficheros los publica el autor del programa regularmente vía HTTP o FTP, por ejemplo. En el caso de antxon, estará disponible en: http://alioth.debian.org/santa-guest/ talks/dudesconf2010/antxon-1.0.0.tar.gz

7 antxon-1.0.0/main.c 1 /*************************************************************************** 2 * Copyright © 2010 José Manuel Santamaría Lema * 3 * * 4 * This program is free software; you can redistribute it and/or modify * 5 * it under the terms of the GNU General Public License as published by * 6 * the Free Software Foundation; either version 2 of the License, or * 7 * (at your option) any later version. * 8 ***************************************************************************/

8 antxon-1.0.0/main.c 9 #include 10 #include 11 #include 12 #include 13 int main (int argc, char ** argv) { 14 char * line; 15 while (1) { 16 line = readline("Write something please: "); 17 if (*line) { 18 printf("Good, you wrote: %s", line); 19 add_history(line); 20 } 21 free(line); 22 } 23 }

9 antxon-1.0.0/Makefile 1 all: 2 gcc main.c -o antxon -lreadline 3 clean: 4 rm -rf antxon

10 antxon-1.0.0/COPYING Es el texto de la GPLv2, lo copié de: /usr/share/doc/common-licenses/GPL-2

11 antxon-1.0.0/readme.txt Un fichero con una descripción en una línea del programa.

12 El bug El programa que hemos visto, tiene un bug. En la línea 18 falta un \n: printf("Good, you wrote: %s", line); De manera que hay que modificar esa línea así: printf("Good, you wrote: %s\n", line);

13 Parches Para crear un parche: $ diff -u foriginal fmodificado > parche.diff Para aplicar un parche: $ patch -p0 < parche.diff

14 Parche para el bug de antxon Hacemos una copia del fichero y lo editamos corrigiendo el fallo: $ cd antxon-1.0.0 $ cp main.c main.c.orig $ vim main.c Para crear el parche: $ diff -u main.c.orig main.c > 01_add_newline.diff

15 Parche para el bug de antxon $ diff -u main.c.orig main.c --- main.c.orig 2010-03-29 22:10:53.000000000 +0200 +++ main.c 2010-03-29 01:03:52.000000000 +0200 @@ -19,7 +19,7 @@ while (1) { line = readline("Write something please: "); if (*line) { - printf("Good, you wrote: %s", line); + printf("Good, you wrote: %s\n", line); add_history(line); } free(line);

16 La distribución Caldofránica (TM) antxon-1.0.0/ |_ caldofran/build.sh |_ caldofran/build-deps.txt |_ caldofran/copyright |_ caldofran/deps.txt |_ caldofran/patches/ |_ COPYING |_ main.c |_ Makefile |_ readme.txt

17 La distribución Caldofránica (TM) antxon-1.0.0/ |_ caldofran/build.sh |_ caldofran/build-deps.txt |_ caldofran/copyright |_ caldofran/deps.txt |_ caldofran/patches/ |_... Surgen los conceptos de paquete fuente y paquete binario. Paquete fuente: p.ej. el directorio de arriba en un tar; paquete binario: p.ej. un tar con el ejecutable "antxon" y el fichero copyright y deps.txt

18 Un paquete de Debian Source format 1.0 vs source format 3.0: Hace unos pocos meses se empezaron a subir paquetes a sid con el formato fuente 3.0, este formato incluye algunas mejoras, para más información visitar: http://wiki.debian.org/Projects/DebSrc3.0

19 Un paquete de Debian - 1.0 Paquete fuente: antxon_1.0.0-1.diff.gz antxon_1.0.0-1.dsc antxon_1.0.0.orig.tar.gz Paquete binario: antxon_1.0.0-1_i386.changes antxon_1.0.0-1_i386.deb

20 Un paquete de Debian - 3.0 (quilt) Paquete fuente: antxon_1.0.0-1.debian.tar.gz antxon_1.0.0-1.dsc antxon_1.0.0.orig.tar.gz Paquete binario: antxon_1.0.0-1_i386.changes antxon_1.0.0-1_i386.deb

21 Obtener un paquete ya hecho O bien dget http://loquesea/foo.dsc o bien (si está en la distribución que estamos usando) apt-get source paquete

22 Las versiones de los paquetes Formato: [epoch:]upstream_version[-debian_revision] Ejemplo: 4:4.4.2-1 Para comparar versiones, resolver dudas: $ dpkg --compare-versions '4:4.4.2-1' '>' \ '4:4.4.2~beta1-1' && echo yes || echo no yes

23 Documentos importantes DFSG - Debian Free Software Guidelines http://www.debian.org/social_contract#guidelines http://wiki.debian.org/DFSGLicenses Debian Policy Manual http://www.debian.org/doc/debian-policy/ Debian Developers Reference http://www.debian.org/doc/developers-reference/

24 Antes de empezar... ●Paquetes necesarios siempre que vamos a empaquetar: build-essential devscripts dh-make fakeroot ●Variables de entorno: export [email protected] export DEBFULLNAME='Tu nombre'

25 Debianización inicial (I) ●Obtenemos el código fuente original: wget http://alioth.debian.org/~santa- guest/talks/dudesconf2010/antxon-1.0.0.tar.gz ●Descomprimimos: tar -xzvf antxon-1.0.0.tar.gz ●Entramos al directorio y dentro de él ejecutamos dh_make: cd antxon-1.0.0/ dh_make -f../antxon-1.0.0.tar.gz

26 Debianización inicial (II) $ dh_make -f../antxon-1.0.0.tar.gz Type of package: single binary, indep binary, multiple binary, library, kernel module, kernel patch or cdbs? [s/i/m/l/k/n/b] s Maintainer name : José Manuel Santamaría Lema Email-Address : [email protected] Date : Mon, 29 Mar 2010 16:36:35 +0200 Package Name : antxon Version : 1.0.0 License : blank Using dpatch : no Using quilt : no Type of Package : Single Hit to confirm: Done. Please edit the files in the debian/ subdirectory now. You should also check that the antxon Makefiles install into $DESTDIR and not in /.

27 Ficheros en debian/ -la parte fácil Algunos ficheros no los necesitaremos, podemos borrar: ●antxon.cron.d.ex (ejemplo para un paquete que tenga que añadir una tarea al cron) ●emacsen-* (archivos relacionados con emacs, los borramos, ya que The Editor of the Beast es mucho mejor) ●init.d.* (ejemplos para un paquete con scripts de inicio) ●antxon-default.ex (ejemplo de un archivo de defaults /etc/default/*, está relacionado con los scripts de inicio) ●antxon-doc-base.EX (para añadir la documentación a la base de datos general de documentos, no lo usaremos)

28 Ficheros en debian/ -la parte fácil ●postinst.ex, prerm.ex, preinst.ex y postrm.ex son los maintainer scripts que se ejecutan cuando el paquete se instala o se desinstala. Nuestro paquete es muy simple y no necesita nada de esto (y así muchísimos paquetes). ●README.Debian (para añadir información específica sobre el software en Debian). ●manpage* Todo binario en Debian debe tener una manpage que se llame como el binario. En nuestro caso, usaremos manpage.1.ex como página de man, la renombramos a antxon.1 y borraremos manpage.xml.ex y manpage.xml.ex ●README.source (información sobre el paquete fuente).

29 Ficheros en debian/ -la parte fácil ●menu.ex (para añadir el programa al menú de Debian, no lo necesitamos). ●README.Debian (para añadir información específica sobre el software en Debian). ●manpage* Todo binario en Debian debe tener una manpage que se llame como el binario. En nuestro caso, usaremos manpage.1.ex como página de man, la renombramos a antxon.1 y borraremos manpage.xml.ex y manpage.xml.ex ●README.source (información sobre el paquete fuente).

30 Qué ficheros nos quedan ●Tras borrar los ficheros anteriores nos deberian de quedar bajo debian/ copyright source source/format watch.ex control rules changelog compat docs antxon.1

31 debian/control 1 Source: antxon 2 Section: unknown 3 Priority: extra 4 Maintainer: José Manuel Santamaría Lema 5 Build-Depends: debhelper (>= 7) 6 Standards-Version: 3.8.4 7 Homepage: 8 Package: antxon 9 Architecture: any 10 Depends: ${shlibs:Depends}, ${misc:Depends} 11 Description: 12

32 debian/control 1 Source: antxon 2 Section: misc 3 Priority: extra 4 Maintainer: José Manuel Santamaría Lema 5 Build-Depends: debhelper (>= 7), libreadline-dev 6 Standards-Version: 3.8.4 7 Homepage: http://alioth.debian.org/~santa-guest/talks/dudesconf2010/ 8 Package: antxon 9 Architecture: any 10 Depends: ${shlibs:Depends}, ${misc:Depends} 11 Description: a simple program which repeats what you write 12 This program will ask you to write a text line, when you push enter it will 13 print what you wrote. 14. 15 This program was developed to show how to build a Debian package during 16 DudesConf (aka DebConf) 2010.

33 debian/rules 1 #!/usr/bin/make -f 2 configure: configure-stamp 3 configure-stamp: 4 dh_testdir 5 # Add here commands to configure the package. 6 touch configure-stamp 7 build: build-stamp 8 build-stamp: configure-stamp 9 dh_testdir 10 # Add here commands to compile the package. 11 $(MAKE) 12 touch $@

34 debian/rules 13 clean: 14 dh_testdir 15 dh_testroot 16 rm -f build-stamp configure-stamp 17 # Add here commands to clean up after the build process. 18 $(MAKE) clean 19 dh_clean 20 binary-indep: build install 21 # Add here commands to build architecture-independent files. 22 # Build architecture-dependent files here.

35 debian/rules 23 binary-arch: build install 24 dh_testdir 25 dh_testroot 26 dh_installchangelogs 27 dh_installdocs 28 #dh_installexamples 29 dh_install antxon /usr/bin/ 30 #dh_installmenu 31 #dh_installdebconf 32 #dh_installlogrotate 33 #dh_installemacsen 34 dh_installpam 35 #dh_installmime 36 #dh_python 37 #dh_installinit 38 #dh_installcron 39 #dh_installinfo

36 debian/rules 40 dh_installman debian/antxon.1 41 dh_link 42 dh_strip 43 dh_compress 44 dh_fixperms 45 #dh_perl 46 dh_makeshlibs 47 dh_installdeb 48 dh_shlibdeps 49 dh_gencontrol 50 dh_md5sums 51 dh_builddeb 52 binary: binary-indep binary-arch 53.PHONY: build clean binary-indep binary-arch binary install configure

37 debian/rules binary-arch binary-indep binary install clean build get-orig-source build-stamp configure configure-stamp requerido opcional foo depende de bar: leyenda: bar foo

38 debian/copyright Formato libre o también DEP-5 http://dep.debian.net/deps/dep5/

39 debian/copyright This work was packaged for Debian by: José Manuel Santamaría Lema on Mon, 29 Mar 2010 23:06:52 +0200 It was downloaded from: http://alioth.debian.org/~santa-guest/talks/dudesconf2010/ Upstream Author(s): José Manuel Santamaría Lema Copyright: Copyright © 2010 José Manuel Santamaría Lema

40 debian/copyright License: Unless something else is mentioned, the code files in this package are under the GNU General Public License: This package is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the license, or (at your option) any later version. This package is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this package; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. The full text of the GNU General Public License version 2 is available on Debian systems in /usr/share/common-licenses/GPL-2.

41 debian/copyright The Debian packaging is: Copyright © 2010 José Manuel Santamaría Lema and is licensed under the GPL version 2 or later, see "/usr/share/common-licenses/GPL-2".

42 debian/changelog antxon (1.0.0-1) unstable; urgency=low * Initial release (Closes: #nnnn) -- José Manuel Santamaría Lema Mon, 29 Mar 2010 23:06:52 +0200

43 debian/watch # Compulsory line, this is a version 3 file version=3 http://alioth.debian.org/~santa- guest/talks/dudesconf2010/antxon-(.*)\.tar\.gz Ver la página de man de uscan para más información sobre el formato de este fichero.

44 Otros ficheros El formato del paquete fuente: $ cat debian/source/format 3.0 (quilt) Ficheros a instalar en /usr/share/doc/antxon/: $ cat debian/docs readme.txt El nivel de compatibilidad de debhelper, veáse man debhelper para más información: $ cat debian/compat 7

45 Construimos el paquete Para compilar: dpkg-buildpackage -i -us -uc -rfakeroot

46 quilt En el directorio antxon-1.0.0... cd antxon-1.0.0 Creamos un parche nuevo quilt new 01_add_newline.diff Añadimos al parche los ficheros que queremos modificar quilt add main.c

47 quilt Editamos corrigiendo los fallos vim main.c Refrescamos el parche quilt refresh Podemos ver el diff resultante con quilt diff

48 quilt Tenemos un nuevo directorio con dos ficheros dentro: debian/patches debian/patches/01_add_newline.diff debian/patches/series El fichero series indica qué parches se van a aplicar al compilar el paquete $ cat debian/patches/series 01_add_newline.diff

49 quilt Modificamos el changelog con dch -i y nos queda: antxon (1.0.0-2) unstable; urgency=low * Add 01_add_newline.diff (Closes: #nnnn) -- José Manuel Santamaría Lema Tue, 30 Mar 2010 21:25:04 +0200 antxon (1.0.0-1) unstable; urgency=low * Initial release (Closes: #nnnn) -- José Manuel Santamaría Lema Mon, 29 Mar 2010 23:06:52 +0200

50 Compilamos otra vez... dpkg-buildpackage -i -us -uc -rfakeroot

51 pbuilder ●Crear el entorno chroot dónde vamos a compilar el paquete: pbuilder create ●Actualizar el entorno chroot: pbuilder update ●Compilar el paquete en el entorno: pbuilder build foo.dsc

52 lintian Comprueba posibles errores en el empaquetado: lintian -i -I -E --pedantic foo_i386.changes

53 Cómo crear un repositorio local con nuestro paquete En el directorio con los *.deb: mkdir -p dists/experimental/main/binary-i386/ apt-ftparchive packages. | gzip -9 > \ dists/experimental/main/binary-i386/Packages.gz

54 Cómo subir un paquete a Debian (I) Castas, de mayor a menor categoría: ●Debian Developers (DD) - pueden subir paquetes a Debian directamente. ●Debian Maintainers(DM) - pueden subir paquetes con DMUA, para otros paquetes necesitan un sponsor (esto es, un DD que les suba los paquetes) ●Gente que figura en los campos Maintainers: o Uploaders: o que simplemente colabora en un equipo. No tienen permisos para subir nada, necesitan siempre un sponsor, o un comantenedor que sea DD y sea el que se encargue de subir los paquetes.

55 Cómo subir un paquete a Debian (II) 1) Obtener el código fuente original. ●Comprobar que la licencia compatible con las DSFG. 1)Anunciar “Intend to package” (ITP) o renombrar RFP (Request For Package). ●Comprobar si existen ITPs previos o RFP. 1) Añadir cambios específicos para Debian. 2) Construir paquete fuente y binarios para Debian. 3) Comprobar y arreglar problemas (y repetir). 4) Desde aquí, seguir con las actualizaciones.

56 Cómo subir un paquete a Debian (II) 1.En lugar de empaquetar nuevo software: Adoptar un paquete huérfano (O) Adoptar un paquete que busca nuevo mantenedor/a (RFA) Ayudar en un paquete que necesita ayuda (RFH) Colaborar en un equipo que mantenga paquetes similares (p.ej. KDE o Gnome) 1.Añadir cambios específicos para adoptar paquete. Si es nueva version los requeridos para actualizar. 2.Construir paquete fuente y binarios para Debian 3.Comprobar y arreglar problemas (y repetir) 4.Desde aquí, seguir con las actualizaciones

57 ¿Por dónde seguir? ●debian.org Developers' Corner ( http://www.debian.org/devel ) New maintainers guide ( http://www.debian.org/doc/maint- guide ) Debian Policy Manual ( http://www.debian.org/doc/debian- policy ) Bug tracking system ( http://bugs.debian.org ) Work-Needing and Prospective Packages ( http://debian.org/devel/wnpp ) ●Discusiones del proyecto http://lists.debian.org irc.debian.org / irc.oftc.net

58 ¡Muchas gracias dudes! =) ¿Preguntas?