python madrid empaquetamiento deb aplicaciones python

46
Python Empaquetamiento Deb I Python Madrid 14/4/2011

Upload: eduardo-ferro-aldama

Post on 03-Jul-2015

2.553 views

Category:

Technology


6 download

DESCRIPTION

Python Empaquetamiento Deb I Python Madrid 14/4/2011

TRANSCRIPT

Page 1: Python Madrid empaquetamiento deb aplicaciones Python

 Python Empaquetamiento Deb I

Python Madrid14/4/2011

Page 2: Python Madrid empaquetamiento deb aplicaciones Python

Quién... 

[email protected]@alea-soluciones.com    http://www.eferro.net

eferroDrTrucho

Page 3: Python Madrid empaquetamiento deb aplicaciones Python

Disclaimer online de contenido abierto, es decir, "no me responsabilizo del contenido" voluntaria de personas y grupos "lo que comento aquí

es mi experiencia" que desarrollan conjuntamente una fuente del conocimiento humano."debian/rules" Sus términos de uso permiten a cualquier persona navegador web, modificar "Soy notavo en paquetes deb" el contenido o páginas, por favor tenga presente que la información que encuentre  "Soy novato en conferencias" no  ha sido expertos profesionales que conozcan los temas "Se aceptan sugerencias de

mejora" de las diferentes materias necesaria para proporcionar aquí y ahora "Ni de lejos una información completa, precisa y fiable".

Page 4: Python Madrid empaquetamiento deb aplicaciones Python

 Manos a la obra...

Page 5: Python Madrid empaquetamiento deb aplicaciones Python

Indice...

• Introducción• Qué es (un paquete deb)• Cómo se genera (un paquete deb)• Empaquetando Python

odistutils/setup.pyoDirectorio debiano rules (CDBS/Debhelper)

• A construir• Conclusiones• Ejemplos y demos• Referencias

Page 6: Python Madrid empaquetamiento deb aplicaciones Python

Introducción: Contexto...

• Sistemas GNU/Linux• Distros basadas en paquetes DEB (Debian, Ubuntu, etc)• Distribución / Deploy librerías y módulos creados en Python

Page 7: Python Madrid empaquetamiento deb aplicaciones Python

Introducción: Por qué empaquetar...

• Control de dependencias• Inventario de software• Gestión común soft de base (distro) y soft propio• Instalador estandarizado• Sistema de repositorios• Utilidades (buscadores, índices, etc...)• Somos gente con estilo :)

Page 8: Python Madrid empaquetamiento deb aplicaciones Python

Introducción: Qué empaquetar...

• Software de base / infraestructura• Versiones diferentes de software disponible en la distro usada (backports, nuevas versiones, etc...)• Software de aplicación y de librerías

Page 9: Python Madrid empaquetamiento deb aplicaciones Python

Introducción: Cuánto cuesta empaquetar...

• Si es python y usa distutils (setup.py), casi nada• Hacerlo para un paquete oficial de distro, bastante (cumplir la debian/policy)• Hacerlo para nuestros paquetes, no tanto 

Page 10: Python Madrid empaquetamiento deb aplicaciones Python

Paquetes DebAplicaciones PythonManos a la obra

Page 11: Python Madrid empaquetamiento deb aplicaciones Python

Qué es: Anatomía de un Deb I

Un fichero deb simplemente son tres ficheros unidos en uno sólo mediante "ar". Ejemplo: 

ar -xv <paquete>.deb x - debian-binaryx - control.tar.gzx - data.tar.gz  

Page 12: Python Madrid empaquetamiento deb aplicaciones Python

Qué es: Anatomía de un Deb II

• debian-binary Version del paquete deb (actualmente 2.0)• control.tar.gz

o ./config  o ./preinsto ./prermo ./conffileso ./md5sumso ./controlo ....

• data.tar.gz Ficheros incluidos en el paquete (binarios, librerias, etc...)

 

Page 13: Python Madrid empaquetamiento deb aplicaciones Python

Cómo se genera: Herramientas I

