Madrid devops empaquetamientodeb_i
-
Upload
eduardo-ferro-aldama -
Category
Technology
-
view
802 -
download
21
description
Transcript of Madrid devops empaquetamientodeb_i
![Page 1: Madrid devops empaquetamientodeb_i](https://reader031.fdocuments.mx/reader031/viewer/2022013115/55981f581a28abb6648b463b/html5/thumbnails/1.jpg)
Empaquetamiento Deb I
Madrid DevOps11/1/2011
![Page 3: Madrid devops empaquetamientodeb_i](https://reader031.fdocuments.mx/reader031/viewer/2022013115/55981f581a28abb6648b463b/html5/thumbnails/3.jpg)
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](https://reader031.fdocuments.mx/reader031/viewer/2022013115/55981f581a28abb6648b463b/html5/thumbnails/4.jpg)
Al turrón...
![Page 5: Madrid devops empaquetamientodeb_i](https://reader031.fdocuments.mx/reader031/viewer/2022013115/55981f581a28abb6648b463b/html5/thumbnails/5.jpg)
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](https://reader031.fdocuments.mx/reader031/viewer/2022013115/55981f581a28abb6648b463b/html5/thumbnails/6.jpg)
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](https://reader031.fdocuments.mx/reader031/viewer/2022013115/55981f581a28abb6648b463b/html5/thumbnails/7.jpg)
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](https://reader031.fdocuments.mx/reader031/viewer/2022013115/55981f581a28abb6648b463b/html5/thumbnails/8.jpg)
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](https://reader031.fdocuments.mx/reader031/viewer/2022013115/55981f581a28abb6648b463b/html5/thumbnails/9.jpg)
Cuánto cuesta empaquetar...
Hacerlo para un paquete oficial de distro, bastanteHacerlo para nuestros paquetes, no tanto
![Page 10: Madrid devops empaquetamientodeb_i](https://reader031.fdocuments.mx/reader031/viewer/2022013115/55981f581a28abb6648b463b/html5/thumbnails/10.jpg)
Paquetes DebManos a la obra
![Page 11: Madrid devops empaquetamientodeb_i](https://reader031.fdocuments.mx/reader031/viewer/2022013115/55981f581a28abb6648b463b/html5/thumbnails/11.jpg)
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](https://reader031.fdocuments.mx/reader031/viewer/2022013115/55981f581a28abb6648b463b/html5/thumbnails/12.jpg)
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](https://reader031.fdocuments.mx/reader031/viewer/2022013115/55981f581a28abb6648b463b/html5/thumbnails/13.jpg)
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](https://reader031.fdocuments.mx/reader031/viewer/2022013115/55981f581a28abb6648b463b/html5/thumbnails/14.jpg)
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](https://reader031.fdocuments.mx/reader031/viewer/2022013115/55981f581a28abb6648b463b/html5/thumbnails/15.jpg)
Herramientas III
Herramientas compilaciónbuild-essentialmakeautoconf, automake, autotools-devlibtoolpython-setuptoolsrake ...
![Page 16: Madrid devops empaquetamientodeb_i](https://reader031.fdocuments.mx/reader031/viewer/2022013115/55981f581a28abb6648b463b/html5/thumbnails/16.jpg)
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](https://reader031.fdocuments.mx/reader031/viewer/2022013115/55981f581a28abb6648b463b/html5/thumbnails/17.jpg)
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](https://reader031.fdocuments.mx/reader031/viewer/2022013115/55981f581a28abb6648b463b/html5/thumbnails/18.jpg)
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](https://reader031.fdocuments.mx/reader031/viewer/2022013115/55981f581a28abb6648b463b/html5/thumbnails/19.jpg)
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](https://reader031.fdocuments.mx/reader031/viewer/2022013115/55981f581a28abb6648b463b/html5/thumbnails/20.jpg)
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](https://reader031.fdocuments.mx/reader031/viewer/2022013115/55981f581a28abb6648b463b/html5/thumbnails/21.jpg)
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](https://reader031.fdocuments.mx/reader031/viewer/2022013115/55981f581a28abb6648b463b/html5/thumbnails/22.jpg)
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](https://reader031.fdocuments.mx/reader031/viewer/2022013115/55981f581a28abb6648b463b/html5/thumbnails/23.jpg)
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](https://reader031.fdocuments.mx/reader031/viewer/2022013115/55981f581a28abb6648b463b/html5/thumbnails/24.jpg)
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](https://reader031.fdocuments.mx/reader031/viewer/2022013115/55981f581a28abb6648b463b/html5/thumbnails/25.jpg)
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](https://reader031.fdocuments.mx/reader031/viewer/2022013115/55981f581a28abb6648b463b/html5/thumbnails/26.jpg)
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](https://reader031.fdocuments.mx/reader031/viewer/2022013115/55981f581a28abb6648b463b/html5/thumbnails/27.jpg)
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](https://reader031.fdocuments.mx/reader031/viewer/2022013115/55981f581a28abb6648b463b/html5/thumbnails/28.jpg)
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](https://reader031.fdocuments.mx/reader031/viewer/2022013115/55981f581a28abb6648b463b/html5/thumbnails/29.jpg)
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](https://reader031.fdocuments.mx/reader031/viewer/2022013115/55981f581a28abb6648b463b/html5/thumbnails/30.jpg)
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](https://reader031.fdocuments.mx/reader031/viewer/2022013115/55981f581a28abb6648b463b/html5/thumbnails/31.jpg)
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](https://reader031.fdocuments.mx/reader031/viewer/2022013115/55981f581a28abb6648b463b/html5/thumbnails/32.jpg)
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](https://reader031.fdocuments.mx/reader031/viewer/2022013115/55981f581a28abb6648b463b/html5/thumbnails/33.jpg)
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](https://reader031.fdocuments.mx/reader031/viewer/2022013115/55981f581a28abb6648b463b/html5/thumbnails/34.jpg)
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](https://reader031.fdocuments.mx/reader031/viewer/2022013115/55981f581a28abb6648b463b/html5/thumbnails/35.jpg)
Fichero Rules VIII (cdbs)
Clases disponibles en CDBS : Makefile, CMake, qmake, SConsAutotoolsPerlPythonRubyGnomeKde...
![Page 36: Madrid devops empaquetamientodeb_i](https://reader031.fdocuments.mx/reader031/viewer/2022013115/55981f581a28abb6648b463b/html5/thumbnails/36.jpg)
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](https://reader031.fdocuments.mx/reader031/viewer/2022013115/55981f581a28abb6648b463b/html5/thumbnails/37.jpg)
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](https://reader031.fdocuments.mx/reader031/viewer/2022013115/55981f581a28abb6648b463b/html5/thumbnails/38.jpg)
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](https://reader031.fdocuments.mx/reader031/viewer/2022013115/55981f581a28abb6648b463b/html5/thumbnails/39.jpg)
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](https://reader031.fdocuments.mx/reader031/viewer/2022013115/55981f581a28abb6648b463b/html5/thumbnails/40.jpg)
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](https://reader031.fdocuments.mx/reader031/viewer/2022013115/55981f581a28abb6648b463b/html5/thumbnails/41.jpg)
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](https://reader031.fdocuments.mx/reader031/viewer/2022013115/55981f581a28abb6648b463b/html5/thumbnails/42.jpg)
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](https://reader031.fdocuments.mx/reader031/viewer/2022013115/55981f581a28abb6648b463b/html5/thumbnails/43.jpg)
A construir...
![Page 44: Madrid devops empaquetamientodeb_i](https://reader031.fdocuments.mx/reader031/viewer/2022013115/55981f581a28abb6648b463b/html5/thumbnails/44.jpg)
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](https://reader031.fdocuments.mx/reader031/viewer/2022013115/55981f581a28abb6648b463b/html5/thumbnails/45.jpg)
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](https://reader031.fdocuments.mx/reader031/viewer/2022013115/55981f581a28abb6648b463b/html5/thumbnails/46.jpg)
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](https://reader031.fdocuments.mx/reader031/viewer/2022013115/55981f581a28abb6648b463b/html5/thumbnails/47.jpg)
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](https://reader031.fdocuments.mx/reader031/viewer/2022013115/55981f581a28abb6648b463b/html5/thumbnails/48.jpg)
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](https://reader031.fdocuments.mx/reader031/viewer/2022013115/55981f581a28abb6648b463b/html5/thumbnails/49.jpg)
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](https://reader031.fdocuments.mx/reader031/viewer/2022013115/55981f581a28abb6648b463b/html5/thumbnails/50.jpg)
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](https://reader031.fdocuments.mx/reader031/viewer/2022013115/55981f581a28abb6648b463b/html5/thumbnails/51.jpg)
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](https://reader031.fdocuments.mx/reader031/viewer/2022013115/55981f581a28abb6648b463b/html5/thumbnails/52.jpg)
Demos
![Page 53: Madrid devops empaquetamientodeb_i](https://reader031.fdocuments.mx/reader031/viewer/2022013115/55981f581a28abb6648b463b/html5/thumbnails/53.jpg)
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