Python  Empaquetamiento Deb I Python Madrid 14/4/2011
Quién...   [email_address] [email_address]     http://www.eferro.net eferro DrTrucho
Disclaimer  online de contenido abierto, es decir,  "no me responsabilizo del contenido"  voluntaria de personas...
  Manos a la obra...
Indice... <ul><ul><li>Introducción </li></ul></ul><ul><ul><li>Qué es (un paquete deb) </li></ul></ul><ul><ul><li>Cómo se g...
Introducción:  Contexto... <ul><ul><li>Sistemas GNU/Linux </li></ul></ul><ul><ul><li>Distros basadas en paquetes DEB (Debi...
Introducción:  Por qué empaquetar... <ul><ul><li>Control de dependencias </li></ul></ul><ul><ul><li>Inventario de software...
Introducción:  Qué empaquetar... <ul><ul><li>Software de base / infraestructura </li></ul></ul><ul><ul><li>Versiones difer...
Introducción:  Cuánto cuesta empaquetar... <ul><ul><li>Si es python y usa distutils (setup.py), casi nada </li></ul></ul><...
Paquetes Deb Aplicaciones Python Manos a la obra
Qué es:  Anatomía de un Deb I <ul><li>Un fichero deb simplemente son tres ficheros unidos en uno sólo mediante &quot;ar&qu...
Qué es:  Anatomía de un Deb II <ul><ul><li>debian-binary  Version del paquete deb (actualmente 2.0) </li></ul></ul><ul><ul...
Cómo se genera:  Herramientas I <ul><li>Herramientas para contruir paquetes  </li></ul><ul><ul><li>python  (incluye distut...
Cómo se genera:  Creación deb (app/lib Python) <ul><ul><li>Partimos de fuentes con app/lib Python  </li></ul></ul><ul><ul>...
Empaquetando python:  setup.py (distutils) <ul><ul><li>Buena práctica </li></ul></ul><ul><ul><li>Solución estándard (y rec...
Empaquetando python:  setup.py (distutils) I <ul><li>#!/usr/bin/env python </li></ul><ul><li>from setuptools import * </li...
Empaquetando python:  setup.py (distutils) II <ul><li>distutils.core.setup( </li></ul><ul><li>     name='argparse', </li><...
Empaquetando python:  setup.py (distutils) III <ul><li>#!/usr/bin/env python </li></ul><ul><li>from distutils.core import ...
Empaquetando python:  setup.py (distutils) IV <ul><li>#!/usr/bin/env python </li></ul><ul><li>from distutils.core import s...
Empaquetando python:  Debianización inicial I <ul><ul><li>Se crea el directorio debian: </li></ul></ul><ul><ul><ul><li>Usa...
Empaquetando python:   Debianización inicial II <ul><li>dh_make [options]   -c, --copyright </li></ul><ul><li>   -e, --ema...
Empaquetando python:  Debianización inicial III <ul><li>Opciones típicas: </li></ul><ul><ul><li>dh_make -r -f ../<programa...
Empaquetando python:  Debianización inicial IV <ul><li>El directorio debian creado con dh_make contiene los siguientes fic...
Empaquetando python:  Fichero Control I <ul><li>Source: python-amqplib </li></ul><ul><li>Section: bif </li></ul><ul><li>Pr...
Empaquetando python:  Fichero Control II <ul><li>Source: gnupginterface </li></ul><ul><li>Section: python </li></ul><ul><l...
Empaquetando python:  Fichero Changelog I <ul><ul><li>Contiene versiones y descripción de los cambios. </li></ul></ul><ul>...
Empaquetando python:  Fichero Rules I <ul><ul><li>aka &quot; La madre del cordero &quot; </li></ul></ul><ul><ul><li>Se sue...
Empaquetando python:  Fichero Rules II <ul><ul><li>Makefile que dirige la construcción del paquete deb </li></ul></ul><ul>...
Empaquetando python:  Fichero Rules III  python-support /dh_pysupport <ul><ul><li>${python:Depends} </li></ul></ul><ul><ul...
Empaquetando python:  Fichero Rules (dh I) <ul><li>Existen gran cantidad de &quot;helpers&quot; para realizar cada una de ...
Empaquetando python:  Fichero Rules (dh II) <ul><li>#!/usr/bin/make -f </li></ul><ul><li>export DH_PYCENTRAL=include-links...
Empaquetando python:  Fichero Rules (dh III) <ul><li>#!/usr/bin/make -f </li></ul><ul><li>configure: configure-stamp </li>...
Empaquetando python:  Fichero Rules (cdbs I) <ul><li>Estilo CDBS : </li></ul><ul><ul><li>Intenta simplificar el debian/rul...
Empaquetando python:  Fichero Rules (cdbs II) <ul><li>#!/usr/bin/make -f </li></ul><ul><li>DEB_PYTHON_SYSTEM = pysupport <...
Empaquetando python:  Fichero Rules (cdbs III) <ul><li>#!/usr/bin/make -f </li></ul><ul><li># -*- mode: makefile; coding: ...
Empaquetando python:  Fichero Rules (cdbs IV) <ul><li>#!/usr/bin/make -f include /usr/share/cdbs/1/rules/debhelper.mk incl...
Empaquetando python:  Otros ficheros en debian/ <ul><ul><li>  maintainer scripts: </li></ul></ul><ul><ul><ul><li>prerm </l...
A construir...
Construcción I <ul><li>Recordemos: </li></ul><ul><li>  </li></ul><ul><ul><li>Directorio de fuentes (con setup.py) </li></u...
Construcción II <ul><li>cd dir-paquete </li></ul><ul><li>dpkg-buildpackage -us -uc -rfakeroot -sa </li></ul><ul><li>  </li...
Construcción III <ul><li>Si queremos probar alguno de los targets del debian/rules podemos ejecutar: </li></ul><ul><li>  <...
Conclusiones:  <ul><ul><li>En GNU/linux, empaquetar es lo normal </li></ul></ul><ul><ul><li>Usa distutils / setup .py tu v...
Ejemplos y Demos
Referencias I: Empaquetamiento Deb Python <ul><li>Debian Python Policy </li></ul><ul><li>http://www.debian.org/doc/packagi...
Referencias II:  Generales Empaquetamiento Deb <ul><li>Guía del nuevo desarrollador de Debian  </li></ul><ul><li>http://ww...
Game Over!!! <ul><li>Hasta aquí hemos llegado </li></ul><ul><li>¿Preguntas? </li></ul><ul><li>¿Sugerencias? </li></ul><ul>...
Upcoming SlideShare
Loading in …5
×

Python Madrid empaquetamiento deb aplicaciones Python

2,852 views
2,646 views

Published on

Python Empaquetamiento Deb I
Python Madrid
14/4/2011

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,852
On SlideShare
0
From Embeds
0
Number of Embeds
318
Actions
Shares
0
Downloads
28
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Python Madrid empaquetamiento deb aplicaciones Python

  1. 1.   Python  Empaquetamiento Deb I Python Madrid 14/4/2011
  2. 2. Quién...   [email_address] [email_address]     http://www.eferro.net eferro DrTrucho
  3. 3. Disclaimer online de contenido abierto, es decir, &quot;no me responsabilizo del contenido&quot; voluntaria de personas y grupos &quot;lo que comento aquí es mi experiencia&quot; que desarrollan conjuntamente una fuente del conocimiento humano. &quot;debian/rules&quot; Sus términos de uso permiten a cualquier persona navegador web, modificar &quot;Soy notavo en paquetes deb&quot; el contenido o páginas, por favor tenga presente que la información que encuentre  &quot;Soy novato en conferencias&quot; no  ha sido expertos profesionales que conozcan los temas &quot;Se aceptan sugerencias de mejora&quot; de las diferentes materias necesaria para proporcionar aquí y ahora &quot;Ni de lejos una información completa, precisa y fiable&quot; .
  4. 4.   Manos a la obra...
  5. 5. Indice... <ul><ul><li>Introducción </li></ul></ul><ul><ul><li>Qué es (un paquete deb) </li></ul></ul><ul><ul><li>Cómo se genera (un paquete deb) </li></ul></ul><ul><ul><li>Empaquetando Python </li></ul></ul><ul><ul><ul><li>distutils/setup.py </li></ul></ul></ul><ul><ul><ul><li>Directorio debian </li></ul></ul></ul><ul><ul><ul><li>rules (CDBS/Debhelper) </li></ul></ul></ul><ul><ul><li>A construir </li></ul></ul><ul><ul><li>Conclusiones </li></ul></ul><ul><ul><li>Ejemplos y demos </li></ul></ul><ul><ul><li>Referencias </li></ul></ul>
  6. 6. Introducción:  Contexto... <ul><ul><li>Sistemas GNU/Linux </li></ul></ul><ul><ul><li>Distros basadas en paquetes DEB (Debian, Ubuntu, etc) </li></ul></ul><ul><ul><li>Distribución / Deploy librerías y módulos creados en Python </li></ul></ul>
  7. 7. Introducción:  Por qué empaquetar... <ul><ul><li>Control de dependencias </li></ul></ul><ul><ul><li>Inventario de software </li></ul></ul><ul><ul><li>Gestión común soft de base (distro) y soft propio </li></ul></ul><ul><ul><li>Instalador estandarizado </li></ul></ul><ul><ul><li>Sistema de repositorios </li></ul></ul><ul><ul><li>Utilidades (buscadores, índices, etc...) </li></ul></ul><ul><ul><li>Somos gente con estilo :) </li></ul></ul>
  8. 8. Introducción:  Qué empaquetar... <ul><ul><li>Software de base / infraestructura </li></ul></ul><ul><ul><li>Versiones diferentes de software disponible en la distro usada (backports, nuevas versiones, etc...) </li></ul></ul><ul><ul><li>Software de aplicación y de librerías </li></ul></ul>
  9. 9. Introducción:  Cuánto cuesta empaquetar... <ul><ul><li>Si es python y usa distutils (setup.py), casi nada </li></ul></ul><ul><ul><li>Hacerlo para un paquete oficial de distro, bastante (cumplir la debian/policy) </li></ul></ul><ul><ul><li>Hacerlo para nuestros paquetes, no tanto  </li></ul></ul>
  10. 10. Paquetes Deb Aplicaciones Python Manos a la obra
  11. 11. Qué es:  Anatomía de un Deb I <ul><li>Un fichero deb simplemente son tres ficheros unidos en uno sólo mediante &quot;ar&quot;. </li></ul><ul><li>  </li></ul><ul><li>Ejemplo: </li></ul><ul><li>ar -xv <paquete>.deb </li></ul><ul><li>x - debian-binary x - control.tar.gz x - data.tar.gz </li></ul><ul><li>  </li></ul><ul><li>  </li></ul>
  12. 12. Qué es:  Anatomía de un Deb II <ul><ul><li>debian-binary Version del paquete deb (actualmente 2.0) </li></ul></ul><ul><ul><li>control.tar.gz </li></ul></ul><ul><ul><ul><li>./config   </li></ul></ul></ul><ul><ul><ul><li>./preinst </li></ul></ul></ul><ul><ul><ul><li>./prerm </li></ul></ul></ul><ul><ul><ul><li>./conffiles </li></ul></ul></ul><ul><ul><ul><li>./md5sums </li></ul></ul></ul><ul><ul><ul><li>./control </li></ul></ul></ul><ul><ul><ul><li>.... </li></ul></ul></ul><ul><ul><li>data.tar.gz Ficheros incluidos en el paquete (binarios, librerias, etc...) </li></ul></ul><ul><li>  </li></ul>
  13. 13. Cómo se genera:  Herramientas I <ul><li>Herramientas para contruir paquetes </li></ul><ul><ul><li>python (incluye distutils) </li></ul></ul><ul><ul><li>dpkg-dev / dpkg-buildpackage </li></ul></ul><ul><ul><li>debhelper helper programs for debian/rules </li></ul></ul><ul><ul><li>fakeroot Gives a fake root environment </li></ul></ul><ul><ul><li>cdbs common build system for Debian packages </li></ul></ul><ul><ul><li>dh-make  tool that converts source archives into Debian package source </li></ul></ul>
  14. 14. Cómo se genera:  Creación deb (app/lib Python) <ul><ul><li>Partimos de fuentes con app/lib Python  </li></ul></ul><ul><ul><li>Verificamos/Creamos setup.py (distutils) </li></ul></ul><ul><ul><li>Realizamos la debianización inicial </li></ul></ul><ul><ul><li>Ponemos a punto: </li></ul></ul><ul><ul><ul><li>debian/rules </li></ul></ul></ul><ul><ul><ul><li>debian/control </li></ul></ul></ul><ul><ul><ul><li>debian/changelog </li></ul></ul></ul><ul><ul><ul><li>debian/... </li></ul></ul></ul><ul><ul><li>Construcción del paquete binario </li></ul></ul>
  15. 15. Empaquetando python:  setup.py (distutils) <ul><ul><li>Buena práctica </li></ul></ul><ul><ul><li>Solución estándard (y recomendación oficial de python) </li></ul></ul><ul><li>Distribuye tu aplic/lib python con estilo </li></ul><ul><li>http://docs.python.org/install/index.html </li></ul><ul><li>http://docs.python.org/distutils/index.html </li></ul>
  16. 16. Empaquetando python:  setup.py (distutils) I <ul><li>#!/usr/bin/env python </li></ul><ul><li>from setuptools import * </li></ul><ul><li>import aptdaemon </li></ul><ul><li>setup(name=&quot;aptdaemon&quot;, </li></ul><ul><li>       ... </li></ul><ul><li>       packages=[&quot;aptdaemon&quot;], </li></ul><ul><li>       scripts=[&quot;aptd&quot;, &quot;aptdcon&quot;], </li></ul><ul><li>       data_files=[(&quot;../etc/dbus-1/system.d/&quot;, </li></ul><ul><li>                   [&quot;data/org.debian.apt.conf&quot;]), </li></ul><ul><li>                     &quot;doc/org.debian.apt.transaction.7&quot;])], </li></ul><ul><li>       platforms = &quot;posix&quot;) </li></ul>
  17. 17. Empaquetando python:  setup.py (distutils) II <ul><li>distutils.core.setup( </li></ul><ul><li>     name='argparse', </li></ul><ul><li>     version=argparse.__version__, </li></ul><ul><li>     author='Steven Bethard', </li></ul><ul><li>     description='Python command-line parsing library', </li></ul><ul><li>     long_description = read_description(), </li></ul><ul><li>     license='Apache 2.0', </li></ul><ul><li>     classifiers=[ </li></ul><ul><li>         'Topic :: Software Development', </li></ul><ul><li>         ... </li></ul><ul><li>     ], </li></ul><ul><li>     py_modules=['argparse'], </li></ul><ul><li>) </li></ul>
  18. 18. Empaquetando python:  setup.py (distutils) III <ul><li>#!/usr/bin/env python </li></ul><ul><li>from distutils.core import setup </li></ul><ul><li>import glob </li></ul><ul><li>import os.path </li></ul><ul><li>setup(  </li></ul><ul><li>     name='Boscli-oss',  </li></ul><ul><li>     ... </li></ul><ul><li>     package_dir  = { '' : 'src' },  </li></ul><ul><li>     packages = ['boscli', ], </li></ul><ul><li>     scripts = ['src/bin/boscli', ], </li></ul><ul><li>     data_files = [ ( '/usr/lib/boscli/',  </li></ul><ul><li>                             glob.glob( 'src/lib/*.py')  ) ], </li></ul><ul><li>) </li></ul>
  19. 19. Empaquetando python:  setup.py (distutils) IV <ul><li>#!/usr/bin/env python </li></ul><ul><li>from distutils.core import setup </li></ul><ul><li>setup(name = &quot;amqplib&quot;, </li></ul><ul><li>       description = &quot;AMQP Client Library&quot;, </li></ul><ul><li>       version = &quot;0.6&quot;, </li></ul><ul><li>       license = &quot;LGPL&quot;, </li></ul><ul><li>       author = &quot;Barry Pederson&quot;, </li></ul><ul><li>       author_email = &quot;bp@barryp.org&quot;, </li></ul><ul><li>       url = &quot;http://barryp.org/software/py-amqplib/&quot;, </li></ul><ul><li>       packages = ['amqplib', 'amqplib.client_0_8'] </li></ul><ul><li>     ) </li></ul>
  20. 20. Empaquetando python:  Debianización inicial I <ul><ul><li>Se crea el directorio debian: </li></ul></ul><ul><ul><ul><li>Usando dh_make </li></ul></ul></ul><ul><ul><li>Se adaptan ficheros del directorio debian </li></ul></ul><ul><li>Si el código es nuestro:  </li></ul><ul><ul><li>Si usamos distutils / setup.py tenemos el 95% del trabajo hecho. </li></ul></ul>
  21. 21. Empaquetando python:   Debianización inicial II <ul><li>dh_make [options]   -c, --copyright </li></ul><ul><li>  -e, --email <address>  </li></ul><ul><li>  -f, --file <file>        </li></ul><ul><li>  -r, --createorig     </li></ul><ul><li>  -s, --single / -i, --indep / -m, --multi / ...   -b, --cdbs               </li></ul><ul><li>  -p, --packagename <name> </li></ul><ul><li>  ... </li></ul>
  22. 22. Empaquetando python:  Debianización inicial III <ul><li>Opciones típicas: </li></ul><ul><ul><li>dh_make -r -f ../<programa>.tar.gz -p <nombre>_<version> -s </li></ul></ul><ul><ul><li>dh_make -r -f ../<programa>.tar.gz -p <nombre>_<version> --cdbs </li></ul></ul>
  23. 23. Empaquetando python:  Debianización inicial IV <ul><li>El directorio debian creado con dh_make contiene los siguientes ficheros: </li></ul><ul><li>debian/ control debian/ changelog </li></ul><ul><li>debian/ rules debian/docs debian/compat debian/copyright debian/*.ex y debian/*.EX  </li></ul><ul><li>debian/README.* </li></ul>
  24. 24. Empaquetando python:  Fichero Control I <ul><li>Source: python-amqplib </li></ul><ul><li>Section: bif </li></ul><ul><li>Priority: extra </li></ul><ul><li>Build-Depends: python-support (>= 0.6), debhelper (>= 5) </li></ul><ul><li>Maintainer: Eduardo Ferro <eferro@alea-soluciones.com> </li></ul><ul><li>Package: python-amqplib </li></ul><ul><li>Architecture: all </li></ul><ul><li>Depends: ${python:Depends} </li></ul><ul><li>Provides: ${python:Provides} </li></ul><ul><li>Description: amqplib support </li></ul><ul><li>   amqplib support </li></ul><ul><li>  . </li></ul>
  25. 25. Empaquetando python:  Fichero Control II <ul><li>Source: gnupginterface </li></ul><ul><li>Section: python </li></ul><ul><li>Priority: optional </li></ul><ul><li>Maintainer: ...  </li></ul><ul><li>Build-Depends: cdbs , debhelper (>= 5.0.37.1), python, python-support </li></ul><ul><li>Package: python-gnupginterface </li></ul><ul><li>Architecture: all </li></ul><ul><li>Depends: ${python:Depends} , gnupg (>= 1.2.1) </li></ul><ul><li>Provides: ${python:Provides} </li></ul><ul><li>Description: Python interface to GnuPG (GPG) </li></ul><ul><li>  ... </li></ul>
  26. 26. Empaquetando python:  Fichero Changelog I <ul><ul><li>Contiene versiones y descripción de los cambios. </li></ul></ul><ul><ul><li>Tiene formato definido y se crean entradas con dch (devscripts) </li></ul></ul><ul><li>  </li></ul><ul><li>Formato de cada cambio: </li></ul><ul><li>[nombre] ([version]) [distro]; urgency=[nivel urg] </li></ul><ul><li>  </li></ul><ul><li>  * [descripción cambio]  -- [nombre] <[email]>  [fecha modificación] </li></ul>
  27. 27. Empaquetando python:  Fichero Rules I <ul><ul><li>aka &quot; La madre del cordero &quot; </li></ul></ul><ul><ul><li>Se suelen general con el dh_make </li></ul></ul><ul><ul><li>Se suelen hacer con dos estilos: </li></ul></ul><ul><ul><ul><li>Usando dh_* (debhelpers) </li></ul></ul></ul><ul><ul><ul><li>Usando cdbs </li></ul></ul></ul><ul><ul><li>Además para python: </li></ul></ul><ul><ul><ul><li>dh_python2 (recomendado / muy reciente) </li></ul></ul></ul><ul><ul><ul><li>python-support / dh_pysupport (+) </li></ul></ul></ul><ul><ul><ul><li>python-central / dh_pycentral </li></ul></ul></ul>
  28. 28. Empaquetando python:  Fichero Rules II <ul><ul><li>Makefile que dirige la construcción del paquete deb </li></ul></ul><ul><ul><li>Tiene diversos objetivos: </li></ul></ul><ul><ul><ul><li>clean </li></ul></ul></ul><ul><ul><ul><li>binary </li></ul></ul></ul><ul><ul><ul><li>binary-arch </li></ul></ul></ul><ul><ul><ul><li>binary-indep </li></ul></ul></ul><ul><ul><ul><li>build </li></ul></ul></ul>
  29. 29. Empaquetando python:  Fichero Rules III  python-support /dh_pysupport <ul><ul><li>${python:Depends} </li></ul></ul><ul><ul><li>${python:Versions} </li></ul></ul><ul><ul><li>${python:Provides} </li></ul></ul><ul><ul><li>Usa debian/pyversion Ej: 2.5- 2.5,2.6 </li></ul></ul><ul><ul><li>Crea scripts compilación y registro módulos </li></ul></ul>
  30. 30. Empaquetando python:  Fichero Rules (dh I) <ul><li>Existen gran cantidad de &quot;helpers&quot; para realizar cada una de las tareas necesarias en el rules.... </li></ul><ul><li>  </li></ul><ul><li>dh_builddeb, dh_clean, dh_compress, dh_fixperms, dh_gencontrol, dh_install,dh_installchangelogs, dh_installcron, dh_installdeb, dh_installdebconf, dh_installdirs, dh_installdocs, dh_installemacsen, dh_installexamples, dh_installinfo ... </li></ul>
  31. 31. Empaquetando python:  Fichero Rules (dh II) <ul><li>#!/usr/bin/make -f </li></ul><ul><li>export DH_PYCENTRAL=include-links </li></ul><ul><li>%: </li></ul><ul><li>dh --with=python-central $@ </li></ul><ul><li>override_dh_auto_clean: </li></ul><ul><li>dh_auto_clean </li></ul><ul><li>rm -rf build *.egg-info po/aptdaemon.pot </li></ul>
  32. 32. Empaquetando python:  Fichero Rules (dh III) <ul><li>#!/usr/bin/make -f </li></ul><ul><li>configure: configure-stamp </li></ul><ul><li>configure-stamp: </li></ul><ul><li>dh_testdir </li></ul><ul><li>touch configure-stamp </li></ul><ul><li>build: build-stamp </li></ul><ul><li>python setup.py build </li></ul><ul><li>... </li></ul><ul><li>install: build </li></ul><ul><li>dh_testdir </li></ul><ul><li>dh_clean -k  </li></ul><ul><li>python setup.py install --root=$(CURDIR)/debian/python-amqplib </li></ul><ul><li>... </li></ul>
  33. 33. Empaquetando python:  Fichero Rules (cdbs I) <ul><li>Estilo CDBS : </li></ul><ul><ul><li>Intenta simplificar el debian/rules </li></ul></ul><ul><ul><li>Puede gestionar sin esfuerzo los casos típicos más comunes </li></ul></ul><ul><ul><li>Intenta eliminar tareas repetitivas realizadas en los debian/rules </li></ul></ul><ul><ul><li>Usa clases (extensibles), que son como partes de Makefile especializadas </li></ul></ul><ul><ul><li>Estas clases están bien probadas </li></ul></ul>
  34. 34. Empaquetando python:  Fichero Rules (cdbs II) <ul><li>#!/usr/bin/make -f </li></ul><ul><li>DEB_PYTHON_SYSTEM = pysupport </li></ul><ul><li>DEB_PYTHON_COMPILE_VERSION = $(shell pyversions -vd 2>/dev/null) </li></ul><ul><li>include /usr/share/cdbs/1/rules/debhelper.mk </li></ul><ul><li>include /usr/share/cdbs/1/class/python-distutils.mk </li></ul><ul><li>include /usr/share/cdbs/1/rules/utils.mk </li></ul>
  35. 35. Empaquetando python:  Fichero Rules (cdbs III) <ul><li>#!/usr/bin/make -f </li></ul><ul><li># -*- mode: makefile; coding: utf-8 -*- </li></ul><ul><li>DEB_PYTHON_SYSTEM=pysupport </li></ul><ul><li>include /usr/share/cdbs/1/rules/debhelper.mk </li></ul><ul><li>include /usr/share/cdbs/1/rules/simple-patchsys.mk </li></ul><ul><li>include /usr/share/cdbs/1/class/python-distutils.mk </li></ul><ul><li>build/python-gnupginterface:: </li></ul><ul><li>pydoc -w ./GnuPGInterface.py </li></ul><ul><li>clean:: </li></ul><ul><li>-rm *.pyc *.html </li></ul>
  36. 36. Empaquetando python:  Fichero Rules (cdbs IV) <ul><li>#!/usr/bin/make -f include /usr/share/cdbs/1/rules/debhelper.mk include /usr/share/cdbs/1/class/makefile.mk # Add here any variable or target overrides you need. DEB_MAKE_CLEAN_TARGET   = clean DEB_MAKE_BUILD_TARGET   = all DEB_MAKE_INSTALL_TARGET = install DESTDIR=$(CURDIR)/debian/lsm/ # no check for this software DEB_MAKE_CHECK_TARGET   = </li></ul>
  37. 37. Empaquetando python:  Otros ficheros en debian/ <ul><ul><li>  maintainer scripts: </li></ul></ul><ul><ul><ul><li>prerm </li></ul></ul></ul><ul><ul><ul><li>postrm </li></ul></ul></ul><ul><ul><ul><li>preinst </li></ul></ul></ul><ul><ul><ul><li>postinst </li></ul></ul></ul><ul><ul><li><programa>.1 (manpage) </li></ul></ul><ul><ul><li><programa>.cron.* </li></ul></ul><ul><ul><li><programa>.init.* </li></ul></ul><ul><ul><li>menu (entrada para menus gráficos)  </li></ul></ul><ul><ul><li>compat </li></ul></ul><ul><ul><li>... </li></ul></ul>
  38. 38. A construir...
  39. 39. Construcción I <ul><li>Recordemos: </li></ul><ul><li>  </li></ul><ul><ul><li>Directorio de fuentes (con setup.py) </li></ul></ul><ul><ul><li>Directorio debian </li></ul></ul><ul><ul><ul><li>debian/control </li></ul></ul></ul><ul><ul><ul><li>debian/rules </li></ul></ul></ul><ul><ul><ul><li>debian/changelog </li></ul></ul></ul><ul><li>  En el directorio debian suele haber muchos más ficheros, pero los indicados son los mínimos... </li></ul>
  40. 40. Construcción II <ul><li>cd dir-paquete </li></ul><ul><li>dpkg-buildpackage -us -uc -rfakeroot -sa </li></ul><ul><li>  </li></ul><ul><li>-us, -uc es para indicar que no queremos firmar el paquete ni los fuentes. </li></ul><ul><li>-rfakeroot es para que se construya simulando que somos root (usará un directorio interno) </li></ul><ul><li>-sa para que genere los ficheros de paquete fuente </li></ul>
  41. 41. Construcción III <ul><li>Si queremos probar alguno de los targets del debian/rules podemos ejecutar: </li></ul><ul><li>  </li></ul><ul><li>fakeroot debian/rules binary </li></ul><ul><li>fakeroot debian/rules build </li></ul><ul><li>fakeroot debian/rules clean </li></ul>
  42. 42. Conclusiones:  <ul><ul><li>En GNU/linux, empaquetar es lo normal </li></ul></ul><ul><ul><li>Usa distutils / setup .py tu vida será mejor </li></ul></ul><ul><ul><li>Debs oficiales requiere esfuerzo </li></ul></ul><ul><ul><li>Debs para consumo propio muy fácil </li></ul></ul>
  43. 43. Ejemplos y Demos
  44. 44. Referencias I: Empaquetamiento Deb Python <ul><li>Debian Python Policy </li></ul><ul><li>http://www.debian.org/doc/packaging-manuals/python-policy/ </li></ul><ul><li>Debian Python FAQ </li></ul><ul><li>http://wiki.debian.org/Python/FAQ </li></ul><ul><li>Ubuntu Python Packaging Guide </li></ul><ul><li>https://wiki.ubuntu.com/PackagingGuide/Python </li></ul>
  45. 45. Referencias II:  Generales Empaquetamiento Deb <ul><li>Guía del nuevo desarrollador de Debian  </li></ul><ul><li>http://www.debian.org/doc/manuals/maint-guide/index.es.html </li></ul><ul><li>Debian Policy  </li></ul><ul><li>http://www.debian.org/doc/debian-policy/index.html </li></ul><ul><li>Ubuntu Packaging Guide </li></ul><ul><li>https://wiki.ubuntu.com/PackagingGuide </li></ul><ul><li>  </li></ul><ul><li>Manuales del DDP para desarrolladores </li></ul><ul><li>http://www.debian.org/doc/devel-manuals.es.html </li></ul><ul><li>CDBS Documentation </li></ul><ul><li>http://cdbs-doc.duckcorp.org/en/cdbs-doc.xhtml </li></ul>
  46. 46. Game Over!!! <ul><li>Hasta aquí hemos llegado </li></ul><ul><li>¿Preguntas? </li></ul><ul><li>¿Sugerencias? </li></ul><ul><li>¿Quejas? </li></ul><ul><li>¿Insultos? </li></ul><ul><li>... </li></ul><ul><li>Eduardo Ferro </li></ul><ul><li>[email_address] </li></ul>

×