Herramientas para contruir paquetes • python (incluye distutils)• dpkg-dev / dpkg-buildpackage• debhelper helper programs for debian/rules• fakeroot Gives a fake root environment• cdbs common build system for Debian packages• dh-make tool that converts source archives into Debian package source

Page 14: Python Madrid empaquetamiento deb aplicaciones Python

Cómo se genera: Creación deb (app/lib Python)

• Partimos de fuentes con app/lib Python • Verificamos/Creamos setup.py (distutils)• Realizamos la debianización inicial• Ponemos a punto:

odebian/rulesodebian/controlodebian/changelogodebian/...

• Construcción del paquete binario

Page 15: Python Madrid empaquetamiento deb aplicaciones Python

Empaquetando python: setup.py (distutils)

• Buena práctica• Solución estándard (y recomendación oficial de python)

Distribuye tu aplic/lib python con estilohttp://docs.python.org/install/index.htmlhttp://docs.python.org/distutils/index.html

Page 16: Python Madrid empaquetamiento deb aplicaciones Python

Empaquetando python: setup.py (distutils) I#!/usr/bin/env pythonfrom setuptools import *import aptdaemonsetup(name="aptdaemon", ... packages=["aptdaemon"], scripts=["aptd", "aptdcon"], data_files=[("../etc/dbus-1/system.d/", ["data/org.debian.apt.conf"]), "doc/org.debian.apt.transaction.7"])], platforms = "posix")

Page 17: Python Madrid empaquetamiento deb aplicaciones Python

Empaquetando python: setup.py (distutils) IIdistutils.core.setup( name='argparse', version=argparse.__version__, author='Steven Bethard', description='Python command-line parsing library', long_description = read_description(), license='Apache 2.0', classifiers=[ 'Topic :: Software Development', ... ], py_modules=['argparse'],)

Page 18: Python Madrid empaquetamiento deb aplicaciones Python

Empaquetando python: setup.py (distutils) III#!/usr/bin/env pythonfrom distutils.core import setupimport globimport os.pathsetup( name='Boscli-oss', ... package_dir = { '' : 'src' }, packages = ['boscli', ], scripts = ['src/bin/boscli', ], data_files = [ ( '/usr/lib/boscli/', glob.glob( 'src/lib/*.py') ) ],)

Page 19: Python Madrid empaquetamiento deb aplicaciones Python

Empaquetando python: setup.py (distutils) IV#!/usr/bin/env pythonfrom distutils.core import setup

setup(name = "amqplib", description = "AMQP Client Library", version = "0.6", license = "LGPL", author = "Barry Pederson", author_email = "[email protected]", url = "http://barryp.org/software/py-amqplib/", packages = ['amqplib', 'amqplib.client_0_8'] )

Page 20: Python Madrid empaquetamiento deb aplicaciones Python

Empaquetando python: Debianización inicial I

• Se crea el directorio debian:oUsando dh_make

• Se adaptan ficheros del directorio debian

Si el código es nuestro: • Si usamos distutils / setup.py tenemos el 

95% del trabajo hecho.

Page 21: Python Madrid empaquetamiento deb aplicaciones Python

Empaquetando python:  Debianización inicial II

dh_make [options]  -c, --copyright  -e, --email <address>   -f, --file <file>         -r, --createorig      -s, --single / -i, --indep / -m, --multi / ...  -b, --cdbs                -p, --packagename <name>   ...

Page 22: Python Madrid empaquetamiento deb aplicaciones Python

Empaquetando python: Debianización inicial III

Opciones típicas:• dh_make -r -f ../<programa>.tar.gz -p <nombre>_<version> -s• dh_make -r -f ../<programa>.tar.gz -p <nombre>_<version> --cdbs

Page 23: Python Madrid empaquetamiento deb aplicaciones Python

Empaquetando python: Debianización inicial IV

