Transcript
Page 1: Madrid devops empaquetamientodeb_i

 Empaquetamiento Deb I

Madrid DevOps11/1/2011

Page 2: Madrid devops empaquetamientodeb_i

Quién... 

[email protected]@alea-soluciones.com

    http://www.eferro.neteferro

DrTrucho

Page 3: Madrid devops empaquetamientodeb_i

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: Madrid devops empaquetamientodeb_i

Al turrón...

Page 5: Madrid devops empaquetamientodeb_i

Por qué empaquetar...

Control de dependenciasInventario de softwareGestión común soft de base (distro) y soft propioInstalador estandarizadoSistema de repositoriosUtilidades (buscadores, índices, etc...)Da miedo pensar en que suele pasar al no hacerlo :)

Page 6: Madrid devops empaquetamientodeb_i

Cuándo empaquetar...

Siempre que sea posibleExcepto que exista un muy buen motivo para no hacerlo... pero no se me ocurre ninguno

Page 7: Madrid devops empaquetamientodeb_i

Qué empaquetar...

Software de base / infraestructuraVersiones diferentes de software disponible en la distro usada (backports, nuevas versiones, etc...)Software de aplicación

Page 8: Madrid devops empaquetamientodeb_i

Qué NO empaquetar...

Configuraciones? (depende de si software propio o para distro...)Datos de aplicación(Datos para BDs)Ficheros de datos (especificos para cada instalación)Software de aplicación que cambie muy frecuentemente y de forma especifica para un host (cosa que no ocurre casi nunca).

Page 9: Madrid devops empaquetamientodeb_i

Cuánto cuesta empaquetar...

Hacerlo para un paquete oficial de distro, bastanteHacerlo para nuestros paquetes, no tanto

Page 10: Madrid devops empaquetamientodeb_i

Paquetes DebManos a la obra

Page 11: Madrid devops empaquetamientodeb_i

Anatomia de un Deb I

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

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

Page 12: Madrid devops empaquetamientodeb_i

Anatomia 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...)

 

Page 13: Madrid devops empaquetamientodeb_i

Herramientas I

Herramientas para contruir paquetes dpkg-dev / dpkg-buildpackagedebhelper helper programs for debian/rulesfakeroot Gives a fake root environmentcdbs common build system for Debian packages

Page 14: Madrid devops empaquetamientodeb_i

Herramientas II

Herramientas creación inicial del paquete dh-make tool that converts source archives into Debian package sourcealien convert and install rpm and other packages (para hacer algo rápido o partiendo de otros formatos de paquete, como rpm)

Page 15: Madrid devops empaquetamientodeb_i

Herramientas III

Herramientas compilaciónbuild-essentialmakeautoconf, automake, autotools-devlibtoolpython-setuptoolsrake ... 

Page 16: Madrid devops empaquetamientodeb_i

Pasos creación paquete deb

Selección de nombre de paquete (no siempre coincide con el de programa)Obtención programa/librería a paquetizarCompilación y testeoDebianización inicialModicación/Parcheo de fuentesConstrucción del paquete binario

Page 17: Madrid devops empaquetamientodeb_i

Debianización inicial I

 Fuentes del paquete:Fuentes programaDirectorio debianInformación paquete (dependencias, arquitectura, changelog, docs, etc...)Rules para construir el paquete (Makefile)Scripts de instalación/desinstalación

Page 18: Madrid devops empaquetamientodeb_i

Debianización inicial II

Se crea el directorio debian:De forma manualUsando dh_makeSe adaptan ficheros del directorio debianSe adaptan fuentes (normalmente sólo el Makefile)

Page 19: Madrid devops empaquetamientodeb_i

Debianización inicial III

Para crear el directorio debian usando dh_make:Descomprimimos fuentes programaDesde ese directorioEjecutamos dh_make

dh_make permite indicar el nombre del paquete, el autor, el tipo de paquete, si es un programa o una librería, etc...

Page 20: Madrid devops empaquetamientodeb_i

Debianización inicial IV

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 21: Madrid devops empaquetamientodeb_i

Debianización inicial V

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

Page 22: Madrid devops empaquetamientodeb_i

Debianización inicial VI

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 23: Madrid devops empaquetamientodeb_i

Fichero Control I

Source: throttleSection: utilsPriority: extraMaintainer: Eduardo Ferro <[email protected]>Build-Depends: debhelper (>= 5), autotools-devStandards-Version: 3.8.1Homepage: http://klicman.org/throttle/

