DebianPackaging
Ubuntu Open Week - Empaquetamiento en Debian - René Mayorga - Martes 3 de noviembre 2009
1 [19:00:19] <alucardni> Para la última charla del día de hoy
2 [19:00:38] <alucardni> les dejo a rmayorga, Debian Developer que nos acompaña desde El Salvador
3 [19:00:50] <alucardni> rmayorga, el canal es todo tuyo :-)
4 [19:00:55] <rmayorga> buenas noches/días/tardes
5 [19:01:15] <rmayorga> primero, la idea es hacer un taller, mas que una charla, así que alguien esta dispuesto a seguir bien
6 [19:01:35] <rmayorga> también, no se si puedo quitar el +m y dejar abierto a que las preguntas sean publicas
7 [19:01:59] <alucardni> rmayorga, es decisión tuya
8 [19:02:13] <rmayorga> :)
9 [19:02:45] <rmayorga> bueno, vamos a trabajar un paquete sencillo, quien quiuera seguir, y quien tenga dudas, totalmente bienvenido
10 [19:02:50] <rmayorga> si pueden ir descargando
11 [19:02:53] <rmayorga> http://projects.thepozer.net/versions/download/19?attachment_id=25
12 [19:03:09] <rmayorga> también para ahorrar tiempo si pueden hacer desde ya un apt-get build-dep gmysqlcc
13 [19:03:18] <rmayorga> para que descargue todas las dependencias de construcción
14 [19:03:29] <rmayorga> y apt-get install dh-make
15 [19:04:25] <rmayorga> para iniciar, hablar un poco de .deb como tal
16 [19:05:04] <rmayorga> básicamente un .deb es un contenedor .ar, que en su interior tiene un .tar.gz con los archivos a instalar, y otro .tar.gz con archivos de control
17 [19:05:39] <jamesjedimaster> .ar? no sera .tar?
18 [19:05:57] <rmayorga> a la fecha existen varias formas de generar .debs, existen también varias opciones de utilizar a la hora de elegír el estilo de empaquetar, usando herramientas como debhelper
19 [19:05:57] <rmayorga> jamesjedimaster: no, ar
20 [19:06:18] <rmayorga> http://en.wikipedia.org/wiki/Ar_(Unix)
21 [19:06:25] <rmayorga> jamesjedimaster: ↑↑↑↑↑
22 [19:06:37] <jamesjedimaster> ok
23 [19:07:01] <rmayorga> bueno, sigo :), no voy a explicar mucho sobre el formato, sino mas bien como llegar al resultado
24 [19:07:36] <rmayorga> independientementemente de el estilo que usemos para empaquetar existe algo básico
25 [19:08:18] <rmayorga> un paquete binario como ya sabemos va a ser el .deb, el contenedor ar con lo que explicaba arriba, pero para esto tenemos un source, el source de un .deb son básicamente varios archivos
26 [19:08:30] <rmayorga> el .orig.tar.gz que es el tarball original de la aplicación, el que nos provee «upstream»
27 [19:08:58] <rmayorga> .diff.gz que es un .diff con todos los cambios introducidos por el maintainer de Debian para generar el .deb
28 [19:09:34] <rmayorga> y un .dsc que es un archivo de control del source, donde se encuentran varias cosas, por ejemplo checksums y shasums de los archivos anteriores
29 [19:10:00] <rmayorga> para efectos de entender un poco, yo puedo descargar cualquier paquete con apt-get source para ver estos archivos
30 [19:10:18] <rmayorga> ok, no se si quien va a seguir tiene el archivo que pase a descargar
31 [19:10:24] <rmayorga> y logro descargar las dependencias
32 [19:10:27] <z-itou16> si
33 [19:11:21] <rmayorga> ok, lo primero en el caso es verificar que la aplicación compile, pero no lo vamos a hacer de esa forma, sino que creemos un directorio temporal de trabajo, copiemos el tarball de gmysqlcc ahi(el que acabamos de descargar)
34 [19:11:35] <rmayorga> y lo sacamos del tar, tar -xvzf ...
35 [19:12:32] <rmayorga> luego entramos al directorio del paquete, donde se encuentra el source, y ejecutamos dh_make -f ../gmysqlcc-0.3.0.tar.gz
36 [19:12:59] <rmayorga> dh_make es una herramienta para hacer la «debianización» inicial de un paquete, todo esto es bastante simple, por lo que lo podríamos hacer nosotros totalmente a mano
37 [19:13:16] <rmayorga> lo que va a pasar con esto, es que simplemente se creeara un directorio debian/ dentro de los sources del paquete
38 [19:13:30] <rmayorga> este directorio tendra los archivos necesarios para construír el paquete
39 [19:13:50] <rmayorga> dh_make pregunta : Type of package: single binary, indep binary, multiple binary, library, kernel module, kernel patch or cdbs?
40 [19:14:07] <rmayorga> por lo que deberíamos de responderle con una «s» pues lo que estamos creando es un paquete binario simple
41 [19:15:00] <rmayorga> al terminar con esto podemos ver que se creo el directorio
42 [19:15:31] <rmayorga> dentro del directorio tenemos varios archivos con .EX y .ex
43 [19:16:09] <rmayorga> los archivos mas importantes son:
44 [19:16:40] <rmayorga> debian/rules, debian/control, debian/changelog, debian/compat, debian/copyright
45 [19:16:56] <rmayorga> si queremos podemos borrar todos los demas y dejar solo esos, para trabajar en base a esos archivos
46 [19:17:36] <rmayorga> quien me sigue me dice si voy muy rapido
47 [19:17:47] <z-itou16> yo sigo
48 [19:17:55] <z-itou16> ya tengo los .ex
49 [19:18:08] <rmayorga> borremos todos los .ex :)
50 [19:18:10] <rmayorga> y los .EX
51 [19:18:15] <z-itou16> ok
52 [19:18:33] <rmayorga> en medio explico un poco sobre debian/rules
53 [19:18:49] <rmayorga> debian/rules básicamente es un Makefile, *NO* un bash script
54 [19:19:15] <rmayorga> donde declaramos los «pasos» para construir el binario, lo que esto tiene que hacer
55 [19:20:02] <rmayorga> es construír el fuente, generar los binarios/manuales/etc y colocarlos todos en sus respectivos lugares dentro de un directorio temporal de debian/, luego en los últimos targets, armar el .deb con toda esta información
56 [19:20:37] <rmayorga> para debian/rules se pueden usar herramientas como debhelper o como cdbs, cada una tiene sus pros/contras, o usar un «plain» makefile
57 [19:21:51] <rmayorga> actualmente todo se redujo mucho, con lo de debhelper7 y los «tiny rules» la idea es hacer todo mas fácil y mas standard
58 [19:22:01] <rmayorga> por eso si vemos el archivo solo van a lograr ver un :
59 [19:22:02] <rmayorga> %:
60 [19:22:03] <rmayorga> dh $@
61 [19:22:23] <rmayorga> que en el caso del clásico ./configure && make && make install debería de bastar
62 [19:22:50] <rmayorga> si queremos ver un poco la extructura anterior podemos bajar el paquete original en otro directorio con apt-get source gmysqlcc
63 [19:23:41] <rmayorga> para hacerlo interesante, voy a explicar un poco lo de los targets de debian/rules en la versión vieja
64 [19:24:38] <rmayorga> los targets importantes son: build, clean, install, binary-indep y binary-arch
65 [19:25:11] <rmayorga> build como dice, construye el paquete, puede tener dependencias, como el caso de config
66 [19:26:08] <rmayorga> clean limpia todo, y es necesario asegurarse que se limpie bien después de construir, pues sino se hace se pueden generar errores cuando el paquete se construye mas de una vez, también por politica de debian que el clean no deje todo tal y como lo encontro podría ser un problema serio
67 [19:26:27] <rmayorga> install, se encarga de instalar todo en su lugar
68 [19:26:47] <rmayorga> y los dos últimos, binary-indep y binary-arch son los que generan el binario(.deb)
69 [19:27:13] <rmayorga> solamente se tiene que usar uno, dependiendo del caso del paquete
70 [19:28:09] <rmayorga> ejemplo, si es un paquete que no depende de arquitectura(imagenes, php, perl, python), se usa binary-indep, y si es un paquete que depende de arquitectura(C,C++) se usa binary-arch
71 [19:28:22] <rmayorga> en estos targets me aseguro de armar completo el .deb
72 [19:28:43] <rmayorga> si tenemos el archivo debian/rules que pedí descargaramos con apt-get source podemos ver mas o menos la estructura de los targets
73 [19:29:35] <rmayorga> las llamadas que se hacen, como por ejemplo dh_install
74 [19:29:42] <rmayorga> tienen su propio manual
75 [19:29:53] <rmayorga> por lo que podriamos realizar un man dh_install por ejemplo
76 [19:30:18] <rmayorga> y el manual completo en man debhelpper
77 [19:30:51] <rmayorga> estas llamadas de debhelper cumplen funciones especificas y son de las herramientas que hablaba en un principio
78 [19:31:05] <rmayorga> ayudan a hacer todo un poco mas standard y a evitar en cierto modo errores de los maintainers
79 [19:31:33] <rmayorga> pues mucha gente depende de que una apliación haga la mayoría de cosas bien y no es necesario hacerlas manulmente
80 [19:32:08] <rmayorga> vamos a probar construir con el debian/rules que genero dh_make, sino funciona luego copiamos este de ejemplo para que funcione.
81 [19:32:13] <rmayorga> alguna duda hasta aqui ?
82 [19:32:32] <z-itou16> el rule
83 [19:32:38] <JADardon> <<Pregunta>> ¿Para que sirven los archivos .ex .EX?
84 [19:32:44] <rmayorga> eran ejemplos
85 [19:33:09] <rmayorga> por lo que los podes borrar, la mayoría tienen sus funciones reales (cuando no son ejemplos)
86 [19:33:12] <rmayorga> como init script
87 [19:33:18] <rmayorga> o maint-scripts
88 [19:33:21] <rmayorga> z-itou16: si ?
89 [19:33:27] <z-itou16> veo una diff
90 [19:33:42] <z-itou16> entre el tar que se descargo el link vs el apt
91 [19:33:45] <z-itou16> en el rule
92 [19:33:56] <z-itou16> el rule de source se ve para mi algo mas entendible
93 [19:33:58] <rmayorga> si, el debian/rules de apt-get source es mas grande
94 [19:34:05] <z-itou16> ahh ok
95 [19:34:10] <rmayorga> el que descargaste con el link no tenía debian/rules
96 [19:34:14] <rmayorga> lo creo dh_make
97 [19:34:18] <JADardon> gracias
98 [19:34:25] <z-itou16> si correcto es un src
99 [19:34:30] <z-itou16> si disculpe
100 [19:34:37] <rmayorga> bueno, la idea es que sea al reves, la diferencia es que la versión de apt-get source usa el formato de debhelper versión 5
101 [19:34:47] <rmayorga> y la que creo dh_make usa debhelper versión 7
102 [19:35:16] <rmayorga> a mi en lo particular, me gusta mas la versión vieja :)
103 [19:35:32] <rmayorga> bueno, vamos con el segúndo archivo
104 [19:35:56] <rmayorga> debian/control
105 [19:36:25] <rmayorga> el primer campo Source: es el nombre del paquete
106 [19:36:40] <rmayorga> del «source», podriamos tener un «source» y varios binarios
107 [19:36:54] <rmayorga> generados desde el mismo source
108 [19:37:09] <rmayorga> el caso cuando vemos algo como foo-data, foo-common, foo-dev
109 [19:37:35] <rmayorga> el Source en ese caso podría ser foo, los otros binarios generados apartir del source
110 [19:37:56] <rmayorga> siguiendo los campos, Section
111 [19:38:30] <rmayorga> determina la sección del archivo a la que pertenece el paquete, ejemplo: net, misc, gnome, etc
112 [19:38:49] <rmayorga> para el caso de la audiencia, no sabría decir cual es la analogía en Ubuntu
113 [19:39:37] <rmayorga> aqui también usamos main como algo que se asume, si dice ejemplo «net» pertenece a «main/net», pero si el paquete es no-libre fuera algo como «non-free/net»
114 [19:40:09] <rmayorga> luego el priority, este no lo voy a explicar, pero tiene que ver con lo que es essential, optional, etc
115 [19:40:37] <rmayorga> luego Maintainer que es el mantenedor del paquete
116 [19:40:50] <rmayorga> Build-Depends y Build-Depends-Indep
117 [19:41:07] <rmayorga> se usa Build-Depends cuando el paquete es dependiente de arquitectura(C/C++)
118 [19:41:25] <rmayorga> y Build-Depends-Indep cuando el paquete no depende de arquitectura(php,perl, etc)
119 [19:41:55] <rmayorga> ojo, estas no son depencias para que el paquete funcione
120 [19:42:03] <rmayorga> sino que son las dependencias necesarias para que el paquete construya
121 [19:42:25] <rmayorga> ejemplo, lo que instalaron cuando estaban haciendo apt-get build-dep
122 [19:43:13] <rmayorga> Standards-Version contiene la versión de debian-policy con que se esta trabajando, la última 3.8.3
123 [19:43:37] <rmayorga> http://www.debian.org/doc/debian-policy/
124 [19:43:57] <rmayorga> el link de debian-policy, ahí estan explicados todos estos campos
125 [19:44:04] <rmayorga> y algunos que no estan en los paquetes de ejemplo
126 [19:44:10] <rmayorga> también todos los ficheros
127 [19:44:11] <rmayorga> etc
128 [19:44:24] <rmayorga> debian se toma muy en serio su politica
129 [19:44:38] <rmayorga> así que es algo muy importante de leer si les interesa el tema
130 [19:44:52] <rmayorga> ok
131 [19:45:03] <rmayorga> hasta ahí la definición del primer parrafo en el archivo
132 [19:45:11] <rmayorga> esa es la definición del source
133 [19:45:21] <rmayorga> luego los binarios se definen abajo, con Package
134 [19:45:25] <rmayorga> y el nombre del binario
135 [19:45:30] <rmayorga> Architecture: any
136 [19:45:38] <rmayorga> es importante, por que puede ser any o all
137 [19:46:01] <rmayorga> o contener valores de architecturas especificas,, cuando se usa any se esta diciendo que el paqute es dependiente de arquitectura
138 [19:46:23] <rmayorga> y que compila en cualquier arquitectura, cuando se usa all es para decir que el paquete no depende de arquitectura
139 [19:46:31] <rmayorga> luego: Depends: ${shlibs:Depends}, ${misc:Depends}
140 [19:47:00] <rmayorga> donde estan esas dos variables, shlibs:Depends la usa debhelper, quien determina las dependencias de runtime para el paquete
141 [19:47:09] <rmayorga> y sustituye ahí con esa información
142 [19:47:18] <rmayorga> y al final
143 [19:47:20] <rmayorga> Description: <insert up to 60 chars description>
144 [19:47:20] <rmayorga> <insert long description, indented with spaces>
145 [19:47:32] <rmayorga> que es la descripción que vemos en apt-get/aptitude/synaptic
146 [19:47:47] <rmayorga> ese era el segundo archivo importante
147 [19:47:53] <rmayorga> alguna duda hasta aca ?
148 [19:48:31] <rmayorga> ok, los últimos dos archivos, un poco rapido
149 [19:49:09] <rmayorga> debian/copyright debería de contener toda la información del copyright del paquete
150 [19:49:13] <rmayorga> las licencias, autores, etc
151 [19:49:37] <rmayorga> es importante, pues si debian/copyright no es claro, el paquete nunca podra entrar a Debian
152 [19:50:03] <rmayorga> luego debian/changelog, donde se describen los cambios en el tiempo del paquete
153 [19:50:10] <rmayorga> cada revisión para debian y cada versión nueva
154 [19:50:37] <rmayorga> lo último, debian/compat que debería de decir solo «7»
155 [19:50:43] <rmayorga> que es la versión de debhelper que estan usando
156 [19:50:54] <z-itou16> la duda de los dep ya me la aclaro, gracias :)
157 [19:51:24] <rmayorga> ok, digamos que con eso esta todo mas o menos bien
158 [19:51:29] <rmayorga> podriamos probar construir
159 [19:51:40] <rmayorga> desde el source del paquete(fuera de debian/)
160 [19:51:46] <rmayorga> dpkg-buildpackage -uc -us
161 [19:52:28] <rmayorga> si todo funciona, deberíamos de tener varios archivos
162 [19:52:30] <rmayorga> gmysqlcc-0.3.0 gmysqlcc_0.3.0-1_amd64.deb gmysqlcc_0.3.0-1.dsc gmysqlcc-0.3.0.tar.gz
163 [19:52:33] <rmayorga> gmysqlcc_0.3.0-1_amd64.changes gmysqlcc_0.3.0-1.diff.gz gmysqlcc_0.3.0.orig.tar.gz
164 [19:52:47] <rmayorga> que son los que mencionaba en el inicio, .orig.tar.gz, .diff.gz y .dsc
165 [19:53:42] <rmayorga> los pasos para la construcción son los de debian/rules, claro, este paquete no funciona mas que para efectos practicos de entender un poco
166 [19:54:01] <rmayorga> parfa hacer un paquete que vaya bien con Debian se necesita ver cada detalle de la politica, y aplicarla
167 [19:54:24] <rmayorga> o sea, esto no podría nunca llegar a debian, por que simplemente funciona sin necesidad de cumplir todas las politicas de calidad, etc
168 [19:54:47] <rmayorga> alguna duda al respecto ?
169 [19:54:54] <rmayorga> no quiero hacer muy largo para no seguir aburriendo :)
170 [19:55:27] <rmayorga> pero cualquier duda especifica después si les interesa el tema, y cualquier cosa en que yo pueda ayudar me pueden escribir con gusto
171 [19:56:05] <rmayorga> aclaro, que no se casi nada de los procesos de desarrollo/politicas/etc en ubuntu, por lo que mi ayuda es explicita para Debian :)
172 [19:56:34] <z-itou16> yo solo tuve un problemita al momento de buildpackage
173 [19:56:48] <z-itou16> configure: error: Sorry, can't found MySQL client library
174 [19:56:54] <z-itou16> no tengo mysql
175 [19:56:55] <z-itou16> ahaha
176 [19:56:58] <z-itou16> pero no importa
177 [19:57:19] <rmayorga> jeje, te falto apt-get build-dep gmysqlcc
178 [19:57:30] <z-itou16> haha noob time :)
179 [19:57:32] <rmayorga> eso te iba a instalar todas las dependencias declaradas en Build-Depends
180 [19:57:44] <z-itou16> hehe si lo he usado para deluge
181 [19:57:45] <z-itou16> hehe
182 [19:57:49] <z-itou16> una pregunta rmayorga
183 [19:57:58] <rmayorga> cuando se hace por primera ves el paquete esto lo fijas a mano
184 [19:57:59] <rmayorga> dime
185 [19:58:17] <z-itou16> ok, creo que lo .deb para mi son super super buenos
186 [19:58:22] <z-itou16> corrigeme si estoy incorrecto
187 [19:58:40] <z-itou16> tengo rato que no uso el pkg installer de debian
188 [19:58:41] <z-itou16> pero
189 [19:58:44] <z-itou16> si en todo caso
190 [19:58:45] <z-itou16> digamos
191 [19:58:49] <z-itou16> bajo
192 [19:59:08] <z-itou16> un .deb pero yo no tengo los dependies para instalar correctamente el .deb
193 [19:59:18] <z-itou16> el me baja los dependies?
194 [19:59:20] <rmayorga> te va a devolver un error de dependencias
195 [19:59:28] <rmayorga> no, si lo haces con dpkg -i foo.deb
196 [19:59:47] <rmayorga> simplemente te va a decir que no se completo el proceso por falta de dependencias, pero si luego ejecutas apt-get install -f
197 [20:00:10] <rmayorga> va a bajar las dependencias(si estan disponibles) y terminar de completar la instalación/configuración del paquete
198 [20:00:33] <z-itou16> excellente
199 [20:00:59] <z-itou16> y donde dentro del build .deb especifico los dep que necesita el usuario final
200 [20:01:11] <rmayorga> en debian/control en Depends
201 [20:01:27] <rmayorga> tenes actualmente: Depends: ${shlibs:Depends}, ${misc:Depends}
202 [20:01:55] <rmayorga> la variable shlibs:Depends la sustituye en el target binary-arch la llamda dh_shlibs
203 [20:02:03] <z-itou16> aja, crei que esos eran para el momento del build pero tambien es para en tal caso los usuarios no los tengan
204 [20:02:13] <z-itou16> ahi se define?
205 [20:02:32] <rmayorga> yu perdon, era dh_shlibdeps
206 [20:02:45] <rmayorga> no, para build son Build-Depends
207 [20:02:56] <rmayorga> Depends es el campo para las dependencias de runtime, las podes poner manuales
208 [20:03:03] <rmayorga> y ser especificas en versiones
209 [20:03:13] <rmayorga> creo que ya nos pasamos de tiempo :)
210 [20:03:20] <z-itou16> waoo
211 [20:03:28] <z-itou16> gracias rmayorga
212 [20:03:31] <alucardni> rmayorga, pues si, se acabó el tiempo
213 [20:03:31] <rmayorga> yo paso siempre en freenode con este nick, no en este canal, pero si en varios
214 [20:03:32] <z-itou16> estuve genial genial
215 [20:03:44] <alucardni> muchas gracias por acompañarlos rmayorga
216 [20:03:45] <rmayorga> y mi correo es rmayorga@debian.org
217 [20:03:55] <rmayorga> cualquier cosa estoy por ahí :)
218 [20:04:04] <rmayorga> no, gracias por dejarme participar :)
219 [20:04:38] <jdardon> gracias rmayorga
UbuntuOpenWeek_ES/openweekKarmicLog/DebianPackaging (last edited 2009-11-04 02:55:15 by pc161137)