Madrid devops empaquetamientodeb_i

Preview:

DESCRIPTION

Empaquetamiento Deb I Madrid DevOps 11/1/2011

Citation preview

 Empaquetamiento Deb I

Madrid DevOps11/1/2011

Quién... 

eduardo.ferro.aldama@gmail.comeferro@alea-soluciones.com

    http://www.eferro.neteferro

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".

Al turrón...

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 :)

Cuándo empaquetar...

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

Qué empaquetar...

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

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

Cuánto cuesta empaquetar...

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

Paquetes DebManos a la obra

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  

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

 

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

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)

Herramientas III

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

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

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

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)

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

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

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

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.*

Fichero Control I

Source: throttleSection: utilsPriority: extraMaintainer: Eduardo Ferro <eferro@alea-soluciones.com>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 ...

Fichero Control II

Source: docsisSection: netPriority: extraMaintainer: Eduardo Ferro <eferro@alea-soluciones.com>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 ....

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)  

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

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]

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 

Fichero Rules II

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

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  

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

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

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

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

Fichero Rules VIII (cdbs)

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

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 =

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}

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

Fichero Rules X (cdbs)

#!/usr/bin/make -f

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

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

Otros ficheros en debian/

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

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

A construir...

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

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

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)

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

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

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

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

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.

Demos

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