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 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" .
  Manos a la obra...
Indice... Introducción Qué es (un paquete deb) Cómo se genera (un paquete deb) Empaquetando Python distutils/setup.py Directorio debian rules (CDBS/Debhelper) A construir Conclusiones Ejemplos y demos Referencias
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
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 :)
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
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 
Paquetes Deb Aplicaciones Python Manos a la obra
Qué es:  Anatomía de un Deb I Un fichero deb simplemente son tres ficheros unidos en uno sólo mediante &quot;ar&quot;.   Ejemplo:  ar -xv <paquete>.deb  x - debian-binary x - control.tar.gz x - data.tar.gz    
Qué es:  Anatomía de un Deb II debian-binary  Version del paquete deb (actualmente 2.0) control.tar.gz ./config   ./preinst ./prerm ./conffiles ./md5sums ./control .... data.tar.gz  Ficheros incluidos en el paquete (binarios, librerias, etc...)  
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
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: debian/rules debian/control debian/changelog debian/... Construcción del paquete binario
Empaquetando python:  setup.py (distutils) Buena práctica Solución estándard (y recomendación oficial de python) Distribuye tu aplic/lib python con estilo http://docs.python.org/install/index.html http://docs.python.org/distutils/index.html
Empaquetando python:  setup.py (distutils) I #!/usr/bin/env python from setuptools import * import aptdaemon setup(name=&quot;aptdaemon&quot;,        ...        packages=[&quot;aptdaemon&quot;],        scripts=[&quot;aptd&quot;, &quot;aptdcon&quot;],        data_files=[(&quot;../etc/dbus-1/system.d/&quot;,                     [&quot;data/org.debian.apt.conf&quot;]),                      &quot;doc/org.debian.apt.transaction.7&quot;])],        platforms = &quot;posix&quot;)
Empaquetando python:  setup.py (distutils) II distutils.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'], )
Empaquetando python:  setup.py (distutils) III #!/usr/bin/env python from distutils.core import setup import glob import os.path setup(       name='Boscli-oss',       ...      package_dir  = { '' : 'src' },       packages = ['boscli', ],      scripts = ['src/bin/boscli', ],      data_files = [ ( '/usr/lib/boscli/',                               glob.glob( 'src/lib/*.py')  ) ], )
Empaquetando python:  setup.py (distutils) IV #!/usr/bin/env python from distutils.core import setup setup(name = &quot;amqplib&quot;,        description = &quot;AMQP Client Library&quot;,        version = &quot;0.6&quot;,        license = &quot;LGPL&quot;,        author = &quot;Barry Pederson&quot;,        author_email = &quot;bp@barryp.org&quot;,        url = &quot;http://barryp.org/software/py-amqplib/&quot;,        packages = ['amqplib', 'amqplib.client_0_8']       )
Empaquetando python:  Debianización inicial I Se crea el directorio debian: Usando 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.
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>     ...
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
Empaquetando python:  Debianización inicial IV El directorio debian creado con dh_make contiene los siguientes ficheros:  debian/ control   debian/ changelog   debian/ rules debian/docs debian/compat debian/copyright debian/*.ex y debian/*.EX  debian/README.*
Empaquetando python:  Fichero Control I Source: python-amqplib Section: bif Priority: extra Build-Depends:  python-support  (>= 0.6),  debhelper (>= 5) Maintainer: Eduardo Ferro <eferro@alea-soluciones.com> Package: python-amqplib Architecture: all Depends:  ${python:Depends} Provides:  ${python:Provides} Description: amqplib support    amqplib support   .
Empaquetando python:  Fichero Control II Source: gnupginterface Section: python Priority: optional Maintainer: ...  Build-Depends:  cdbs ,  debhelper  (>= 5.0.37.1),  python, python-support Package: python-gnupginterface Architecture: all Depends:  ${python:Depends} , gnupg (>= 1.2.1) Provides:  ${python:Provides} Description: Python interface to GnuPG (GPG)   ...
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]
Empaquetando python:  Fichero Rules I aka &quot; La madre del cordero &quot; Se suelen general con el dh_make Se suelen hacer con dos estilos: Usando dh_* (debhelpers) Usando cdbs Además para python: dh_python2 (recomendado / muy reciente) python-support / dh_pysupport (+) python-central / dh_pycentral
Empaquetando python:  Fichero Rules II Makefile que dirige la construcción del paquete deb Tiene diversos objetivos: clean binary binary-arch binary-indep build
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
Empaquetando python:  Fichero Rules (dh I) Existen gran cantidad de &quot;helpers&quot; 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 ...
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_clean rm -rf build *.egg-info po/aptdaemon.pot
Empaquetando python:  Fichero Rules (dh III) #!/usr/bin/make -f configure: configure-stamp configure-stamp: dh_testdir touch configure-stamp build: build-stamp python setup.py build ... install: build dh_testdir dh_clean -k  python setup.py install --root=$(CURDIR)/debian/python-amqplib ...
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
Empaquetando python:  Fichero Rules (cdbs II) #!/usr/bin/make -f DEB_PYTHON_SYSTEM = pysupport DEB_PYTHON_COMPILE_VERSION = $(shell pyversions -vd 2>/dev/null) include /usr/share/cdbs/1/rules/debhelper.mk include /usr/share/cdbs/1/class/python-distutils.mk include /usr/share/cdbs/1/rules/utils.mk
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.mk include /usr/share/cdbs/1/rules/simple-patchsys.mk include /usr/share/cdbs/1/class/python-distutils.mk build/python-gnupginterface:: pydoc -w ./GnuPGInterface.py clean:: -rm *.pyc *.html
Empaquetando python:  Fichero Rules (cdbs IV) #!/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   =
Empaquetando python:  Otros ficheros en debian/   maintainer scripts: prerm postrm preinst postinst <programa>.1 (manpage) <programa>.cron.*  <programa>.init.* menu (entrada para menus gráficos)  compat ...
A construir...
Construcción I Recordemos:   Directorio de fuentes (con setup.py) Directorio debian debian/control debian/rules debian/changelog   En el directorio debian suele haber muchos más ficheros, pero los indicados son los mínimos...
Construcción II cd dir-paquete dpkg-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
Construcción III Si queremos probar alguno de los targets del debian/rules podemos ejecutar:   fakeroot debian/rules binary fakeroot debian/rules build  fakeroot debian/rules clean
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
Ejemplos y Demos
Referencias I: Empaquetamiento Deb Python Debian Python Policy http://www.debian.org/doc/packaging-manuals/python-policy/ Debian Python FAQ http://wiki.debian.org/Python/FAQ Ubuntu Python Packaging Guide https://wiki.ubuntu.com/PackagingGuide/Python
Referencias II:  Generales Empaquetamiento Deb Guí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 Guide https://wiki.ubuntu.com/PackagingGuide   Manuales del DDP para desarrolladores http://www.debian.org/doc/devel-manuals.es.html CDBS Documentation  http://cdbs-doc.duckcorp.org/en/cdbs-doc.xhtml
Game Over!!! Hasta aquí hemos llegado ¿Preguntas? ¿Sugerencias? ¿Quejas? ¿Insultos? ... Eduardo Ferro [email_address]

Python Madrid empaquetamiento deb aplicaciones Python

  • 1.
      Python  EmpaquetamientoDeb I Python Madrid 14/4/2011
  • 2.
    Quién...   [email_address][email_address]     http://www.eferro.net eferro DrTrucho
  • 3.
    Disclaimer onlinede 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.
      Manos ala obra...
  • 5.
    Indice... Introducción Quées (un paquete deb) Cómo se genera (un paquete deb) Empaquetando Python distutils/setup.py Directorio debian rules (CDBS/Debhelper) A construir Conclusiones Ejemplos y demos Referencias
  • 6.
    Introducción:  Contexto... SistemasGNU/Linux Distros basadas en paquetes DEB (Debian, Ubuntu, etc) Distribución / Deploy librerías y módulos creados en Python
  • 7.
    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 :)
  • 8.
    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
  • 9.
    Introducción:  Cuánto cuestaempaquetar... 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 
  • 10.
    Paquetes Deb AplicacionesPython Manos a la obra
  • 11.
    Qué es:  Anatomíade un Deb I Un fichero deb simplemente son tres ficheros unidos en uno sólo mediante &quot;ar&quot;.   Ejemplo: ar -xv <paquete>.deb x - debian-binary x - control.tar.gz x - data.tar.gz    
  • 12.
    Qué es:  Anatomíade un Deb II debian-binary Version del paquete deb (actualmente 2.0) control.tar.gz ./config   ./preinst ./prerm ./conffiles ./md5sums ./control .... data.tar.gz Ficheros incluidos en el paquete (binarios, librerias, etc...)  
  • 13.
    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
  • 14.
    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: debian/rules debian/control debian/changelog debian/... Construcción del paquete binario
  • 15.
    Empaquetando python:  setup.py(distutils) Buena práctica Solución estándard (y recomendación oficial de python) Distribuye tu aplic/lib python con estilo http://docs.python.org/install/index.html http://docs.python.org/distutils/index.html
  • 16.
    Empaquetando python:  setup.py(distutils) I #!/usr/bin/env python from setuptools import * import aptdaemon setup(name=&quot;aptdaemon&quot;,        ...        packages=[&quot;aptdaemon&quot;],        scripts=[&quot;aptd&quot;, &quot;aptdcon&quot;],        data_files=[(&quot;../etc/dbus-1/system.d/&quot;,                    [&quot;data/org.debian.apt.conf&quot;]),                      &quot;doc/org.debian.apt.transaction.7&quot;])],        platforms = &quot;posix&quot;)
  • 17.
    Empaquetando python:  setup.py(distutils) II distutils.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'], )
  • 18.
    Empaquetando python:  setup.py(distutils) III #!/usr/bin/env python from distutils.core import setup import glob import os.path setup(       name='Boscli-oss',       ...      package_dir  = { '' : 'src' },       packages = ['boscli', ],      scripts = ['src/bin/boscli', ],      data_files = [ ( '/usr/lib/boscli/',                               glob.glob( 'src/lib/*.py')  ) ], )
  • 19.
    Empaquetando python:  setup.py(distutils) IV #!/usr/bin/env python from distutils.core import setup setup(name = &quot;amqplib&quot;,        description = &quot;AMQP Client Library&quot;,        version = &quot;0.6&quot;,        license = &quot;LGPL&quot;,        author = &quot;Barry Pederson&quot;,        author_email = &quot;bp@barryp.org&quot;,        url = &quot;http://barryp.org/software/py-amqplib/&quot;,        packages = ['amqplib', 'amqplib.client_0_8']      )
  • 20.
    Empaquetando python:  Debianizacióninicial I Se crea el directorio debian: Usando 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.
  • 21.
    Empaquetando python:   Debianizacióninicial 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>   ...
  • 22.
    Empaquetando python:  Debianizacióninicial 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
  • 23.
    Empaquetando python:  Debianizacióninicial IV El directorio debian creado con dh_make contiene los siguientes ficheros: debian/ control debian/ changelog debian/ rules debian/docs debian/compat debian/copyright debian/*.ex y debian/*.EX  debian/README.*
  • 24.
    Empaquetando python:  FicheroControl I Source: python-amqplib Section: bif Priority: extra Build-Depends: python-support (>= 0.6), debhelper (>= 5) Maintainer: Eduardo Ferro <eferro@alea-soluciones.com> Package: python-amqplib Architecture: all Depends: ${python:Depends} Provides: ${python:Provides} Description: amqplib support    amqplib support   .
  • 25.
    Empaquetando python:  FicheroControl II Source: gnupginterface Section: python Priority: optional Maintainer: ...  Build-Depends: cdbs , debhelper (>= 5.0.37.1), python, python-support Package: python-gnupginterface Architecture: all Depends: ${python:Depends} , gnupg (>= 1.2.1) Provides: ${python:Provides} Description: Python interface to GnuPG (GPG)   ...
  • 26.
    Empaquetando python:  FicheroChangelog 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]
  • 27.
    Empaquetando python:  FicheroRules I aka &quot; La madre del cordero &quot; Se suelen general con el dh_make Se suelen hacer con dos estilos: Usando dh_* (debhelpers) Usando cdbs Además para python: dh_python2 (recomendado / muy reciente) python-support / dh_pysupport (+) python-central / dh_pycentral
  • 28.
    Empaquetando python:  FicheroRules II Makefile que dirige la construcción del paquete deb Tiene diversos objetivos: clean binary binary-arch binary-indep build
  • 29.
    Empaquetando python:  FicheroRules 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
  • 30.
    Empaquetando python:  FicheroRules (dh I) Existen gran cantidad de &quot;helpers&quot; 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 ...
  • 31.
    Empaquetando python:  FicheroRules (dh II) #!/usr/bin/make -f export DH_PYCENTRAL=include-links %: dh --with=python-central $@ override_dh_auto_clean: dh_auto_clean rm -rf build *.egg-info po/aptdaemon.pot
  • 32.
    Empaquetando python:  FicheroRules (dh III) #!/usr/bin/make -f configure: configure-stamp configure-stamp: dh_testdir touch configure-stamp build: build-stamp python setup.py build ... install: build dh_testdir dh_clean -k  python setup.py install --root=$(CURDIR)/debian/python-amqplib ...
  • 33.
    Empaquetando python:  FicheroRules (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
  • 34.
    Empaquetando python:  FicheroRules (cdbs II) #!/usr/bin/make -f DEB_PYTHON_SYSTEM = pysupport DEB_PYTHON_COMPILE_VERSION = $(shell pyversions -vd 2>/dev/null) include /usr/share/cdbs/1/rules/debhelper.mk include /usr/share/cdbs/1/class/python-distutils.mk include /usr/share/cdbs/1/rules/utils.mk
  • 35.
    Empaquetando python:  FicheroRules (cdbs III) #!/usr/bin/make -f # -*- mode: makefile; coding: utf-8 -*- DEB_PYTHON_SYSTEM=pysupport include /usr/share/cdbs/1/rules/debhelper.mk include /usr/share/cdbs/1/rules/simple-patchsys.mk include /usr/share/cdbs/1/class/python-distutils.mk build/python-gnupginterface:: pydoc -w ./GnuPGInterface.py clean:: -rm *.pyc *.html
  • 36.
    Empaquetando python:  FicheroRules (cdbs IV) #!/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   =
  • 37.
    Empaquetando python:  Otrosficheros en debian/   maintainer scripts: prerm postrm preinst postinst <programa>.1 (manpage) <programa>.cron.* <programa>.init.* menu (entrada para menus gráficos)  compat ...
  • 38.
  • 39.
    Construcción I Recordemos:  Directorio de fuentes (con setup.py) Directorio debian debian/control debian/rules debian/changelog   En el directorio debian suele haber muchos más ficheros, pero los indicados son los mínimos...
  • 40.
    Construcción II cddir-paquete dpkg-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
  • 41.
    Construcción III Siqueremos probar alguno de los targets del debian/rules podemos ejecutar:   fakeroot debian/rules binary fakeroot debian/rules build fakeroot debian/rules clean
  • 42.
    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
  • 43.
  • 44.
    Referencias I: EmpaquetamientoDeb Python Debian Python Policy http://www.debian.org/doc/packaging-manuals/python-policy/ Debian Python FAQ http://wiki.debian.org/Python/FAQ Ubuntu Python Packaging Guide https://wiki.ubuntu.com/PackagingGuide/Python
  • 45.
    Referencias II:  GeneralesEmpaquetamiento Deb Guí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 Guide https://wiki.ubuntu.com/PackagingGuide   Manuales del DDP para desarrolladores http://www.debian.org/doc/devel-manuals.es.html CDBS Documentation http://cdbs-doc.duckcorp.org/en/cdbs-doc.xhtml
  • 46.
    Game Over!!! Hastaaquí hemos llegado ¿Preguntas? ¿Sugerencias? ¿Quejas? ¿Insultos? ... Eduardo Ferro [email_address]