Package: throttleArchitecture: anyDepends: ${shlibs:Depends}, ${misc:Depends}Description: bandwidth limiting pipe throttle copies ...

Page 24: Madrid devops empaquetamientodeb_i

Fichero Control II

Source: docsisSection: netPriority: extraMaintainer: Eduardo Ferro <[email protected]>Build-Depends: debhelper (>= 5), autotools-dev, libsnmp-dev, bison, flexStandards-Version: 3.8.1

Package: docsisArchitecture: anyDepends: ${shlibs:Depends}, ${misc:Depends}Description: Encode/Decode DOCSIS configuration files This program encodes ....

Page 25: Madrid devops empaquetamientodeb_i

Fichero Control III

Relacción entre paquetes:«Depends:» (depende de) «Recommends:» (recomienda)«Suggests:» (sugiere)«Breaks:» (rompe a)«Conflicts:» (entra en conflicto con)«Provides:» (provee)«Replaces:» (reemplaza a)  

Page 26: Madrid devops empaquetamientodeb_i

Fichero Control IV

Las listas de paquetes de las entradas Depends, Conflicts, etc, son listas separados por comas, con indicaciones de versiones compatibles (= > >= >> < <= <<) y con «|» para paquetes alternativos. Ej: foo (>= 1.2), bar, libpepe (>> 4.0.7), libalt1 | libalt2, libblas   Información fichero control: http://www.debian.org/doc/manuals/maint-guide/ch-dreq.es.html

Page 27: Madrid devops empaquetamientodeb_i

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 28: Madrid devops empaquetamientodeb_i

Fichero Rules I

aka "La madre del cordero"Equivale a un Makefile pero para la contrucción del paqueteSe podría hacer como un Makefile a mano, simplemente respetando los targets Es leido por las herramientas de construcción de paquetes para saber cómo hacer cada paso de la construcción 

Page 29: Madrid devops empaquetamientodeb_i

Fichero Rules II

Los targets de un debian/rules son:cleanbuild installbinary binary-arch (Architecture: any)binary-indep (Architecture: all)  

Page 30: Madrid devops empaquetamientodeb_i

Fichero Rules III

No se suelen hacer a manoSe suelen generar con el dh_make y luego modificarSe suelen hacer con dos estilos:Usando dh_* en cada targetUsando cdbs  

Page 31: Madrid devops empaquetamientodeb_i

Fichero Rules IV

Lo más recomendado es cdbs, puesto que permite mantener ficheros rules mucho más pequeños y que dejan casi toda la complejidad fuera de este fichero. 

Más disclaimers: Tengo menos experiencia con cdbs...

Page 32: Madrid devops empaquetamientodeb_i

Fichero Rules V (estilo dh_*)

#!/usr/bin/make -f# -*- makefile -*-

...install: build dh_testdir dh_installdirs $(MAKE) DESTDIR=$(CURDIR)/debian/truncate installbinary-arch: install dh_installchangelogs dh_installdocs dh_install dh_installman...

Page 33: Madrid devops empaquetamientodeb_i

Fichero Rules VI (estilo dh_*)

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 34: Madrid devops empaquetamientodeb_i

Fichero Rules VII (cdbs)

Estilo CDBS :Intenta simplificar el debian/rulesPuede gestionar sin esfuerzo los casos típicos más comunesIntenta eliminar tareas repetitivas realizadas en los debian/rulesUsa clases (extensibles), que son como partes de Makefile especializadasEstas clases están bien probadas

Page 35: Madrid devops empaquetamientodeb_i

Fichero Rules VIII (cdbs)

Clases disponibles en CDBS :     Makefile, CMake, qmake, SConsAutotoolsPerlPythonRubyGnomeKde...

Page 36: Madrid devops empaquetamientodeb_i

Fichero Rules VIII (cdbs)

#!/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: Madrid devops empaquetamientodeb_i

Fichero Rules IX (cdbs)

#!/usr/bin/make -finclude /usr/share/cdbs/1/rules/debhelper.mkinclude /usr/share/cdbs/1/class/makefile.mk

DEB_MAKE_CLEAN_TARGET = cleanDEB_MAKE_BUILD_TARGET = allDEB_MAKE_INSTALL_TARGET = install DESTDIR=$(CURDIR)/debian/lsx/DEB_MAKE_CHECK_TARGET =INCS = -I/usr/libLIBS = -L/usr/lib -lcCFLAGS = -Os ${INCS} -DVERSION=\"${VERSION}\"LDFLAGS = ${LIBS}