El directorio debian creado con dh_make contiene los siguientes ficheros: debian/control debian/changelog debian/rulesdebian/docsdebian/compatdebian/copyrightdebian/*.ex y debian/*.EX debian/README.*

Page 24: Python Madrid empaquetamiento deb aplicaciones Python

Empaquetando python: Fichero Control ISource: python-amqplibSection: bifPriority: extraBuild-Depends: python-support (>= 0.6), debhelper(>= 5)Maintainer: Eduardo Ferro <[email protected]>

Package: python-amqplibArchitecture: allDepends: ${python:Depends}Provides: ${python:Provides}Description: amqplib support amqplib support .

Page 25: Python Madrid empaquetamiento deb aplicaciones Python

Empaquetando python: Fichero Control IISource: gnupginterfaceSection: pythonPriority: optionalMaintainer: ... Build-Depends: cdbs, debhelper (>= 5.0.37.1), python, python-support

Package: python-gnupginterfaceArchitecture: allDepends: ${python:Depends}, gnupg (>= 1.2.1)Provides: ${python:Provides}Description: Python interface to GnuPG (GPG) ...

Page 26: Python Madrid empaquetamiento deb aplicaciones Python

Empaquetando python: Fichero Changelog I

• Contiene versiones y descripción de los cambios.• Tiene formato definido y se crean entradas con dch (devscripts)

 Formato de cada cambio: 

[nombre] ([version]) [distro]; urgency=[nivel urg]  * [descripción cambio]

 -- [nombre] <[email]>  [fecha modificación]

Page 27: Python Madrid empaquetamiento deb aplicaciones Python

Empaquetando python: Fichero Rules I

• aka "La madre del cordero"• Se suelen general con el dh_make• Se suelen hacer con dos estilos:

oUsando dh_* (debhelpers)oUsando cdbs

• Además para python:o dh_python2 (recomendado / muy reciente)o python-support / dh_pysupport (+)o python-central / dh_pycentral

Page 28: Python Madrid empaquetamiento deb aplicaciones Python

Empaquetando python: Fichero Rules II

• Makefile que dirige la construcción del paquete deb• Tiene diversos objetivos:

o cleanobinaryobinary-archobinary-indepobuild

Page 29: Python Madrid empaquetamiento deb aplicaciones Python

Empaquetando python: Fichero Rules III python-support /dh_pysupport

• ${python:Depends}• ${python:Versions}• ${python:Provides}• Usa debian/pyversion Ej: 2.5- 2.5,2.6• Crea scripts compilación y registro módulos

Page 30: Python Madrid empaquetamiento deb aplicaciones Python

Empaquetando python: Fichero Rules (dh I)

Existen gran cantidad de "helpers" para realizar cada una de las tareas necesarias en el rules.... 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 ... 

Page 31: Python Madrid empaquetamiento deb aplicaciones Python

Empaquetando python: Fichero Rules (dh II)#!/usr/bin/make -f

export DH_PYCENTRAL=include-links

%:dh --with=python-central $@

override_dh_auto_clean:dh_auto_cleanrm -rf build *.egg-info po/aptdaemon.pot

Page 32: Python Madrid empaquetamiento deb aplicaciones Python

Empaquetando python: Fichero Rules (dh III)#!/usr/bin/make -fconfigure: configure-stampconfigure-stamp:dh_testdirtouch configure-stampbuild: build-stamppython setup.py build...install: builddh_testdirdh_clean -k python setup.py install --root=$(CURDIR)/debian/python-amqplib...

Page 33: Python Madrid empaquetamiento deb aplicaciones Python

Empaquetando python: Fichero Rules (cdbs I)Estilo CDBS :• Intenta simplificar el debian/rules• Puede gestionar sin esfuerzo los casos típicos más comunes• Intenta eliminar tareas repetitivas realizadas en los debian/rules• Usa clases (extensibles), que son como partes de Makefile especializadas• Estas clases están bien probadas

Page 34: Python Madrid empaquetamiento deb aplicaciones Python

Empaquetando python: Fichero Rules (cdbs II)#!/usr/bin/make -fDEB_PYTHON_SYSTEM = pysupportDEB_PYTHON_COMPILE_VERSION = $(shell pyversions -vd 2>/dev/null)

include /usr/share/cdbs/1/rules/debhelper.mkinclude /usr/share/cdbs/1/class/python-distutils.mkinclude /usr/share/cdbs/1/rules/utils.mk

Page 35: Python Madrid empaquetamiento deb aplicaciones Python

Empaquetando python: Fichero Rules (cdbs III)#!/usr/bin/make -f# -*- mode: makefile; coding: utf-8 -*-

DEB_PYTHON_SYSTEM=pysupport

include /usr/share/cdbs/1/rules/debhelper.mkinclude /usr/share/cdbs/1/rules/simple-patchsys.mkinclude /usr/share/cdbs/1/class/python-distutils.mk

build/python-gnupginterface::pydoc -w ./GnuPGInterface.py

clean::-rm *.pyc *.html

Page 36: Python Madrid empaquetamiento deb aplicaciones Python

Empaquetando python: Fichero Rules (cdbs IV)#!/usr/bin/make -f

include /usr/share/cdbs/1/rules/debhelper.mkinclude /usr/share/cdbs/1/class/makefile.mk

# Add here any variable or target overrides you need.DEB_MAKE_CLEAN_TARGET = cleanDEB_MAKE_BUILD_TARGET = allDEB_MAKE_INSTALL_TARGET = install DESTDIR=$(CURDIR)/debian/lsm/# no check for this softwareDEB_MAKE_CHECK_TARGET =

Page 37: Python Madrid empaquetamiento deb aplicaciones Python

Empaquetando python: Otros ficheros en debian/•  maintainer scripts:

oprermopostrmopreinstopostinst

• <programa>.1 (manpage)• <programa>.cron.* • <programa>.init.*• menu (entrada para menus gráficos) • compat• ... 

Page 38: Python Madrid empaquetamiento deb aplicaciones Python

A construir...

Page 39: Python Madrid empaquetamiento deb aplicaciones Python

Construcción I

Recordemos: • Directorio de fuentes (con setup.py)• Directorio debian

odebian/controlodebian/rulesodebian/changelog

 En el directorio debian suele haber muchos más ficheros, pero los indicados son los mínimos... 

Page 40: Python Madrid empaquetamiento deb aplicaciones Python

Construcción II

cd dir-paquetedpkg-buildpackage -us -uc -rfakeroot -sa -us, -uc es para indicar que no queremos firmar el paquete ni los fuentes. -rfakeroot es para que se construya simulando que somos root (usará un directorio interno)-sa para que genere los ficheros de paquete fuente

Page 41: Python Madrid empaquetamiento deb aplicaciones Python

Construcción III

Si queremos probar alguno de los targets del debian/rules podemos ejecutar: fakeroot debian/rules binaryfakeroot debian/rules build fakeroot debian/rules clean

Page 42: Python Madrid empaquetamiento deb aplicaciones Python

Conclusiones: 

• En GNU/linux, empaquetar es lo normal• Usa distutils / setup .py tu vida será mejor• Debs oficiales requiere esfuerzo• Debs para consumo propio muy fácil

Page 43: Python Madrid empaquetamiento deb aplicaciones Python

Ejemplos y Demos

Page 44: Python Madrid empaquetamiento deb aplicaciones Python

Referencias I:Empaquetamiento Deb Python

Debian Python Policyhttp://www.debian.org/doc/packaging-manuals/python-policy/

Debian Python FAQhttp://wiki.debian.org/Python/FAQ

Ubuntu Python Packaging Guidehttps://wiki.ubuntu.com/PackagingGuide/Python

Page 45: Python Madrid empaquetamiento deb aplicaciones Python

Referencias II: Generales Empaquetamiento DebGuía del nuevo desarrollador de Debian http://www.debian.org/doc/manuals/maint-guide/index.es.html

Debian Policy http://www.debian.org/doc/debian-policy/index.html

Ubuntu Packaging Guidehttps://wiki.ubuntu.com/PackagingGuide Manuales del DDP para desarrolladoreshttp://www.debian.org/doc/devel-manuals.es.html

CDBS Documentation http://cdbs-doc.duckcorp.org/en/cdbs-doc.xhtml

Page 46: Python Madrid empaquetamiento deb aplicaciones Python

Game Over!!!

Hasta aquí hemos llegado¿Preguntas?¿Sugerencias?¿Quejas?¿Insultos?...

Eduardo [email protected]