Taller de Empaquetado para Debian y Canaima

1,553 views
1,332 views

Published on

Taller de empaquetado para Debian y Canaima

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,553
On SlideShare
0
From Embeds
0
Number of Embeds
15
Actions
Shares
0
Downloads
81
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Taller de Empaquetado para Debian y Canaima

  1. 1. Empaquetado para Debian y Canaima Versión 3.0 Ernesto Nadir Crespo Avila ecrespo@gmail.com @_seraph1Presentación liberada bajo licencia Creative Commons
  2. 2. Dennis RitchieDennis Ritchie
  3. 3. AgendaFundamentos básicosEmpaquetarCrear parchesEmpaquetado usando SCVPaquetes BackportsMetapaquetesRepositorio local de paquetes
  4. 4. Fundamentos Básicos
  5. 5. Historia del S.O. Unix y GNU/Linux●A finales de 1960 los Laboratorios Bell trabajan en un S.O.Multics●En 1969 Ken Thompson y Dennis Ritchie lideraron un grupode programadores para desarrollar un S.O. Que fueramultiusuario y mutitarea que al principio se llamo Unics yluego fue Unix, este fue desarrollado en lenguajeensamblador.●En 1972 se reescribe Unix en lenguaje C e incorporando elstack TCP/IP●En 1975 la Universidad de California creo su propio Unixllamado BSD, siendo una fuerte competencia para el Unix deAT&T.●En 1991 un estudiante de Finlandia llamado Linux Torvaldscrea un clon de Unix basandose en Minix de AndrewTanenbaum.●En el año 1983, Richard Stallman crea El proyecto GNU paracrear un S.O. Libre que fuera como Unix, ya se tenía uninterpretador de comandos, compilador, un sistema dearchivos y un editor, sólo faltaba el kernel del Sistemaoperativo y fue gracias al Kernel de Linux que hoy en día setiene a GNU/Linux.●En 1993 Ian Murdock se encarga de una iniciativa que nace dela FSF y su proyecto GNU para crear un Sistema Operativototalmente libre y Universal. Debian es la contracción delnombre de la ex-esposa Debra e Ian.
  6. 6. Historia del S.O. Unix y GNU/Linux
  7. 7. Distribuciones de GNU/Linux
  8. 8. Hitos importantes en los 20 años de Linux
  9. 9. Estructura de GNU/Linux Hardware Kernel ShellAplicaciones
  10. 10. Programas Fuentes y binarios. Compilación Programa Fuente: es un conjunto de líneas de texto que son las instrucciones que debe seguir la computadora para ejecutar dicho programa. Por tanto, en el código fuente de un programa está descrito por completo su funcionamiento. El código fuente de un programa está escrito por un programador en algún lenguaje de programación, pero en este primer estado no es directamente ejecutable por la computadora, sino que debe ser traducido a otro lenguaje. Programa Binario o ejecutable: Es la conversión del código fuente (serie de instrucciones) escrita por el programador a lenguaje de máquina que entiende el computador. Existen los lenguajes compilados e interpretados. Interpretados: Perl, python, php, ruby, entre otros. Compilados: C, Pascal. Para instalar un programa fuente es necesario normalmente seguir los siguientes pasos: Configurar el programa: ./configure Compilar el programa: make Instalar el programa: make install
  11. 11. Paquete Un paquete contiene instrucciones en donde tienen que estar ubicados (en tu sistema de archivo) los archivos a instalar, dependencias de librerías u otros programas (si es que existe dependencias), instrucciones para la instalación, y scripts básicos de configuración. Un paquete usualmente contiene software precompilado (o llamados “binarios”), pero también puede empaquetar código fuente.
  12. 12. Bajar un paquete fuente y compilarlo El siguiente es un ejercicio para que conozcan el procedimiento de instalación de un programa fuente. Bajar el programa sshguard: wget http://hivelocity.dl.sourceforge.net/sourceforge/sshguard/sshguard-1.4rc3.tar.bz2 Descomprimir y desempaquetar el paquete: tar -xvjf shguard-1.4rc3.tar.bz2 Cambiarse al directorio: cd sshguard-1.4rc3 Listar las opciones de configuración con ./configure – help. SshGuard necesita definirle en la configuración cual firewall se va a usar, esto es con la opción –with-firewall=iptables. Ejecutar la configuración: ./configure –with-firewall=iptables Compilar: make Instalar: make install
  13. 13. Sistemas de gestión de paquetes Es una colección de herramientas que sirven para automatizar el proceso instalación, actualización y eliminación de paquetes. Maneja una base de datos de paquetes instalados y facilita la remoción limpia de dichos paquetes.
  14. 14. Objetivos de Debian y CanaimaDebian●Mejor sistema operativo libre posible●Asegurar que todo el software funciona●Facilitar la desintalación de software●Que paquete es el responsable de cada archivo●Facilitar la instalación de software:● Precompilado,configurado,legal y libre● Dependencias, actualizaciones y seguridadCanaima● ¿Por qué Venezuela DEBE Y TIENE que utilizar Software Libre?●Decreto 3390.●Que es la Meta Distribución Canaima.●¿Por qué la Meta Distribución Canaima?
  15. 15. Ciclo de desarrollo de Canaima
  16. 16. Lo necesario para ser desarrollador Debian
  17. 17. Desarrolladores Debian a nivel mundialDesarrolladores en Venezuela: Eloy París, Cesar Mendoza,Muammar El Khatib y José Luis Rivas.Mantenedores de paquetes: Christian Sanchez, ErnestoHernández Novich, Gerardo Curiel, Manuel García, AlejandroGarrido, Juan Angulo Moreno, Ernesto Crespo y CarlosAlberto Silombria Ibarra.
  18. 18. Normativas y lineamientos de Debian ●Debian Policy : http://www.debian.org/doc/debian-policy/ ●Sistema de archivos estandar: http://www.pathname.com/fhs/ ●Menú policy:http://www.debian.org/doc/packaging-manuals/menu-policy/ ●Mime policy: http://www.debian.org/doc/packaging-manuals/mime-policy/ ●Emac policy: http://www.debian.org/doc/packaging-manuals/debian-emacs-policy ●Java policy:http://www.debian.org/doc/packaging-manuals/java-policy/ ●Perl policy:http://www.debian.org/doc/packaging-manuals/perl-policy/ ●Python policy: http://www.debian.org/doc/packaging-manuals/python-policy/ ●CLI policy:http://pkg-mono.alioth.debian.org/cli-policy/ ●Debconf: http://www.debian.org/doc/packaging-manuals/debconf_specification.html ●Webapp policy:http://webapps-common.alioth.debian.org/draft/html/ ●Php policy:http://webapps-common.alioth.debian.org/draft-php/html/ ●DB policy:http://people.debian.org/~seanius/policy/dbapp-policy.html/ ●TCL/TK policy:http://pkg-tcltk.alioth.debian.org/tcltk-policy.html/ ●Guía del mantenedor:http://www.debian.org/doc/maint-guide/ ●Referencia del desarrollador: http://www.debian.org/doc/manuals/developers-reference/ ●Guía de empaquetado de librerías: http://www.netfort.gr.jp/~dancer/column/libpkg-guide/libpkg-guide.html ●Manual de make: http://www.gnu.org/software/make/manual/make.html
  19. 19. ¿Donde buscar paquetes?●Paquetes en Debian que necesitan ayuda: ● Paquetes huérfanos:http://www.debian.org/devel/wnpp/orphaned ● Paquetes por dejar libres:http://www.debian.org/devel/wnpp/rfa_bypackage ● Paquetes en adopción:http://www.debian.org/devel/wnpp/being_adopted●Repositorio de proyectos: ● Google code: http://code.google.com/hosting/ ● Sourceforge: http://sourceforge.net/index.php ● Gitorius: http://gitorius.org ● GitHub: http://www.github.com ● Bitbucket: http://www.bitbucket.org ● Freshmeat: http://freshmeat.net/ ● Savannah: http://savannah.gnu.org/
  20. 20. Paquetes disponibles para ser adoptados
  21. 21. Paquetes huérfanos
  22. 22. Paquete en adopción
  23. 23. WNPPEn wnpp se tiene una descripción del proceso de reporte defallos:http://www.debian.org/devel/wnpp/También se maneja una descripción de las etiquetas manejadas:●O: Paquete ha sido abandonado y necesita nuevo responsable.●RFA: Petición por adopción, debido a falta de tiempo, recursos ointerés la persona encargada a dejado libre el paquete.●RFH: Petición de ayuda, el responsable actual quiere seguirmanteniendo el paquete pero necesita ayuda en el mismo.●ITP: Intento de empaquetado, es un paquete nuevo que no seencuentra en Debian y alguien está empaquetandolo para Debian.●RFP: Petición de empaquetado, alguien ha encontrado unprograma interesante y desea que un mantenedor o desarrolladorlo suba a Debian.
  24. 24. WNPPProcedimiento para eliminar los errores:●O: Si va a adoptar un paquete retitule el error reemplazando O porITA.●RFA: Si va a adoptar un paquete retirule el error reemplazando RFApor ITA.●RFP: Si va a empaquetar este programa, cambie el errorreemplazando RFP por ITP y así las personas pueden saber que estepaquete está siendo empaquetado.El correo a enviar debería tener la siguiente estructura:To: control@bugs.debian.orgFrom: nombre-apellidos <nombre@example.com>retitle NNNNNN ITA: nombre-paquete -- descripcion-paqueteowner NNNNNN !ThanksDonde NNNNN es el número de bug para O ó RFA.Más información de los comandos en:http://www.debian.org/Bugs/server-control
  25. 25. Adoptar un paquete huérfano
  26. 26. Intención de empaquetar
  27. 27. Paquetes Fuente en DebianUn paquete fuente contiene archivos independientes de laarquitectura y tienen todo lo necesario para la construcción deun paquete binario:Se puede ejecutar para tener los fuentes del paquete hello:apt-get source hello●Hellhello_2.2-3.dsco-2.2: Directorio con las fuentes delpaquete hello para debian.●hello_2.2-3.dsc: Contiene el archivo de control del paquetehello con información de firma del empaquetador yverificación hash de las fuentes del paquete.●hello_2.2.orig.tar.gz: Paquete fuente original.●hello_2.2-3.diff.gz: Contiene todos los cambios aplicados porDebian.Para paquetes nativos no se maneja el orig ni el diff.
  28. 28. Contenido del directorio del paquete fuente
  29. 29. Contenido del directorio del paquete fuente
  30. 30. Contenido del directorio del paquete fuente
  31. 31. Contenido del directorio del paquete fuente
  32. 32. Contenido del directorio del paquete fuente
  33. 33. Estructura de un paquete Binario Un paquete Binario en Debian es un archivo con extensión .deb por la unión de 3 archivos (empaquetados con el comando ar): ●data.tar.gz: Archivos para el Sistema de archivos. ●control.tar.gz:Scripts de mantenimiento y metadatos. ●Debian-binary: Versión del paquete, actualmente 2.0. Una vez instalados los archivos de control residen en /var/lib/dpkg/info. Se realizan operaciones sobre el paquete .deb con el comando dpkg: ●Dpkg –info hello_2.2-3_i386.deb:Examina los metadatos del paquete. ●Dpkg –contents hello_2.2-3_i386.deb: Lista los archivos. ●Dpkg –unpack hello_2.2-3_i386.deb:Extrae los paquetes localmente. ●Dpkg -i hello_2.2-3_i386.deb:Extrae e instala el paquete junto con sus archivos de configuración Ejercicio: Descargar el paquete hello: aptitude download hello Se desempaqueta el paquete hello: ar -x hello_2.2-3_i386.deb Revisar el contenido de cada archivo desempaquetado.
  34. 34. Metadato de un paqueteLa información de los metadatos de un paquete binario quemuestra el comando dpkg –info es la siguiente:Package: El nombre del paquete.Source: El nombre del paquete fuente la cual este binario fuecompilado.Version: La version del paquete incluyendo la versiónupstream (antes del -) y la versión Debian (después del -).Architecture: El tipo de CPU para la cual fue hecho el paquete.Depends, Recommends, Suggests, Replaces, Conflicts,Enhances: Relaciones con otros paquetes.
  35. 35. Scripts de mantenimiento Scripts de mantenimiento son ejecutado cuando se instala y remueve un paquete. Estos están tipicamente codificados en BASH o Perl. Los scripts estándares son: ●preinst: Ejecuta antes de extracción de los archivos. ●postinst: Ejecuta después de extracción de los archivos. ●prerm: Ejecuta antes de remoción de los archivos. ●postrm: Ejecuta después de remoción de los archivos. Para estandarizar la configuración se puede utilizar el archivo: config: Hace preguntas a otros scripts de mantenimiento.
  36. 36. Secuencia de instalación
  37. 37. Secuencia de desintalación
  38. 38. Secuencia de purga
  39. 39. Secuencia de remoción y purga
  40. 40. Secuencia de actualización
  41. 41. Proceso de empaquetado
  42. 42. Proceso de empaquetado
  43. 43. ¿Build o Binary?
  44. 44. Herramientas o programas necesarios... Existen también varios paquetes que serán necesarios para crear paquetes en un sistema Debian. La mayoría ya deben de estar instalado por defecto, como dpkg, gcc, make, dpkg-dev. Instalar los siguientes programas: ●dh_make : ●Build-essential: Paquetes esenciales para la construcción de paquetes. ●Debhelper: Herramienta que facilita la creación de debian/rules. ●Devscripts:Paquetes para desarrollo contiene dch, debuild, uscan, uupdate entre otros. ●Fakeroot: Permite compilar e instalar sin ser root. ●Lintian: Paquete que verifica la buena construcción de un paquete y que cumpla las normativas de Debian. ●Pbuilder: Ambiente que permite probar paquetes o empaquetar. ●Piuparts: Herramienta de verificación de la correcta instalación de paquetes. ●Dpatch,Patch, diff,patchutils: Programa que se usa para aplicar parches. ●Quilt: Herramienta para aplicar parches. ●Manedit:Programa para la edición de archivos de manual. aptitude install build-essential dh-make debhelper devscripts dpkg-dev fakeroot lintian pbuilder piuparts dpatch diff quilt manedit patchutils
  45. 45. Entorno de empaquetado Herramientas de Debian para empaquetar en un entorno distinto al de usuario . Debian tiene varias herramientas para crear un entorno para empaquetar: ●Debootstrap y chroot: Con estas herramientas se puede tener un entorno sid o lenny/etch para empaquetar. ●Pbuilder: Está herramienta automatiza el proceso de creación del entorno con chroot. Otra opción es usar máquinas virtuales como: ●Qemu ●Kvm ●OpenVZ ●Xen ●User mode linux ●VirtualBox ●VMWare
  46. 46. Entorno de empaquetado Debootstrap y chroot: Crear el directorio de trabajo: mkdir /home/sid cd /home/sid Crear el sistema sid: debootstrap sid /home/sid http://debian.velug.org.ve/debian/ Entrar en el entorno sid: chroot /home/sid pbuilder: Crear un pbuilder: pbuilder create Actualizar pbuilder del chroot: pbuilder update Para generar paquetes binarios: pbuilder build <fichero .dsc> Más información en: http://people.debian.org/~anibal/talks/20050910-debian-peru.txt
  47. 47. ¿Qué es Debhelper? El sistema de build help mas común es debhelper, el cual provee una buena cantidad de comandos dh_* para la mayoría de las tareas a realizar. apt-get install debhelper dh-make Otros componentes utiles de debhelper son: dh-make-perl y dh-make-php. Escribir todos los comandos de debian/rules pueden ser tedioso y repetitivo. ●Además, a veces cambia la “policy” y los archivos rules deben ser actualizados. ● debhelper es un conjunto de programas para realizar tareas comunes. ● dh_installman instala paginas de manual en el directorio adecuado con los nombres correctos. ● Saber que esta haciendo es bueno.
  48. 48. ¿Qué es CDBS? Incluso con debhelper la mayoría de los paquetes comparten gran parte del código de los archivos debian/rules. ●cdbs es un sistema de construcción de paquetes Debian basado en la herencia entre Makefiles. ●Proporciona reglas estándar que pueden se fácilmente extendidas o reemplazadas.
  49. 49. Empaquetar
  50. 50. Empaquetar un paquete sin ayuda Bajar y descomprimir el paquete fuente: mkdir roaddemo cd roaddemo wget -t 0 -c http://rhk.dataslab.com/roaddemo/roaddemo-1.0.1.tar.gz Descomprimir y cambiar el nombre del paqueta a orig: tar xvfz roaddemo-1.0.1.tar.gz mv roaddemo-1.0.1.tar.gz roaddemo_1.0.1.orig.tar.gz cd roaddemo-1.0.1 Probar la configuración, compilación e instalación del paquete: ./configure --prefix=/usr --mandir=$${prefix}/share/man – infodir=$${prefix}/share/info make mkdir tmp make install DESTDIR=`pwd`/tmp LIBTOOL=libtool Borrar todo lo creado hasta el momento: make distclean rm -rf tmp Reparar algunos bugs: grep road.bmp *.h *.c *.cpp *.cc *.hpp roaddemo.cc: if (load_texture("road.bmp", &road_tex_id) < 0) Cambiar el archivo a /usr/share/roaddemo/road.bmp
  51. 51. Empaquetar un paquete sin ayuda Crear archivos necesarios para debianizar: mkdir debian touch debian/control touch debian/changelog touch debian/rules touch debian/copyright touch debian/roaddemo.menu Colocar el siguiente contenido en debian/control: Source: roaddemo Section: games Priority: optional Maintainer: Miriam Ruiz <little_miry@yahoo.es> Build-Depends: libsdl1.2-dev, libgl-dev Standards-Version: 3.8.0 Package: roaddemo Architecture: any Depends: ${shlibs:Depends} Description: Simple demo using opengl and SDL Bezier-road demo ported from glut to SDL. . Use the right mouse button to select one of the endpoints or control points, then click and drag with the left mouse button to move the point.
  52. 52. Empaquetar un paquete sin ayuda Colocar el siguiente contenido en debian/copyright: This package was debianized by Miriam Ruiz <little_miry@yahoo.es> on Sat, 8 Jan 2005 20:09:28 +0000. It was downloaded from http://www.newimage.com/~rhk/roaddemo/ Upstream Author: Ray Kelm <rhk@newimage.com> License: This package is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 dated June, 1991. This package is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this package; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. On Debian GNU/Linux systems, the complete text of the GNU General Public License can be found in `/usr/share/common-licenses/GPL.
  53. 53. Empaquetar un paquete sin ayuda Colocar el siguiente contenido en debian/rules: #!/usr/bin/make -f # Debian Rules by Miriam Ruiz <little_miry@yahoo.es> # January 2005 # # Thanks for their help and for some of their code go to: # * Manoj Srivastava # * Helen Faulkner # * Dafydd Harries # * Gregory Pomerantz ###################################################################### ######### ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 2 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; if not, write to the Free Software ## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ## ###################################################################### #########
  54. 54. Empaquetar un paquete sin ayuda Colocar el siguiente contenido en debian/rules: # Name of the package package=roaddemo # Function to check if were in the correct dir (thanks Manoj) define checkdir @test -f debian/rules -a -f roaddemo.cc || (echo Not in correct source directory; exit 1) endef # Function to check if were root (thanks Manoj) define checkroot @test $$(id -u) = 0 || (echo need root priviledges; exit 1) endef # Top directory of the source code (thanks Manoj) SRCTOP := $(shell if [ "$$PWD" != "" ]; then echo $$PWD; else pwd; fi) # Destination directory where files will be installed DESTDIR = $(SRCTOP)/debian/$(package) # Definition of directories BIN_DIR = $(DESTDIR)/usr/bin GAMES_DIR = $(DESTDIR)/usr/games SHARE_DIR = $(DESTDIR)/usr/share/roaddemo DOCS_DIR = $(DESTDIR)/usr/share/doc/roaddemo MAN_DIR = $(DESTDIR)/usr/share/man/man1 MAN_GAMES_DIR = $(DESTDIR)/usr/share/man/man6 MENU_DIR = $(DESTDIR)/usr/lib/menu PIXMAPS_DIR = $(DESTDIR)/usr/share/pixmaps # Stamp Rules configure-stamp: $(checkdir) ./configure --host=$(DEB_HOST_GNU_TYPE) --build=$(DEB_BUILD_GNU_TYPE) --prefix=/usr --mandir=$$ {prefix}/share/man --infodir=$${prefix}/share/info touch configure-stamp build-stamp: configure-stamp $(checkdir) -rm -f build-stamp $(MAKE) touch build-stamp # Debian rules
  55. 55. Empaquetar un paquete sin ayuda Colocar el siguiente contenido en debian/rules: build: build-stamp clean: stamp-configure $(checkdir) -rm -f *-stamp $(MAKE) distclean -rm -rf debian/$(package) -rm -f debian/files -rm -f debian/substvars binary-indep: build # Definitions for install INST_OWN = -o root -g root MAKE_DIR = install -p -d $(INST_OWN) -m 755 INST_FILE = install -c $(INST_OWN) -m 644 INST_PROG = install -c $(INST_OWN) -m 755 -s INST_SCRIPT = install -c $(INST_OWN) -m 755
  56. 56. Empaquetar un paquete sin ayudaColocar el siguiente contenido en debian/rules:binary-arch: build $(checkdir) $(checkroot) # Install Program $(MAKE) install DESTDIR=$(DESTDIR) LIBTOOL=libtool # Install Program Resources $(MAKE_DIR) $(SHARE_DIR) $(INST_FILE) road.bmp $(SHARE_DIR) $(MAKE_DIR) $(DESTDIR)/DEBIAN # Install Docs $(MAKE_DIR) $(DOCS_DIR) $(INST_FILE) debian/copyright $(DOCS_DIR)/copyright $(INST_FILE) debian/changelog $(DOCS_DIR)/changelog.Debian $(INST_FILE) README $(DOCS_DIR)/README # Install Manpages #$(MAKE_DIR) $(MAN_GAMES_DIR) #$(INST_FILE) roaddemo.6 $(MAN_GAMES_DIR) # Install Menu and Icon #$(MAKE_DIR) $(MENU_DIR) #$(INST_FILE) debian/menu $(MENU_DIR)/roaddemo #$(MAKE_DIR) $(PIXMAPS_DIR) #$(INST_FILE) debian/roaddemo.xpm $(PIXMAPS_DIR) # Install Package Scripts #$(INST_SCRIPT) debian/postinst $(DESTDIR)/DEBIAN #$(INST_SCRIPT) debian/postrm $(DESTDIR)/DEBIAN # Compress Docs (thanks Helen) gzip -9 $(DOCS_DIR)/changelog.Debian #gzip -9 $(MAN_GAMES_DIR)/roaddemo.6 # Strip the symbols from the executable (thanks Helen) # TODO: the stripping part in binary-arch should honor the DEB_BUILD_OPTIONS environment variableand not strip stuff when it
  57. 57. Empaquetar un paquete sin ayuda Colocar el siguiente contenido en debian/rules: includes nostrip strip -R .comment $(BIN_DIR)/roaddemo # Work out the shared library dependancies (thanks Helen) dpkg-shlibdeps $(package) # Generate the control file (thanks Helen) dpkg-gencontrol -isp -P$(DESTDIR) # Make DEBIAN/md5sums (thanks Helen) cd $(DESTDIR) && find . -type f ! -regex .*DEBIAN/.* -printf %P0 | xargs -r0 md5sum > DEBIAN/md5sums # Create the .deb package (thanks Helen) dpkg-deb -b $(DESTDIR) ../ # Below here is fairly generic really binary: binary-indep binary-arch .PHONY: binary binary-arch binary-indep clean build
  58. 58. Empaquetar un paquete con debhelper Bajar el paquete fuente sshguard: wget http://hivelocity.dl.sourceforge.net/sourceforge/sshguard/sshguard-1.4rc3.tar.bz2 Descomprimir el paquete y cambiarse al directorio del paquete fuente: tar -xvjf sshguard-1.4rc3.tar.bz2 cd sshguard-1.4rc3¡ Crear las variables de entorno: export DEBEMAIL=nombre@example.com export DEBFULLNAME=nombre-apellidos Ejecutar dh_make: dh_make -f ../sshguard-1.4rc3.tar.bz2 -c BSD -s Con este comando se define la licencia del paquete, que va a ser un sólo paquete binario y la ruta del paquete fuente del upstream. El resultado es un escritorio debian/* dentro de los fuentes y un paquete orig: ls ../ sshguard-1.4rc3 sshguard_1.4rc3.orig.tar.gz sshguard-1.4rc3.tar.bz2 ls debian/* debian/changelog debian/dirs debian/init.d.ex debian/menu.ex debian/README.Debian debian/compat debian/docs debian/init.d.lsb.ex debian/postinst.ex debian/rules debian/control debian/emacsen-install.ex debian/manpage.1.ex debian/postrm.ex debian/sshguard.default.ex debian/copyright debian/emacsen-remove.ex debian/manpage.sgml.ex debian/preinst.ex debian/sshguard.doc-base.EX debian/cron.d.ex debian/emacsen-startup.ex debian/manpage.xml.ex debian/prerm.ex debian/watch.ex
  59. 59. Empaquetar un paquete con debhelper Renombrar los archivos watch.ex y sshguard.1.ex a watch y sshguard.1 respectivamente. Eliminar el resto de archivos README.Debian, .ex y .EX . Ahora sólo quedan los archivos: copyright, rules, changelog, compat control, dirs, docs, watch y sshguard.1. El archivos dirs contendrá la ruta donde se instalará el binario: usr/sbin. El archivo docs contendrá la do cumentación que viene con el programa, en este caso sólo README. El archivo compat tiene el número de versión de debhelper. El archivo watch contedrá la versión del paquete y la ruta de donde se puede bajar el paquete: version=3 http://sf.net/sshguard/sshguard-(.*).tar.gz Para verificar la validez del archivo watch se prueba uscan: uscan --verbose –no-download -- Scanning for watchfiles in . -- Found watchfile in ./debian -- In debian/watch, processing watchfile line: http://sf.net/sshguard/sshguard-(.*).tar.bz2 -- Found the following matching hrefs: /sites/download.sourceforge.net/pub/sourceforge/s/ss/sshguard/sshguard-0.91.tar.bz2 /sites/download.sourceforge.net/pub/sourceforge/s/ss/sshguard/sshguard-0.91.tar.bz2 /sites/download.sourceforge.net/pub/sourceforge/s/ss/sshguard/sshguard-1.0.tar.bz2 /sites/download.sourceforge.net/pub/sourceforge/s/ss/sshguard/sshguard-1.0.tar.bz2 /sites/download.sourceforge.net/pub/sourceforge/s/ss/sshguard/sshguard-1.1.tar.bz2 /sites/download.sourceforge.net/pub/sourceforge/s/ss/sshguard/sshguard-1.1.tar.bz2 /sites/download.sourceforge.net/pub/sourceforge/s/ss/sshguard/sshguard-1.1beta3.tar.bz2 /sites/download.sourceforge.net/pub/sourceforge/s/ss/sshguard/sshguard-1.1beta3.tar.bz2 /sites/download.sourceforge.net/pub/sourceforge/s/ss/sshguard/sshguard-1.1beta4.tar.bz2 /sites/download.sourceforge.net/pub/sourceforge/s/ss/sshguard/sshguard-1.1beta4.tar.bz2 /sites/download.sourceforge.net/pub/sourceforge/s/ss/sshguard/sshguard-1.1rc1.tar.bz2 /sites/download.sourceforge.net/pub/sourceforge/s/ss/sshguard/sshguard-1.1rc1.tar.bz2 /sites/download.sourceforge.net/pub/sourceforge/s/ss/sshguard/sshguard-1.2.tar.bz2 /sites/download.sourceforge.net/pub/sourceforge/s/ss/sshguard/sshguard-1.2.tar.bz2 /sites/download.sourceforge.net/pub/sourceforge/s/ss/sshguard/sshguard-1.3.tar.bz2 /sites/download.sourceforge.net/pub/sourceforge/s/ss/sshguard/sshguard-1.3.tar.bz2 /sites/download.sourceforge.net/pub/sourceforge/s/ss/sshguard/sshguard-1.4rc1.tar.bz2 /sites/download.sourceforge.net/pub/sourceforge/s/ss/sshguard/sshguard-1.4rc1.tar.bz2 /sites/download.sourceforge.net/pub/sourceforge/s/ss/sshguard/sshguard-1.4rc2.tar.bz2 /sites/download.sourceforge.net/pub/sourceforge/s/ss/sshguard/sshguard-1.4rc2.tar.bz2 /sites/download.sourceforge.net/pub/sourceforge/s/ss/sshguard/sshguard-1.4rc3.tar.bz2 /sites/download.sourceforge.net/pub/sourceforge/s/ss/sshguard/sshguard-1.4rc 3.tar.bz2 Newest version on remote site is 1.4rc3, local version is 1.4rc3 => Package is up to date -- Scan finished ~
  60. 60. Empaquetar un paquete con debhelper Archivo copyright: This package was debianized by Ernesto Nadir Crespo Avila <ecrespo@debianvenezuela.org> on Fri, 03 Apr 2009 14:32:21 -0430. It was downloaded from http://sshguard.sourceforge.net/ Upstream Author: sshguard maintainers <sshguard-maintainers@lists.sourceforge.net> Copyright: Copyright (C) 2007 sshguard Team License: Redistribution and use in source and binary forms, with or without modification, are permitted under the terms of the BSD License. THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. On Debian systems, the complete text of the BSD License can be found in `/usr/share/common-licenses/BSD. The Debian packaging is copyright 2009, Ernesto Nadir Crespo Avila <ecrespo@debianvenezuela.org> and is licensed under the GPL, see `/usr/share/common-licenses/GPL.
  61. 61. Empaquetar un paquete con debhelper Archivo control: Source: sshguard Section: net Priority: optional Maintainer: Ernesto Nadir Crespo Avila <ecrespo@debianvenezuela.org> Build-Depends: debhelper (>= 7), autotools-dev, iptables Standards-Version: 3.8.0 Homepage: http://sshguard.sourceforge.net/ Package: sshguard Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Description: Protects from brute force attacks against ssh Protects networked hosts from the todays widespread brute force attacks against ssh servers. It detects such attacks and blocks the authors address with a firewall rule
  62. 62. Empaquetar un paquete con debhelper Archivo changelog: sshguard (1.4rc3-1) unstable; urgency=low * Initial release (Closes: #428214). * Improve: - man page - Add configure option --with-firewall=iptables in debian/rules -- Ernesto Nadir Crespo Avila <ecrespo@debianvenezuela.org> Fri, 03 Apr 2009 14:32:21 -0430 Este archivo se puede editar con cualquier editor pero es preferible utilizar la herramienta dch: dch --increment "New maintainer. Closes: #NNNNNN" Para el caso de nuevo mantenedor.
  63. 63. Empaquetar un paquete con debhelper Archivo rules: #!/usr/bin/make -f # -*- makefile -*- # Sample debian/rules that uses debhelper. # This file was originally written by Joey Hess and Craig Small. # As a special exception, when this file is copied by dh-make into a # dh-make output file, you may use that output file without restriction. # This special exception was added by Craig Small in version 0.37 of dh-make. # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 # These are used for cross-compiling and for saving the configure script # from having to guess our platform (since we know it already) DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) ifneq ($(DEB_HOST_GNU_TYPE),$(DEB_BUILD_GNU_TYPE)) CROSS= --build $(DEB_BUILD_GNU_TYPE) --host $(DEB_HOST_GNU_TYPE) else CROSS= --build $(DEB_BUILD_GNU_TYPE) endif config.status: configure dh_testdir # Add here commands to configure the package. ifneq "$(wildcard /usr/share/misc/config.sub)" "" cp -f /usr/share/misc/config.sub config.sub endif ifneq "$(wildcard /usr/share/misc/config.guess)" "" cp -f /usr/share/misc/config.guess config.guess endif ./configure $(CROSS) --prefix=/usr --mandir=$${prefix}/share/man --with-firewall=iptables --infodir=$${prefix}/share/info CFLAGS="$(CFLAGS)" LDFLAGS="-Wl,-z,defs"
  64. 64. Empaquetar un paquete con debhelper Archivo rules: build: build-stamp build-stamp: config.status dh_testdir # Add here commands to compile the package. $(MAKE) #docbook-to-man debian/sshguard.sgml > sshguard.1 touch $@ clean: dh_testdir dh_testroot rm -f build-stamp # Add here commands to clean up after the build process. [ ! -f Makefile ] || $(MAKE) distclean rm -f config.sub config.guess dh_clean install: build dh_testdir dh_testroot dh_prep dh_installdirs # Add here commands to install the package into debian/sshguard. $(MAKE) DESTDIR=$(CURDIR)/debian/sshguard install # Build architecture-independent files here. binary-indep: install # We have nothing to do by default.
  65. 65. Empaquetar un paquete con debhelper Archivo rules: # Build architecture-dependent files here. binary-arch: install dh_testdir dh_testroot dh_installchangelogs Changes dh_installdocs dh_installexamples # dh_install # dh_installmenu # dh_installdebconf # dh_installlogrotate # dh_installemacsen # dh_installpam # dh_installmime # dh_python # dh_installinit # dh_installcron # dh_installinfo dh_installman debian/sshguard.1 dh_link dh_strip dh_compress dh_fixperms # dh_perl # dh_makeshlibs dh_installdeb dh_shlibdeps dh_gencontrol dh_md5sums dh_builddeb binary: binary-indep binary-arch .PHONY: build clean binary-indep binary-arch binary install
  66. 66. Empaquetar un paquete con debhelper Archivo de man sshguard.1: Para editar este archivo se usa la aplicación manedit sshguard.1
  67. 67. Empaquetar un paquete con CDBS Bajar el paquete fuente sshguard: wget http://hivelocity.dl.sourceforge.net/sourceforge/sshguard/sshguard-1.4rc3.tar.bz2 Descomprimir el paquete y cambiarse al directorio del paquete fuente: tar -xvjf sshguard-1.4rc3.tar.bz2 cd sshguard-1.4rc3¡ Crear las variables de entorno: export DEBEMAIL=nombre@example.com export DEBFULLNAME=nombre-apellidos Ejecutar dh_make: ecrespo@canaima:~/empaquetado/Ejercicios/fuentes/sshguard/sshguard-1.4rc3$ dh_make -f ../sshguard-1.4rc3.tar.bz2 -c BSD -s -b Maintainer name : Ernesto Nadir Crespo Avila Email-Address : ecrespo@debianvenezuela.org Date : Sat, 11 Apr 2009 16:43:08 -0430 Package Name : sshguard Version : 1.4rc3 License : bsd Using dpatch : no Using quilt : no Type of Package : cdbs Hit <enter> to confirm:
  68. 68. Empaquetar un paquete con CDBS Archivo debian/rulesl: #!/usr/bin/make -f include /usr/share/cdbs/1/rules/debhelper.mk include /usr/share/cdbs/1/class/autotools.mk # Add here any variable or target overrides you need. DEB_CONFIGURE_EXTRA_FLAGS := --with-firewall=iptables
  69. 69. Construir el paquete binario Para construir el paquete se tienen los siguientes comandos: ●dpkg-buildpackage -rfakeroot : Construye el paquete sin firmar, pero devuelve el mensaje de error que no se firmó el paquete. ●dpkg-buildpackage -rfakeroot -k<llave-gpg> si se va a firmar el paquete. ●dpkg-buildpackage -us -uc -rfakeroot : De esta forma se le dice que no firme el paquete. ●Debuild: Es otra herramienta de empaquetado, la diferencia es que hace la verificación de lintian de una vez, sin opción devuelve un mensaje de error que no se firmó el paquete. ●Debuild -k<llave-gpg> : Con esta opción se le pasa la llave gpg y pediré la clave de la llave secreta. ●debuild-pbuilder:Igual que debuild sólo que maneja las dependencias y crea una bitacora.
  70. 70. Verificar los paquetes Las herramientas para la verificación de paquetes son: ●Lintian lintian -i ../nombre-paquete_version-paquete_arch-paquete. [changes][dsc][deb] Pruebas de instalación: - Instalar en un sistema nuevo, eliminar -Actualizar desde versión anterior - Actualizar a una versión anterior, si es posible -Posiblemente usar un entorno chroot (ver debootstrap) o qemu, pero puede esperar (avanzado)
  71. 71. Crear Parches
  72. 72. Crear parches con dpatch Versión con CDBS dh_make -f ../sshguard-1.4rc3.tar.bz2 -c BSD -s -b --dpatch Maintainer name : Ernesto Nadir Crespo Avila Email-Address : ecrespo@debianvenezuela.org Date : Sat, 11 Apr 2009 18:55:20 -0430 Package Name : sshguard Version : 1.4rc3 License : bsd Using dpatch : yes Using quilt : no Type of Package : cdbs Hit <enter> to confirm: Versión con Debhelper ecrespo@canaima:~/empaquetado/Ejercicios/fuentes/sshguar d/sshguard-1.4rc3$ dh_make -f ../sshguard-1.4rc3.tar.bz2 -c BSD -s --dpatch Maintainer name : Ernesto Nadir Crespo Avila Email-Address : ecrespo@debianvenezuela.org Date : Sat, 11 Apr 2009 18:58:02 -0430 Package Name : sshguard Version : 1.4rc3 License : bsd Using dpatch : yes Using quilt : no Type of Package : Single Hit <enter> to confirm
  73. 73. Crear parches con dpatch El debian/rules para debhelper con dptach: Lo más relevante del rules es este include: include /usr/share/dpatch/dpatch.make Para el caso de CDBS es lo siguiente: include /usr/share/cdbs/1/rules/dpatch.mk Para colocar los patch simplemente se crea un directorio debian/patched y ahí se ubicarán los parches: Un ejemplo de creación de parches a continuación: cd udev*/ cp -a . /tmp/old pushd /tmp/old debian/rules patch cp -a . /tmp/new; cd ../new sed -i s/Linux/Penguin/g README cd .. diff -Nurp old new > 90_penguins.patch popd mv /tmp/90_penguins.patch debian/patches rm -rf /tmp/old /tmp/new
  74. 74. Empaquetar con SCV
  75. 75. Empaquetar con Herramientas CV. subversion Existe el repositorio de subversion de paquetes en /var/repo/ . Para migrar el paquete se hace necesario ejecutar svn- inject que crea los módulos y directorios necesarios. svn-inject -o -c 2 /ruta/al/paquete/antiguo/pyhello.dsc ffile:///var/deb-repo A parte de crear los módulos y directorios el comando ha hecho un checkout: ~/prj$ ls pyhello tags trunk ~/prj$ svn info pyhello Ruta: pyhello URL: file:///var/deb-repo/pyhello Raíz del repositorio: file:///var/deb-repo UUID del repositorio: 57189996-dc92-4614-af31- cdb96cf453dc Revisión: 1 Tipo de nodo: directorio
  76. 76. Empaquetar con Herramientas CV. subversion Svn-buildpackage tiene 2 modos: ●Manteniendo el repo y los archivos de upstream. Opción por defecto. ●Manteniendo sólo los archivos de gestión del paquete, se puede activar con la opción -o en svn-inject. Compilando el paquete: Desde el directorio trunk ejecutar: svn-buildpackage -us -uc -rfakeroot Si además se quiere verificar los errores con linda o lintian svn-buildpackage -us -uc —svn-lintian —svn-linda -rfakeroot Cerrar un bug: Si se existe un bug en el programa sin que exista un nuevo upstream se hace necesario regenerar el paquete para su distribución. Para crear una liberación menor se ejecuta el comando: ~/prj/pyhello/trunk$ svn-buildpackage —svn-tag-only Esto crea una entrada en debian/changelog que se debe editar para luego compilar el paquete. Cuando todo este bien se sube los cambios al repo: ~/prj/pyhello$ svn ci Ahora existe un nuevo directorio en pyhello/tags/0.1-1. Esto es equivalente a usar dch -i sin usar svn-buildpackage.
  77. 77. Empaquetar con Herramientas CV. subversion Nueva versión del upstream: Cuando el autor del software crea una nueva versión es necesario como mantenedor empaquetarla. Para ello descargar el paquete tar.gz de internet o del sitio del programador. Ejecutar el siguiente comando para subir la nueva versión ~/prj/pyhello$ svn ci Luego ejecutar los mismos pasos para cerrar un bug. Este proceso es equivalente a usar a mano el comando uupdate -u.
  78. 78. Empaquetar con Herramientas CV. mercurial Mercurial es un sistema de control de versiones distribuido desarrollado en python. Tiene la facilidad de subversion con el poder de otro control de versiones distribuido llamado git. Más información en: http://www.selenic.com/mercurial/wiki/index.cgi/SpanishTutorial Se debe crear un repositorio mercurial: hg repositorio Luego crear 2 repositorios, uno para el paquete Debian y el otro para el paquete fuente: cd repositorio hg init sshguard hg init sshguard.upstream A continuación se importa las fuentes del paquete: hg-importdsc /home/ecrespo/paquetes/sshguard/sshguard_1.3-1.dsc
  79. 79. Empaquetar con Herramientas CV. mercurial Modificar los archivos debian/rules, debian/control para que soporte tcpd en vez de iptables el programa sshguard: ./configure $(CROSS) --prefix=/usr --mandir=$$ {prefix}/share/man --with-firewall=hosts --infodir=$$ {prefix}/share/info CFLAGS="$(CFLAGS)" LDFLAGS="-Wl,- z,defs" Archivo debian/control: Source: sshguard Section: net Priority: optional Maintainer: Ernesto Nadir Crespo Avila Build-Depends: debhelper (>= 7), autotools-dev Standards-Version: 3.8.0 Homepage: http://sshguard.sourceforge.net/ Package: sshguard Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, tcpd Description: Protects from brute force attacks against ssh Protects networked hosts from the todays widespread brute force attacks against ssh servers. It detects such attacks and blocks the authors address with a firewall rule.
  80. 80. Empaquetar con Herramientas CV. mercurial Se hacen los cambios en el archivo debian/changelog con el comando dch -i: sshguard (1.3-2) unstable; urgency=low * Remove iptables depend in build-depends in debian/control file. * Add tcpd depend in depends in debian/control file. * Change configure option in debian/rules to hosts. -- Ernesto Nadir Crespo Avila Tue, 14 Apr 2009 14:06:01 -0430 Al ejecutar el comando hg status apareceran los cambios realizados a los archivos: ecrespo@canaima:~/repositorio/repositorio/sshguard/debian$ hg status M debian/changelog M debian/control M debian/rules
  81. 81. Empaquetar con Herramientas CV. mercurial Para agregar los cambios al repositorio se ejecuta un commit: ecrespo@canaima:~/repositorio/repositorio/sshguard$ hg commit -m"Change control and rules files" -u "Ernesto Nadir Crespo Avila " Al ejecutar hg log se muestra los cambios realizados: changeset: 5:7a64e00a1c05 tag: tip user: Ernesto Nadir Crespo Avila date: Tue Apr 14 14:11:19 2009 -0430 summary: Change control and rules files changeset: 4:19b2688f71ec user: ecrespo@canaima date: Tue Apr 14 13:57:26 2009 -0430 summary: Added tag DEBIAN_sshguard_1.3-1 for changeset a7094766c4e6 changeset: 3:a7094766c4e6 tag: DEBIAN_sshguard_1.3-1 user: ecrespo@canaima date: Tue Apr 14 13:57:25 2009 -0430 summary: Import Debian sshguard 1.3-1 changeset: 2:85a24e090d85 user: ecrespo@canaima date: Tue Apr 14 13:57:24 2009 -0430 summary: Added tag UPSTREAM_sshguard_1.3_TAG for changeset f61bc4db3564 changeset: 1:f61bc4db3564 tag: UPSTREAM_sshguard_1.3_TAG user: ecrespo@canaima date: Tue Apr 14 13:57:24 2009 -0430 summary: Added tag UPSTREAM_sshguard_1.3 for changeset b438c8517fe7 changeset: 0:b438c8517fe7 tag: UPSTREAM_sshguard_1.3 user: ecrespo@canaima date: Tue Apr 14 13:57:24 2009 -0430 summary: Import upstream sshguard version 1.3 Se jalan los cambios al repositorio: ecrespo@canaima:~/repositorio/repositorio$ hg pull sshguard pulling from sshguard requesting all changes adding changesets adding manifests adding file changes added 7 changesets with 66 changes to 60 files (run hg update to get a working copy)
  82. 82. Empaquetar con Herramientas CV. mercurial Se actualiza el repositorio: ecrespo@canaima:~/repositorio/repositorio$ hg update 60 files updated, 0 files merged, 0 files removed, 0 files unresolved Ahora se crea el paquete: ecrespo@canaima:~/repositorio/repositorio$ hg-buildpackage -rfakeroot -kEn este momento se tiene el paquete .deb yylos archivos creados En este momento se tiene el paquete .deb los archivos creadosen el momento del empaquetado: en el momento del empaquetado:ecrespo@canaima:~/repositorio$ ls ecrespo@canaima:~/repositorio$ lssshguard_1.3-2.diff.gz sshguard_1 sshguard_1.3-2.diff.gz sshguard_1.3-2_i386.build sshguard_1.3-2_i386.deb .3-2_i386.build sshguard_1.3-2_i386.debrepositorio sshguard_1.3-2.dsc sshguard_1.3-2_i386.changes repositorio sshguard_1.3-2.dsc sshguard_1.3-2_i386.changessshguard_1.3.orig.tar.gz sshguard_1.3.orig.tar.gz
  83. 83. Crear Paquetes Backports
  84. 84. Backport a razón que existe backports es el lento mecanismo de“release” de Debian. Al utilizar backportsse pierde la ventaja que ofrece Debian de estabilidad (IE senecesitaran hacer backports de parchesde seguridad).La opción que se tiene es crear una jaula con chroot de laversión de lenny o etch.Mkdir /home/usuario/etch debootstrap etch /home/usuario/etchhttp://debian.dst.pdvsa.com/debian/Luego entrar a la jaula:chroot /home/usuario/etch/Modificar el archivo sources.list para que tenga el repositoriobackport.deb http://www.backports.org/debian lenny-backports maincontrib non-freeInstalar las llaves del backport:apt-get install debian-backports-keyringActualizar la lista de paquetes y bajar sshguard del backport.
  85. 85. Backport Condiciones para crear un backport: Los paquetes tienen que estar en testing. Agregar en el changelog el número de paquete : “~bpo${debian_release}+${build_int}” Ejemplo : “1.2.3-4” pasa a “1.2.3-4~bpo50+1” o para paquetes nativos: “1.2.3” pasa a “1.2.3~bpo50+1” Ejemplo: sshguard (1.0-2~bpo40+1) etch-backports; urgency=low * Rebuild for etch-backports. -- Mohammed Adnène Trojette <adn+deb@diwi.org> Sun, 29 Jun 2008 14:00:42 +0200 sshguard (1.0-2) unstable; urgency=low
  86. 86. Backport Las dependencias se tienen que manejar de la versión del backport, igualmente para el policy de Debian. Archivo debian/control: Source: sshguard Section: net Priority: optional Maintainer: Ernesto Nadir Crespo Avila <ecrespo@debianvenezuela.org> Build-Depends: debhelper (>= 5), autotools-dev, iptables Standards-Version: 3.7.3 Homepage: http://sshguard.sourceforge.net/ Package: sshguard Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Description: protects from brute force attacks against ssh Protects networked hosts from the todays widespread brute force attacks against ssh servers. It detects such attacks and blocks the authors address with a firewall rule.
  87. 87. Metapaquetes
  88. 88. Paquetes virtuales, metapaquetes y dummy Un paquete virtual es un nombre genérico que aplica a cualquiera grupo de paquetes que proveen la misma funcionalidad. Por ejemplo, los programas tin y trn son lectores de noticias, y por ende deben satisfacer cualquier dependencias que requieran un lector de noticias en el sistema, para poder funcionar. Por ende ambos se le dice que son “paquetes virtuales” llamados news-readers (lectores-de-noticias). Tipos de paquetes: ●Paquetes de dependencias, ●Paquetes de cambios de configuración. Un ejemplo es crear el paquete accesibilidad, este manejará las dependencias de todos los paquetes que se necesiten para darle accesibilidad a un computador. O crear un paquete que realice los cambios necesarios en la configuración de los usuarios para que soporte accesibilidad.
  89. 89. Equivs Crear metapaquete con equivs. Este paquete maneja dos programas: ● equivs-control: Crea un archivo como el archivo control de los paquetes de debian donde se maneja la información del mantenedor, versión del paquete, dependencias entre otras cosas. ● equivs-build: Crea el metapaquete del archivo que crea equivs-control.
  90. 90. Equivs Para crear la plantilla se ejecuta el comando con el nombre del paquete: equivs-control accesibilidad. Esto crea la siguiente plantilla: ### Commented entries have reasonable defaults. ### Uncomment to edit them. Section: misc Priority: optional Standards-Version: 3.6.2 Package: # Version: # Maintainer: Your Name # Pre-Depends: # Depends: # Recommends: # Suggests: # Provides: # Replaces: # Architecture: all # Copyright: # Changelog: # Readme: # Extra-Files: Description: long description and info . second paragraph
  91. 91. Equivs Section: misc Priority: optional Standards-Version: 3.8.0 Package: accesibilidad Version: 1.0 Maintainer: Ernesto Nadir Crespo Avila Depends: brltty, brltty-x11, libcolorblind-dev, libcolorblind0, gnome-orca Architecture: all Description: Metapaquete para la instalacion de aplicaciones de accesibilidad Metapaquete para la instalacion de aplicaciones de accesibilidad para personas invidentes
  92. 92. Equivs Para crear el paquete se ejecuta el comando equivs-build accesibilidad. ecrespo@canaima:~/canaima2/accesibilidad$ equivs-build accesibilidad dh_testdir dh_testroot dh_clean -k dh_testdir dh_testroot dh_install dh_installdocs dh_installchangelogs dh_compress dh_fixperms dh_installdeb dh_gencontrol dh_md5sums dh_builddeb dpkg-deb: construyendo el paquete `accesibilidad en `../accesibilidad_1.0_all.deb. The package has been created. Attention, the package has been created in the current directory, not in ".." as indicated by the message above!
  93. 93. Equivs Si se desea firmar el metapaquete con la llave GPG se usa la opción -f claro se debe tener la llave del usuario en el equipo. El comando equivs-build -f canaima-caribay-radio ... Necesita una frase contraseña para desbloquear la clave secreta del usuario: "Ernesto Nadir Crespo Avila (seraph1) <ecrespo@debian.org.ve>" clave DSA de 1024 bits, ID C97E7015, creada el 2005-08-15 dpkg-genchanges >../canaima-caribay-radio_1.0_amd64.changes dpkg-genchanges: incluyendo el código fuente completo en la subida signfile canaima-caribay-radio_1.0_amd64.changes Necesita una frase contraseña para desbloquear la clave secreta del usuario: "Ernesto Nadir Crespo Avila (seraph1) <ecrespo@debian.org.ve>" clave DSA de 1024 bits, ID C97E7015, creada el 2005-08-15 dpkg-source --after-build equivs.nAXaSZ dpkg-buildpackage: subida completa; paquete nativo de Debian (se incluye la fuente completa) The package has been created. Attention, the package has been created in the current directory, not in ".." as indicated by the message above!
  94. 94. Equivs Crear metapaquete con Archivo de configuración (equivs) El programa gnome-orca crea un perfil de configuración para cada usuario. La forma de copiar dichos archivos a los usuarios creados es copiar toda la configuración en el directorio /etc/skell/ . Se creará el metapaquete canaima-accesibilidad-escritorio: equivs-control canaima-accesibilidad-escritorio
  95. 95. Equivs El archivo control de canaima-accesibilidad-escritorio contendrá lo siguiente: Section: misc Priority: optional Homepage: http://canaima.softwarelibre.gob.ve Standards-Version: 3.9.1 Package: canaima-accesibilidad-visual-escritorio Version: 1:0.1 Maintainer: Ernesto Nadir Crespo Avila <ecrespo@centitel.gob.ve> Depends: at-spi, brltty, brltty-flite, brltty-speechd, brltty-x11, listen, espeak, festival, festvox-sflpc16k, festvox-palpc16k, gnome-orca, gnome-accessibility- themes, gnome-accessibility, libcolorblind0, gnome-mag, libgail-common, mousetweaks, dots, ${misc:Depends} Architecture: any Copyright: copyright Changelog: changelog Files: ./conf/.orca/user-settings.py /etc/skell/.orca/user-settings.py ./conf/.orca/app-settings/__init__.py /etc/skell/.orca/app-settings/__init__.py ./conf/.orca/orca-scripts/__init__.py /etc/skell/.orca/orca-scripts/__init__.py ./conf/.orca/user-settings.pyc /etc/skell/.orca/user-settings.pyc ./conf/.orca/app-settings/__init__.pyc /etc/skell/.orca/app- settings/__init__.pyc ./conf/.orca/orca-scripts/__init__.pyc /etc/skell/.orca/orca- scripts/__init__.pyc Description: Programas de Accesibilidad para Canaima GNU/Linux Este metapaquete provee los programas de accesibilidad y configuraciones para que las personas con discapacidad puedan utilizar canaima GNU/Linux.
  96. 96. Equivs El archivo Changelog contendrá lo siguiente: canaima-accesibilidad-visual-escritorio (1.0:0.1) unstable; urgency=low * First release. -- Ernesto Nadir Crespo Avila <ecrespo@cenditel.gob.ve> Thu, 22 Sep 2011 22:33:15 -0430
  97. 97. Equivs El archivo Copyright contendrá lo siguiente: Authors: Copyright (C) 2011 Ernesto Nadir Crespo Avila <ecrespo@cenditel.gob.ve> License: This package is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 dated June, 1991. This package is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA On Debian GNU/Linux systems, the complete text of the GNU General Public License can be found in `/usr/share/common-licenses/GPL-2
  98. 98. Equivs Luego de crear el metapaquete con equivs-buid: equivs-build -f canaima-accesibiliad-escritorio Se puede revisar el contenido del paquete binario: dpkg -c canaima-accesibilidad-visual-escritorio_0.1_amd64.deb drwxr-xr-x root/root 0 2011-09-23 08:41 ./ drwxr-xr-x root/root 0 2011-09-23 08:41 ./usr/ drwxr-xr-x root/root 0 2011-09-23 08:41 ./usr/share/ drwxr-xr-x root/root 0 2011-09-23 08:41 ./usr/share/doc/ drwxr-xr-x root/root 0 2011-09-23 08:41 ./usr/share/doc/canaima- accesibilidad-visual-escritorio/ -rw-r--r-- root/root 1044 2011-09-23 08:41 ./usr/share/doc/canaima- accesibilidad-visual-escritorio/README.Debian -rw-r--r-- root/root 171 2011-09-23 08:41 ./usr/share/doc/canaima- accesibilidad-visual-escritorio/changelog.gz -rw-r--r-- root/root 896 2011-09-23 08:41 ./usr/share/doc/canaima- accesibilidad-visual-escritorio/copyright drwxr-xr-x root/root 0 2011-09-23 08:41 ./etc/ drwxr-xr-x root/root 0 2011-09-23 08:41 ./etc/skell/ drwxr-xr-x root/root 0 2011-09-23 08:41 ./etc/skell/.orca/ drwxr-xr-x root/root 0 2011-09-23 08:41 ./etc/skell/.orca/app-settings/ -rwxr-xr-x root/root 0 2011-09-23 08:41 ./etc/skell/.orca/app- settings/__init__.py -rw-r--r-- root/root 111 2011-09-23 08:41 ./etc/skell/.orca/app- settings/__init__.pyc -rw-r--r-- root/root 7291 2011-09-23 08:41 ./etc/skell/.orca/user-settings.py -rw-r--r-- root/root 6193 2011-09-23 08:41 ./etc/skell/.orca/user-settings.pyc drwxr-xr-x root/root 0 2011-09-23 08:41 ./etc/skell/.orca/orca-scripts/ -rwxr-xr-x root/root 0 2011-09-23 08:41 ./etc/skell/.orca/orca- scripts/__init__.py -rw-r--r-- root/root 111 2011-09-23 08:41 ./etc/skell/.orca/orca- scripts/__init__.pyc
  99. 99. Equivs Crear metapaquete con archivos postinst y prerm (equivs). Ahora aparte de colocar los archivos en /etc/skell para los copiar la configuración en los usuarios que se creen a continuación es necesario copiar la configuración a los usuarios ya existentes. En este caso se muestra la creación del metapaquete canaima-radiotray-conf: $equivs-control canaima-radiotray-conf El archivo control contendrá: Section: misc Priority: optional Homepage: http://canaima.softwarelibre.gob.ve Standards-Version: 3.9.1 Package: canaima-radiotray-conf Version: 0.1 Maintainer: Ernesto Nadir Crespo Avila <ecrespo@cenditel.gob.ve> Pre-Depends: radiotray Depends: ${misc:Depends} Architecture: all Copyright: copyright Changelog: changelog Files: ./radiotray/radiotray.desktop /etc/skel/.config/autostart/radiotray.desktop ./radiotray/bookmarks.xml /etc/skel/.local/share/radiotray/bookmarks.xml ...
  100. 100. Equivs ... File: postinst #!/bin/sh -e # preinst for main-package-config. Divert some configuration file of main-package. . set -e . PKG=canaima-radiotray-conf if [ "$1" = configure ] ; then for usuario in /home/*? ; do usuario_min=$(basename $usuario) case $(grep "${usuario_min}:.*:.*:.*:.*:.*:::" /etc/shadow ) in ) #no se hace nada ;; *) usuario=${usuario_min} if [ -f /home/${usuario}/.config/autostart/radiotray.desktop ]; then cp -r /etc/skel/.config/autostart/radiotray.desktop /home/${usuario}/.config/autostart/radiotray.desktop chown ${usuario}.${usuario} /home/${usuario}/.config/autostart/radiotray.desktop else mkdir -p /home/${usuario}/.config; chown -R ${usuario}.${usuario} /home/${usuario}/.config mkdir -p /home/${usuario}/.config/autostart; chown -R ${usuario}.${usuario} /home/${usuario}/.config/autostart cp -r /etc/skel/.config/autostart/radiotray.desktop /home/${usuario}/.config/autostart/radiotray.desktop chown ${usuario}.${usuario} /home/${usuario}/.config/autostart/radiotray.desktop fi if [ -f /home/${usuario}/.local/share/radiotray/bookmarks.xml ]; then cp -r /etc/skel/.local/share/radiotray/bookmarks.xml /home/${usuario}/.local/share/radiotray/bookmarks.xml chown ${usuario}.${usuario} /home/${usuario}/.local/share/radiotray/bookmarks.xml else mkdir -p /home/${usuario}/.local; chown -R ${usuario}.${usuario} /home/${usuario}/.local mkdir -p /home/${usuario}/.local/share; chown -R ${usuario}.${usuario} /home/${usuario}/.local/share mkdir -p /home/${usuario}/.local/share/radiotray; chown -R ${usuario}.${usuario} /home/$ {usuario}/.local/share/radiotray cp -r /etc/skel/.local/share/radiotray/bookmarks.xml /home/${usuario}/.local/share/radiotray/bookmarks.xml chown ${usuario}.${usuario} /home/${usuario}/.local/share/radiotray/bookmarks.xml fi esac done fi Exit 0 ...
  101. 101. Equivs ... File: prerm #!/bin/sh -e set -e PKG=canaima-radiotray-conf if [ "$1" = configure ] ; then for usuario in /home/*? ; do usuario_min=$(basename $usuario) case $(grep "${usuario_min}:.*:.*:.*:.*:.*:::" /etc/shadow ) in ) #no se hace nada ;;. *) usuario=${usuario_min} if [ -f /home/${usuario}/.config/autostart/radiotray.desktop ]; then rm -f /home/${usuario}/.config/autostart/radiotray.desktop fi if [ -f /home/${usuario}/.local/share/radiotray/bookmarks.xml ]; then rm -f /home/${usuario}/.local/share/radiotray/bookmarks.xml fi esac done fi exit 0 Description: Radiotray bookmarks to Venezuelan radio streaming Radiotray config to autostart in gnome and radio stream bookmark
  102. 102. Equivs Dentro del directorio de trabajo se crea el directorio radiotray $mkdir radiotray El directorio contendrá 2 archivos: radiotray.desktop y bookmarks.html: radiotray.desktop: [Desktop Entry] Type=Application Exec=radiotray Hidden=false X-GNOME-Autostart-enabled=true Name[es_VE]=radiotray Name=radiotray Comment[es_VE]=Cliente de radio por internet Comment=Cliente de radio por internet bookmarks.html: <bookmarks> <group name="Venezuela"> <bookmark name="RNV Canal Clásico" url="http://www.telepuertovirtual2.tv/rnvclasico "/> <bookmark name="AlbaCiudad 96.3" url="http://albaciudad96.org/radio/"/> <bookmark name="RNV noticias" url="http://www.telepuertovirtual2.tv/rnvnoticias"/> <bookmark name="Radio Mágica 106.3 FM" url="http://resorte.solve.web.ve:8000/magicafm.ogg "/> </group> <group name="Linux"> <bookmark name="SOLVE" url="http://resorte.solve.web.ve:8000/RadioSolve.ogg"/> <bookmark name="Radio Cooperativa Tecnológica Somos Libre Barinas" url="http://resorte.solve.web.ve:8000/RadioSLBarinas.ogg"/> <bookmark name="Radio entreHackes" url="http://resorte.solve.web.ve:8000/entrehackers.ogg"/> <bookmark name="Radio enredate" url="http://resorte.solve.web.ve:8000/enredate.ogg"/> </group> </bookmarks>
  103. 103. Equivs Luego se ejecuta el comando equivs-build y se instala la aplicación. En la figura se muestra el radiotray en el escritorio del usuario
  104. 104. Paquetes de configuración El programa config-package-dev permite crear paquetes de configuración que sobre escriben configuraciones ya existentes en el directorio /etc/ . El paquete que se le sobre escribirá su configuración es el openssh-server. Este programa tiene su archivo de configuración como servidor en /etc/ssh/sshd_config. La configuración por defecto permite que el usuario root acceda a equipos de forma remota y se permite reenviar paquetes de conexiones gráficas.
  105. 105. Paquetes de configuración El archivo sshd_config contiene lo siguiente: Port 22 Protocol 2 HostKey /etc/ssh/ssh_host_rsa_key HostKey /etc/ssh/ssh_host_dsa_key HostKey /etc/ssh/ssh_host_ecdsa_key UsePrivilegeSeparation yes KeyRegenerationInterval 3600 ServerKeyBits 768 SyslogFacility AUTH LogLevel INFO LoginGraceTime 120 PermitRootLogin yes StrictModes yes RSAAuthentication yes PubkeyAuthentication yes IgnoreRhosts yes RhostsRSAAuthentication no HostbasedAuthentication no PermitEmptyPasswords no ChallengeResponseAuthentication no X11Forwarding yes X11DisplayOffset 10 PrintMotd no PrintLastLog yes TCPKeepAlive yes AcceptEnv LANG LC_* Subsystem sftp /usr/lib/openssh/sftp-server Se cambia a no ambas opciones de configuración.
  106. 106. Paquetes de configuración Crear el directorio de trabajo: mkdir canaima-sshd-config-0.1 Dentro del directorio de trabajo se crea los directorios debian y files: cd canaima-sshd-config-0.1 mkdir -p debian files En el directorio files se creará el directorio etc, dentro de el se crea el directorio ssh y se copiará el archivo sshd_config a ese directorio: mkdir -p files/etc mkdir -p files/etc/ssh cp /etc/ssh/sshd_config ./files/etc/ssh/sshd_config.canaima Se modifica el archivo sshd_config.canaima para que los parámetros de acceso como root y reenviar paquetes X11 aparezcan como no: PermitRootLogin no X11Forwarding no Se crea el archivo debian/copyright y debian/changelog como se ha explicado anteriormente. Se crea el archivo debian/compat conteniendo el valor 7 (según versión de políticas de Debian).
  107. 107. Paquetes de configuración Se crea el archivo debian/control y debian/control.in con el siguiente contenido: Source: canaima-sshd-config Section: config Priority: extra Maintainer: Ernesto Nadir Crespo Avila <ecrespo@gmail.com> Build-Depends: cdbs (>= 0.4.23-1.1), debhelper (>= 4.2.0), config-package-dev (>= 4.5~) Standards-Version: 3.9.2 Package: canaima-sshd-config Architecture: all Pre-Depends: openssh-server Depends: cdbs, ${misc:Depends} Provides: ${diverted-files} Conflicts: ${diverted-files} Description: Archivo de configuracion de ssh Archivo de configuracion del servidor ssh. Se crea el archivo debian/canaima-sshd-config.install con la ruta donde se encuentran los archivos de configuración: files/* /
  108. 108. Paquetes de configuración Se crea el archivo debian/rules, en este archivo se define la extensión .canaima la cual permite diferenciar los paquetes base de Debian de la distribución Canaima, además se define el archivo a modificar y se incluye los cdbs necesarios: #!/usr/bin/make -f DEB_DIVERT_EXTENSION = .canaima # Replace some base files with simple replacements. DEB_DIVERT_FILES_canaima-sshd-config += /etc/ssh/sshd_config.canaima # These files are installed via dh_install from the files/ directory # (see debian/canaima-sshd-config.install) include /usr/share/cdbs/1/rules/debhelper.mk include /usr/share/cdbs/1/rules/config-package.mk Para crear el paquete se ejecuta el comando dpkg-buildpackage: dpkg-buildpackage -rfakeroot -k<Llave GPG>
  109. 109. Paquetes de configuración Verificar la instalación del paquete: dpkg -i canaima-sshd-config_0.1_all.deb Selecting previously unselected package canaima-sshd-config. (Leyendo la base de datos ... 418546 ficheros o directorios instalados actualmente.) Desempaquetando canaima-sshd-config (de canaima-sshd-config_0.1_all.deb) ... Configurando canaima-sshd-config (0.1) ... Añadiendo `desviación de /etc/ssh/sshd_config a /etc/ssh/sshd_config.canaima-orig por canaima-sshd-config Al listar los archivos /etc/ssh/sshd_config* ls -l /etc/ssh/sshd_config* lrwxrwxrwx 1 root root 19 nov 13 16:16 sshd_config -> sshd_config.canaima -rw-r--r-- 1 root root 2487 nov 13 10:15 sshd_config.canaima -rw-r--r-- 1 root root 2489 nov 13 13:20 sshd_config.canaima-orig Al remover el paquete se elimina los enlaces y queda el archivo original del sshd_config.
  110. 110. Repositorio local de paquetes
  111. 111. Repositorio local de paquetes Debido a que los paquetes virtuales, dummies o metapaquetes no se pueden instalar con el comando dpkg por que no resuelve dependencias se hace necesario crear un repositorio personal de paquetes de Debian. Es necesario tener un servidor web: apache2, lighttpd o cherokee. Se necesita instalar el paquete reprepo: aptitude install reprepo La estructura del repositorio es la siguiente: ●Conf: Donde estará el archivo de configuración distribution. ●Dists:Se tiene un directorio por cada versión de la distribución. ●Pool: Se encuentran los paquetes clasificados por sección y en orden alfabético.
  112. 112. Repositorio local de paquetes Archivo conf/distribution: Origin: Paquetes Ernesto Label: Paquetes Ernesto Suite: unstable Codename: sid Architectures: i386 source Components: main Description: Paquetes elaborados por Ernesto Crespo Origin: Paquetes Ernesto Label: Paquetes Ernesto Suite: testing Codename: lenny Architectures: i386 source Components: main Description: Paquetes elaborados por Ernesto Crespo Origin: Paquetes Ernesto Label: Paquetes Ernesto Suite: stable Codename: etch Architectures: i386 source Components: main Description: Paquetes elaborados por Ernesto Crespo
  113. 113. Repositorio local de paquetes Para subir un paquete binario se ejecuta el comando reprepo con las siguientes opciones: reprepro -b . -V -C main includedeb sid accesibilidad_1.0_all.deb Para subir las fuentes de un paquete se ejecuta: reprepro -b . -V -C main includedsc sid sshguard_1.4rc3-1.dsc Y su binario: reprepro -b . -V -C main includedeb sid sshguard_1.4rc3- 1_i386.deb Para eliminar un paquete del repositorio se ejecuta: reprepro -b . -V -C main remove sid sshguard_1.4rc3- 1_i386.deb Para utilizar el repositorio se modifica el archivo /etc/apt/sources.list deb http://midominio/repo/ sid main Luego se ejecuta aptitude update y listo.
  114. 114. Referencias:●Adoptar un paquete:http://wiki.debian.org/AdoptarUnPaquete●Completa guía de empaquetado:https://wiki.ubuntu.com/PackagingGuide/Complete●Tutorial de empaquetado:http://women.debian.org/wiki/English/PackagingTutorial●CDBS:https://perso.duckcorp.org/duck/cdbs-doc/cdbs-doc.xhtml●Mantener un paquete con subversion:http://crysol.org/es/node/620●Paquetes de configuración:http://debathena.mit.edu/config-packages/●Paquete de configuración:http://wiki.debian.org/ConfigPackages●Como usar dpatch:http://matrixhasu.altervista.org/index.php?view=use_dpatch●Empaquetar con git:http://wiki.debian.org/PackagingWithGit●Empaquetar con mercurial:http://ernesto-ecrespo.blogspot.com/2009/04/subir-un-paquete-debian-pyching-al.html●Scripts de mantenimiento:http://women.debian.org/wiki/English/MaintainerScripts●Sistema de parches:https://wiki.ubuntu.com/PackagingGuide/PatchSystems●Quilt:http://pkg-perl.alioth.debian.org/howto/quilt.html●Guía de empaquetado de aplicaciones en python:https://wiki.ubuntu.com/PackagingGuide/Python●Empaquetado:http://women.debian.org/wiki/English/BuildingTutorial●Empaquetar sin ayuda:http://women.debian.org/wiki/English/BuildingWithoutHelper●Guía para empaquetar aplicaciones de kde:https://wiki.ubuntu.com/PackagingGuide/KDE?action=show&redirect=KubuntuPackagingGuide●Guía de empaquetado:https://help.ubuntu.com/6.10/ubuntu/packagingguide/C/index.html●Libro de bolsillo:https://wiki.ubuntu.com/PackagingGuide/HandsOn●Crear un metapaquete:http://blog.ibeentoubuntu.com/2008/08/howto-create-debian-metapackage.html●dpath:http://blog.orebokech.com/2007/08/converting-debian-packages-from-dpatch.html●Metapaquete con equivs:http://ernesto-ecrespo.blogspot.com/2009/03/como-crear-un-metapaquete.html●Mensajes de lintian:http://lintian.debian.org/tags.html●Backport: http://www.backports.org/dokuwiki/doku.php?id=contribute
  115. 115. Contacto: Ernesto Crespo Correo: ecrespo@gmail.com Twitter: @_seraph1 Blog: http://ernesto-ecrespo.blogspot.com
  116. 116. Derechos: Está presentación está basada en: ●Presentación de Empaquetado de Isaac Clerencia DD ●Presentación de Empaquetado de Larz Wirzenius ●Presentación de J. Feliz Ontañón ●Tutorial de empaquetado sin ayuda de Debian-Women (Miriam Ruiz) ●Tutoriales de Mario Izquierdo (Mario Debian) de su blog http://mariodebian.com/ ●Tutoriales de empaquetado del http://blog ernesto-ecrespo.blogspot.com

×