Page 38: Madrid devops empaquetamientodeb_i

Fichero Rules IX (cdbs)

#!/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 39: Madrid devops empaquetamientodeb_i

Fichero Rules X (cdbs)

#!/usr/bin/make -f

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

Page 40: Madrid devops empaquetamientodeb_i

Fichero Rules XI (cdbs)

#!/usr/bin/make -fDEB_PYTHON_SYSTEM=pysupport

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

# Don't compress .py filesDEB_COMPRESS_EXCLUDE := .py

Page 41: Madrid devops empaquetamientodeb_i

Otros ficheros en debian/

 maintainer scripts:prermpostrmpreinstpostinst<programa>.1 (manpage)<programa>.cron.* <programa>.init.*menu (entrada para menus gráficos) compat... 

Page 42: Madrid devops empaquetamientodeb_i

Modificación de fuentes

Se deben modificar los fuentes para conseguir:Los Makefiles deben instalar sobre $(DESTDIR)Es posible que se deban modificar los fuentes, para realizar adaptacionesEn muchos casos se necesita cambiar nombres de librerias Los cambios sobre los fuentes se pueden realizar si son pocos sobre los propios ficheros del directorio. Si son bastantes se deben gestionar con alguna herramienta: dpatch o quilt

Page 43: Madrid devops empaquetamientodeb_i

A construir...

Page 44: Madrid devops empaquetamientodeb_i

Construcción I

Recordemos: Directorio de trabajoFuentes del programa (Modificado)Directorio debiandebian/controldebian/rulesdebian/changelog En el directorio debian suele haber muchos más ficheros, pero los indicados son los mínimos... 

Page 45: Madrid devops empaquetamientodeb_i

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 46: Madrid devops empaquetamientodeb_i

Construcción III

eferro@portasus:~/lsm$ dpkg-buildpackage -us -uc -rfakeroot -sa dpkg-buildpackage: export CFLAGS from dpkg-buildflags (origin: vendor): -g -O2dpkg-buildpackage: export CPPFLAGS from dpkg-buildflags (origin: vendor): ........ dh_builddeb -plsm dpkg-deb: building package `lsm' in `../lsm_0.62-1_i386.deb'. dpkg-genchanges -sa >../lsm_0.62-1_i386.changesdpkg-genchanges: including full source code in upload dpkg-source --after-build lsmdpkg-buildpackage: full upload; Debian-native package (full source is included)

Page 47: Madrid devops empaquetamientodeb_i

Construcción IV

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

Page 48: Madrid devops empaquetamientodeb_i

Trabajo con paquetes fuente I

Un paquete fuente está compuesto de los siguientes ficheros: <paquete_version>.diff.gz Diferencias sobre fuentes orig<paquete_version>.dsc  Firma, md5sums, metainfo<paquete_version>.orig.tar.gz Fuentes orig

Page 49: Madrid devops empaquetamientodeb_i

Trabajo con paquetes fuente II

Por ejemplo si queremos modificar el paquete del find:dpkg -S `type -p find`apt-get source findutils (herramienta de aprendizaje...) findutils-4.4.2/findutils_4.4.2-1ubuntu1.diff.gzfindutils_4.4.2-1ubuntu1.dsc  findutils_4.4.2.orig.tar.gz cd findutils-4.4.2/ # modificaciones dpkg-buildpackages -us -uc -rfakeroot

Page 50: Madrid devops empaquetamientodeb_i

Trabajo con paquetes fuente III

Si disponemos de un paquete fuente y queremos regenerar el directorio del paquete, tenemos que usar el comando: dpkg-source -x <paquete_version>.dsc Por supuesto en el directorio tenemos que tener el resto de ficheros del paquete fuente (diff.gz, orig.tar.gz...)

Page 51: Madrid devops empaquetamientodeb_i

Herramientas verificación/debug

Para detectar errores y posibles problemas en paquetes binarios o en fuentes, podemos usar:lintian Chequea un paquete binario o un fuente, indicandonos errores. Imprescindible para paquetes oficiales.pbuilder Crea chroot con distro básica para contrucción de paquetes.

Page 52: Madrid devops empaquetamientodeb_i

Demos

Page 53: Madrid devops empaquetamientodeb_i

Referencias:Guía del nuevo desarrollador de Debian http://www.debian.org/doc/manuals/maint-guide/index.es.html  CDBS Documentation http://cdbs-doc.duckcorp.org/en/cdbs-doc.xhtmlDebian 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


Recommended