ActualizarPaquetes

Semana del desarrollador

Miercoles 1 de Febrero del 2012 - Como actualizar paquetes - coolbhavi

   1 10:01 < chilicuil> y ahora llega coolbhavi que nos hablara sobre como actualizar una aplicacion que ya este
   2 en los repositorios de Ubuntu
   3 10:02 < chilicuil> asegurense de tener el paquete  packaging-dev para seguir la sesion
   4 10:02 < chilicuil> actualizar un paquete, la mayor parte de veces es traer la ultima version estable
   5 de upstream a ubuntu
   6 10:03 < chilicuil> normalmente hacemos esto con un merge o una sincronizacion con los repositorios de Debian
   7 10:03 < chilicuil> pero hay casos donde no podemos, por ejemplo, cuando debian se encuentra en etapa
   8 'freeze' o cuando el paquete no tiene mantenedor
   9 10:04 < chilicuil> o tal vez, solo necesitemos la ultima version para arreglar un error critico
  10 10:04 < chilicuil> en ese caso podemos obtenerlo en ubuntu y despues enviarlo a Debian
  11 10:04 < chilicuil> asumiendo que hemos entendido este proceso comenzaremos la charla
  12 10:04 < chilicuil> lo primero que tenemos que hacer es obtener la ultima version de upstream
  13 10:05 < chilicuil> esto tal vez nos de un paquete .tar 
  14 10:05 < chilicuil> en caso de que tengamos correctamente definido el archivo debian/watch, podemos usar
  15 el comando "uscan" para obtener la ultima version
  16 10:05 < chilicuil> mas sobre este procedimiento aqui: http://wiki.debian.org/debian/watch
  17 10:06 < chilicuil> uscan manda a llamar a uupdate, recomiendo que tambien vean su manual $ man uupdate
  18 10:07 < chilicuil> tambien podemos tener una regla en debian/rules, si la tiene podriamos obtener la
  19 ultima version si corremos $ make -f debian/rules get-orig-source
  20 10:07 < chilicuil> aunque eso depende de paquete en paquete
  21 10:07 < chilicuil> no olviden leer el changelog (debian/changelog) para ver si existe algun otro metodo
  22 para obtener la ultima version del programa
  23 10:08 < chilicuil> bien, una vez que tengamos la ultima version, debemos renombrarlo conforme a la politica
  24 de empaquetamiento
  25 10:08 < chilicuil> por ejemplo si tenemos foo-1.1.tar.gz lo renombraremos a foo_1.1.orig.tar.gz
  26 10:10 < chilicuil> en el caso mas simple, donde no haya cambios en el empaquetamiento, descompriremos
  27 el archivo, copiaremos el archivo debian, agregaremos el nuevo cambio en el changelog, sobre la actualizacion
  28 y crearemos el binario
  29 10:10 < chilicuil> me gustaria que todas las actualizaciones fueran asi de simples =)
  30 10:13 < chilicuil> anteriormente a la version 3.0 de dpkg-source, si el empaquetador hacia sus cambios sobre
  31 el programa upstream, en lugar de usar un sistema de parches (podias checar estos si veias el diff.gz
  32 anterior), hacer cambios dentro del directorio debian no era suficiente, tenias que volver a aplicar el
  33 parche sobre el programa, y entonces ocasionalmente te encontrabas con que ya no era compatible, o
  34 tenia algunos errores de acoplamiento
  35 10:13 < chilicuil> tenias que correr $ date ../foo_2.orig.tar.gz en la version anterior para automatizar
  36 el proceso
  37 10:14 < chilicuil> pero ahora, gracias a la version 3.0 de dpkg-source, que genera automaticamente un
  38 archivo debian-changes-* si encuentra cambios fuera del directorio debian es mucho mas facil
  39 10:14 < chilicuil> ademas lintian tambien envia warnings =)
  40 10:14 < chilicuil> pueden encontrar mas informacion sobre la nueva version de dpkg-source aqui:
  41 http://wiki.debian.org/Projects/DebSrc3.0
  42 10:15 < chilicuil> un escenario mas complejo, pero tambien mas real, involucraria revisar las licencias
  43 de todos los archivos, para ver si se ha agregado alguna nueva (licensecheck -r --copyright)
  44 10:16 < chilicuil> verificar si todos los parches de la version anterior aun sirven para esta, o si se
  45 han integrado
  46 10:17 < chilicuil> ver si el paquete requiere nuevas dependencias (algunas veces se reporta en los
  47 changelogs del programa, pero otras tantas hay que encontrarlas revisando los autoconf y los archivos Make)
  48 10:18 < chilicuil> asegurarse que el paquete contiene manual (pagina man), lanzador (archivo .desktop)
  49 y si tiene verificar si es valido (desktop-file-validate)
  50 10:18 < chilicuil> algunas veces los autores cambian algunas cosas que requiren que se agreguen banderas
  51 de compilacion
  52 10:18 < chilicuil> en especial si se trata de una libreria, entonces debemos tener cuidado con eso
  53 10:19 < chilicuil> hay que verificar si los cambios en la API/ABI se reflejan en SONAME/version (para
  54 saber que es soname, ver: http://en.wikipedia.org/wiki/Soname)
  55 10:19 < chilicuil> check-symbols te puede ayudar con esa tarea
  56 10:20 < chilicuil> algunas veces se necesitara compilar muchos paquetes en los repositorios, si
  57 estamos actualizando una libreria de la que dependen muchos programas
  58 10:20 < chilicuil> ahora usaremos un ejemplo, para que todo quede mas claro
  59 10:21 < chilicuil> espero que no este llendo demasiado rapido, si tienen cualquier pregunta, no duden
  60 en interrumpir
  61 10:21 < chilicuil> #tambien, si desean que les ayudemos a hacer su pregunta, no duden en hacerla
  62 10:22 < chilicuil> regresando.., el paquete que usare como ejemplo es un paquete que yo mismo he creado
  63 10:22 < chilicuil> mobile-broadband-provider-info (que por cierto, no he actualizado ultimamente, porque
  64 he estado liado con otros asuntos)
  65 10:22 < chilicuil> escribiremos en una terminal $ mkdir m-b-p-i && cd m-b-p-i &&  dget -x
  66 https://launchpad.net/ubuntu/+archive/primary/+files/mobile-broadband-provider-info_20111113-1ubuntu1.dsc
  67 10:23 < chilicuil> que descargara la ultima version del paquete fuente de debian, de launchpad
  68 10:24 < chilicuil> vean que no estoy usando apt-get source mobile-broadband-provider-info dado que
  69 eso descargaria la version de oneiric,natty,maverick or lucid), una cosa util solo si se desea hacer un SRU
  70 10:24 < chilicuil> obounaim menciona que esta teniendo un error de validacion
  71 10:24 < chilicuil> coolbhavi ha pedido que haga $  gpg --recv-keys ID_de_la_llave_con_la_que_tiene_problemas
  72 10:25 < chilicuil> y que vuelva a intentar descargarlo $ dget -x
  73 https://launchpad.net/ubuntu/+archive/primary/+files/mobile-broadband-provider-info_20111113-1ubuntu1.dsc
  74 10:25 < chilicuil> tambien se puede descargar de esta forma $ pull-lp-source  mobile-broadband-provider-info
  75 10:26 < chilicuil> #me pregunto si sera lo mismo que hacer $ bzr branch
  76 lp:ubuntu/mobile-broadband-provider-info ...
  77 10:27 < chilicuil> ahora que tengan el directorio mobile-broadband-provider-info-20111113/ hay que entrar a
  78 el y buscar el directorio debian
  79 10:28 < chilicuil> una vez dentro de debian/ veran los archivos +changelog, +control,
  80 +mobile-broadband-provider-info.docs, +copyright, +rules, etc
  81 10:29 < chilicuil> bueno, han contestado a mi pregunta diciendo que funcionaria, pero que ahora no esta
  82 explicando el metodo distribuido
  83 10:30 < chilicuil> sino el metodo clasico
  84 10:31 < chilicuil> obounaim ha mencionado que no encuentra el directorio
  85 mobile-broadband-provider-info-20111113/
  86 10:33 < chilicuil> coolbhavi le ha pedido que verifique si ha extraido el codigo fuente correctamente,
  87 puede hacerse de esta manera $ dpkg-source -x mobile-broadband-provider-info_20111113-1ubuntu1.dsc
  88 10:34 < Marverick> lo chilicuil
  89 10:34 < chilicuil> continuando, una vez dentro del directorio debian/ veran un archivo llamado +format
  90 10:35 < chilicuil> o/ Marverick, bienvenido =)
  91 10:35 < Marverick> gracias
  92 10:35 < chilicuil> dentro de el encontraremos una cadena llamada "3.0 (quilt)"
  93 10:35 < chilicuil> que especifica la version de dpkg-source 
  94 10:35 < chilicuil> ahora, si ven el archivo +watch
  95 10:36 < chilicuil> observaran que realmente no contiene nada, solo lo hice para satisfacer las politicas
  96 de empaquetamiento, lintian debio haber mostrado la falta del archivo
  97 10:36 < chilicuil> Marverick: tal vez tambien quieras entrar a #ubuntu-classroom, ahi es donde todo esta
  98 pasando, esto solo es una interpretacion de aquello
  99 10:37 < Marverick> si
 100 10:37 < Marverick> you sé
 101 10:37 < Marverick> yo
 102 10:37 < chilicuil> ahora que hemos visto que no podemos usar el archivo watch, podemos hechar un vistaso
 103 al archivo debia/rules
 104 10:37 < chilicuil> veran que he definido una regla llamada get-orig-source
 105 10:38 < chilicuil> el archivo debian/rules es en realidad un archivo Makefile con un nombre distinto ;)
 106 10:38 < chilicuil> si ven un poco mas la regla get-orig-source notaran que requiere tener instalados
 107 los programas automake y git-core
 108 10:39 < chilicuil> asi que pueden instalarlos, si desean seguir con el ejemplo
 109 10:39 < chilicuil> suponiendo que no hay dudas hasta aqui, continuaremos
 110 10:42 < chilicuil> asi que, si tienen esos programas pueden obtener la ultima version del paquete haciendo: 
 111 10:42 < chilicuil> $ make -f debian/rules get-orig-source
 112 10:43 < chilicuil> esto descargara la ultima version en git-head y lo comprimira en un tar
 113 10:44 < chilicuil> despues lo descomprimira en el directorio mobile-broadband-provider-info-20120201/
 114 10:44 < chilicuil> pueden ver todo lo que hace, si revisan los comandos que aplican para la regla
 115 get-orig-source en debian/rules
 116 10:45 < chilicuil> ahora, dado que no hay cambios, ni parches fuera del directorio debian, copiamos
 117 ese directorio de mobile-broadband-provider-info-20111113/ a mobile-broadband-provider-info-20120201/
 118 10:45 < chilicuil> una vez completado, entraremos al directorio debian de
 119 mobile-broadband-provider-info-20120201/
 120 10:45 < chilicuil> y utilizaremos $ dch -i para describir nuestros cambios
 121 10:46 < chilicuil> le cambiaremos la version a la 20120201-0ubuntu1 (usaremos -0ubuntu1 dado que esta
 122 version no esta en Debian), y le pondremos que es para 'precise'
 123 10:47 < chilicuil> ahora deberia verse mas o menos asi: mobile-broadband-provider-info
 124 (20120201-0ubuntu1) precise; urgency=low
 125 10:47 < chilicuil> tambien agregaremos la leyenda, en ingles: * Merging upstream version 20120201 from git
 126 and make a list
 127 10:47 < chilicuil> of upstream changes
 128 10:48 < chilicuil> tambien listaremos los bugs que esten relacionados, con los errores que corriga
 129 la actualizacion, de esta manera una vez que se suba a los repositorios, cerran cerrados automaticamente
 130 10:48 < chilicuil> mañana hablare un poco mas sobre el formato que debe tener el changelog
 131 10:49 < chilicuil> jincreator1 pregunta que ha escuchado hablar sobre fakeroot.
 132 10:49 < chilicuil> y se pregunta cual es la diferencia entre $ fakeroot debian/rules y make -f debian/rules
 133 10:52 < chilicuil> coolbhavi ha contestado que make -f usa el comando make en tu entorno, mientras que
 134 fakeroot crea un entorno temporal, donde se le hace creer a make que se esta ejecutando con permisos
 135 de administrador
 136 10:52 < chilicuil> regresando al tema
 137 10:53 < chilicuil> una vez hechos los cambios y guardado el changelog, escribiremos $  debuild -S -sa
 138 para obtener el paquete fuente
 139 10:54 < chilicuil> una vez que el archivo .dsc y changes se hayan generado, podemos seguir pasos
 140 adicionales, para ganar puntos extra
 141 10:54 < chilicuil> como usar pbuilder para probar si se generan correctamente binarios en base al nuevo
 142 archivo .dsc que tenemos
 143 10:55 < chilicuil> tendremos una sesion especifica sobre pbuilder mañana con tumbleweed =)
 144 10:57 < chilicuil> tambien podemos hacer un diff entre los directorios, y subirlos a launchpad junto con el
 145 tar del codigo fuente (mi forma preferida de revisar parches) #nota del interprete, aunque es su forma
 146 preferida, Ubuntu como distribucion y muchos otros desarrolladores prefieren usar el metodo distribuido
 147 (bzr+lp)
 148 10:57 < chilicuil> para hacer un diff de este ejemplo corremos: 
 149 10:57 < chilicuil> $  diff -Nurb mobile-broadband-provider-info-20111113 
 150 mobile-broadband-provider-info-20120201 >  m-b-p-i.diff
 151 10:58 < chilicuil> una vez que hayan subido sus cambios, suscriban al equipo ubuntu-sponsors para que los vea
 152 10:58 < chilicuil> si sus cambios son correctos, la nueva version del programa estara disponible en los
 153 repositorios de Ubuntu
 154 10:58 < chilicuil> tenemos mas preguntas?
 155 10:59 < chilicuil> gracias a todos, eso es todo de mi parte, espero poder verlos en #ubuntu-motu o en
 156 #ubuntu-devel
 157 11:00 < chilicuil> tambien pueden contactarme por email en  bhavi@ubuntu.com o en fb facebook.com/bshankar
 158 11:00 < chilicuil> con eso termina la sesion de coolbhavi =)

SemanaDesarrollador/OneiricLogs/ActualizarPaquetes (last edited 2012-02-02 06:57:19 by javier-lopez)