Taller de Empaquetado para Debian y Canaima

116
Empaquetado para Debian y Canaima Ernesto Nadir Crespo Avila [email protected] @_seraph1 Presentación liberada bajo licencia Creative Commons Versión 3.0

description

Taller de empaquetado para Debian y Canaima

Transcript of Taller de Empaquetado para Debian y Canaima

  • 1. Empaquetado para Debian y Canaima Versin 3.0Ernesto Nadir Crespo [email protected]@_seraph1Presentacin liberada bajo licencia Creative Commons

2. Dennis RitchieDennis Ritchie 3. AgendaFundamentos bsicosEmpaquetarCrear parchesEmpaquetado usando SCVPaquetes BackportsMetapaquetesRepositorio local de paquetes 4. Fundamentos Bsicos 5. Historia del S.O. Unix y GNU/LinuxA finales de 1960 los Laboratorios Bell trabajan en un S.O.MulticsEn 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/IPEn 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 ao 1983, Richard Stallman crea El proyecto GNU paracrear un S.O. Libre que fuera como Unix, ya se tena uninterpretador de comandos, compilador, un sistema dearchivos y un editor, slo faltaba el kernel del Sistemaoperativo y fue gracias al Kernel de Linux que hoy en da 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 contraccin delnombre de la ex-esposa Debra e Ian. 6. Historia del S.O. Unix y GNU/Linux 7. Distribuciones de GNU/Linux 8. Hitos importantes en los 20 aos de Linux 9. Estructura de GNU/LinuxHardware KernelShellAplicaciones 10. Programas Fuentes y binarios. Compilacin Programa Fuente: es un conjunto de lneas de texto que son las instrucciones que debe seguir la computadora para ejecutar dicho programa. Por tanto, en el cdigo fuente de un programa est descrito por completo su funcionamiento. El cdigo fuente de un programa est escrito por un programador en algn lenguaje de programacin, 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 conversin del cdigo fuente (serie de instrucciones) escrita por el programador a lenguaje de mquina 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. Paquete Un paquete contiene instrucciones en donde tienen que estar ubicados (en tu sistema de archivo) los archivos a instalar, dependencias de libreras u otros programas (si es que existe dependencias), instrucciones para la instalacin, y scripts bsicos de configuracin. Un paquete usualmente contiene software precompilado (o llamados binarios), pero tambin puede empaquetar cdigo fuente. 12. Bajar un paquete fuente y compilarlo El siguiente es un ejercicio para que conozcan el procedimiento de instalacin 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 configuracin con ./configure help. SshGuard necesita definirle en la configuracin cual firewall se va a usar, esto es con la opcin with-firewall=iptables. Ejecutar la configuracin: ./configure with-firewall=iptables Compilar: make Instalar: make install 13. Sistemas de gestin de paquetes Es una coleccin de herramientas que sirven para automatizar el proceso instalacin, actualizacin y eliminacin de paquetes. Maneja una base de datos de paquetes instalados y facilita la remocin limpia de dichos paquetes. 14. Objetivos de Debian y CanaimaDebianMejor sistema operativo libre posibleAsegurar que todo el software funcionaFacilitar la desintalacin de softwareQue paquete es el responsable de cada archivoFacilitar la instalacin 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 Distribucin Canaima.Por qu la Meta Distribucin Canaima? 15. Ciclo de desarrollo de Canaima 16. Lo necesario para ser desarrollador Debian 17. Desarrolladores Debian a nivel mundialDesarrolladores en Venezuela: Eloy Pars, Cesar Mendoza,Muammar El Khatib y Jos Luis Rivas.Mantenedores de paquetes: Christian Sanchez, ErnestoHernndez Novich, Gerardo Curiel, Manuel Garca, AlejandroGarrido, Juan Angulo Moreno, Ernesto Crespo y CarlosAlberto Silombria Ibarra. 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/ Gua del mantenedor:http://www.debian.org/doc/maint-guide/ Referencia del desarrollador: http://www.debian.org/doc/manuals/developers-reference/ Gua de empaquetado de libreras: 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. Donde buscar paquetes?Paquetes en Debian que necesitan ayuda: Paqueteshurfanos:http://www.debian.org/devel/wnpp/orphaned Paquetes por dejarlibres:http://www.debian.org/devel/wnpp/rfa_bypackage Paquetes enadopcin:http://www.debian.org/devel/wnpp/being_adoptedRepositorio 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. Paquetes disponibles para ser adoptados 21. Paquetes hurfanos 22. Paquete en adopcin 23. WNPPEn wnpp se tiene una descripcin del proceso de reporte defallos:http://www.debian.org/devel/wnpp/Tambin se maneja una descripcin de las etiquetas manejadas:O: Paquete ha sido abandonado y necesita nuevo responsable.RFA: Peticin por adopcin, debido a falta de tiempo, recursos ointers la persona encargada a dejado libre el paquete.RFH: Peticin 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: Peticin de empaquetado, alguien ha encontrado unprograma interesante y desea que un mantenedor o desarrolladorlo suba a Debian. 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 debera tener la siguiente estructura:To: [email protected]: nombre-apellidos retitle NNNNNN ITA: nombre-paquete -- descripcion-paqueteowner NNNNNN !ThanksDonde NNNNN es el nmero de bug para O RFA.Ms informacin de los comandos en:http://www.debian.org/Bugs/server-control 25. Adoptar un paquete hurfano 26. Intencin de empaquetar 27. Paquetes Fuente en DebianUn paquete fuente contiene archivos independientes de laarquitectura y tienen todo lo necesario para la construccin deun paquete binario:Se puede ejecutar para tener los fuentes del paquete hello:apt-get source helloHellhello_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 informacin de firma del empaquetador yverificacin 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. Contenido del directorio del paquete fuente 29. Contenido del directorio del paquete fuente 30. Contenido del directorio del paquete fuente 31. Contenido del directorio del paquete fuente 32. Contenido del directorio del paquete fuente 33. Estructura de un paquete Binario Un paquete Binario en Debian es un archivo con extensin .deb por la unin 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: Versin 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 configuracin 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. Metadato de un paqueteLa informacin 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 versinupstream (antes del -) y la versin Debian (despus del -).Architecture: El tipo de CPU para la cual fue hecho el paquete.Depends, Recommends, Suggests, Replaces, Conflicts,Enhances: Relaciones con otros paquetes. 35. Scripts de mantenimiento Scripts de mantenimiento son ejecutado cuando se instala y remueve un paquete. Estos estn tipicamente codificados en BASH o Perl.Los scripts estndares son: preinst: Ejecuta antes de extraccin de los archivos. postinst: Ejecuta despus de extraccin de los archivos. prerm: Ejecuta antes de remocin de los archivos. postrm: Ejecuta despus de remocin de los archivos. Para estandarizar la configuracin se puede utilizar el archivo: config: Hace preguntas a otros scripts de mantenimiento. 36. Secuencia de instalacin 37. Secuencia de desintalacin 38. Secuencia de purga 39. Secuencia de remocin y purga 40. Secuencia de actualizacin 41. Proceso de empaquetado 42. Proceso de empaquetado 43. Build o Binary? 44. Herramientas o programas necesarios... Existen tambin varios paquetes que sern necesarios para crear paquetes en un sistema Debian. La mayora 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 construccin de paquetes. Debhelper: Herramienta que facilita la creacin 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 construccin de un paquete y que cumpla las normativas de Debian. Pbuilder: Ambiente que permite probar paquetes o empaquetar. Piuparts: Herramienta de verificacin de la correcta instalacin de paquetes. Dpatch,Patch, diff,patchutils: Programa que se usa para aplicar parches. Quilt: Herramienta para aplicar parches. Manedit:Programa para la edicin de archivos de manual. aptitude install build-essential dh-make debhelper devscripts dpkg-dev fakeroot lintian pbuilder piuparts dpatch diff quilt manedit patchutils 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 creacin del entorno con chroot. Otra opcin es usar mquinas virtuales como: Qemu Kvm OpenVZ Xen User mode linux VirtualBox VMWare 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 Ms informacin en: http://people.debian.org/~anibal/talks/20050910-debian-peru.txt 47. Qu es Debhelper? El sistema de build help mas comn es debhelper, el cual provee una buena cantidad de comandos dh_* para la mayora 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. Adems, 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 eldirectorio adecuado con los nombres correctos. Saber que esta haciendo es bueno. 48. Qu es CDBS?Incluso con debhelper la mayora de los paquetes comparten gran parte del cdigo de los archivos debian/rules. cdbs es un sistema de construccin de paquetes Debian basado en la herencia entre Makefiles. Proporciona reglas estndar que pueden se fcilmente extendidas o reemplazadas. 49. Empaquetar 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.gzmv roaddemo-1.0.1.tar.gz roaddemo_1.0.1.orig.tar.gz cd roaddemo-1.0.1 Probar la configuracin, compilacin e instalacin 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. 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: roaddemoSection: gamesPriority: optionalMaintainer: Miriam Ruiz Build-Depends: libsdl1.2-dev, libgl-devStandards-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. Empaquetar un paquete sin ayuda Colocar el siguiente contenido en debian/copyright: This package was debianized by Miriam Ruiz on Sat, 8 Jan 2005 20:09:28 +0000. It was downloaded from http://www.newimage.com/~rhk/roaddemo/ Upstream Author: Ray Kelm 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. Empaquetar un paquete sin ayuda Colocar el siguiente contenido en debian/rules: #!/usr/bin/make -f # Debian Rules by Miriam Ruiz # 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. 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 Rulesconfigure-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. 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. 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. Empaquetar un paquete sin ayuda Colocar el siguiente contenido en debian/rules: includes nostripstrip -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. Empaquetar un paquete con debhelperBajar el paquete fuente sshguard:wget http://hivelocity.dl.sourceforge.net/sourceforge/sshguard/sshguard-1.4rc3.tar.bz2Descomprimir el paquete y cambiarse al directorio del paquete fuente:tar -xvjf sshguard-1.4rc3.tar.bz2cd sshguard-1.4rc3Crear las variables de entorno:export [email protected] DEBFULLNAME=nombre-apellidosEjecutar dh_make:dh_make -f ../sshguard-1.4rc3.tar.bz2 -c BSD -sCon este comando se define la licencia del paquete, que va a ser un slo paquetebinario 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.bz2ls debian/*debian/changelog debian/dirsdebian/init.d.ex debian/menu.exdebian/README.Debiandebian/compat debian/docs debian/init.d.lsb.ex debian/postinst.exdebian/rulesdebian/control debian/emacsen-install.ex debian/manpage.1.ex debian/postrm.exdebian/sshguard.default.exdebian/copyright debian/emacsen-remove.ex debian/manpage.sgml.exdebian/preinst.ex debian/sshguard.doc-base.EXdebian/cron.d.ex debian/emacsen-startup.ex debian/manpage.xml.exdebian/prerm.ex debian/watch.ex 59. Empaquetar un paquete con debhelperRenombrar los archivos watch.ex y sshguard.1.ex a watch y sshguard.1respectivamente.Eliminar el resto de archivos README.Debian, .ex y .EX .Ahora slo 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 cumentacin que viene con el programa, eneste caso slo README.El archivo compat tiene el nmero de versin de debhelper.El archivo watch contedr la versin del paquete y la ruta de donde se puedebajar el paquete:version=3http://sf.net/sshguard/sshguard-(.*).tar.gzPara 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.bz2Newest version on remote site is 1.4rc3, local version is 1.4rc3 => Package is up to date-- Scan finished~ 60. Empaquetar un paquete con debhelperArchivo copyright:This package was debianized by Ernesto Nadir Crespo Avila onFri, 03 Apr 2009 14:32:21 -0430.It was downloaded from http://sshguard.sourceforge.net/Upstream Author:sshguard maintainers Copyright:Copyright (C) 2007 sshguard TeamLicense:Redistribution and use in source and binary forms, with or withoutmodification, are permitted under the terms of the BSD License.THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS ANDANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THEIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSEARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLEFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIALDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODSOR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICTLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAYOUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OFSUCH DAMAGE.On Debian systems, the complete text of the BSD License can befound in `/usr/share/common-licenses/BSD.The Debian packaging is copyright 2009, Ernesto Nadir Crespo Avila andis licensed under the GPL, see `/usr/share/common-licenses/GPL. 61. Empaquetar un paquete con debhelper Archivo control: Source: sshguard Section: net Priority: optional Maintainer: Ernesto Nadir Crespo Avila 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. 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 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. 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. Empaquetar un paquete con debhelperArchivo rules:build: build-stampbuild-stamp: config.status dh_testdir# Add here commands to compile the package.$(MAKE)#docbook-to-man debian/sshguard.sgml > sshguard.1touch $@clean:dh_testdirdh_testrootrm -f build-stamp# Add here commands to clean up after the build process.[ ! -f Makefile ] || $(MAKE) distcleanrm -f config.sub config.guessdh_cleaninstall: 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. 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. Empaquetar un paquete con debhelperArchivo de man sshguard.1:Para editar este archivo se usa la aplicacin manedit sshguard.1 67. Empaquetar un paquete con CDBSBajar el paquete fuente sshguard:wget http://hivelocity.dl.sourceforge.net/sourceforge/sshguard/sshguard-1.4rc3.tar.bz2Descomprimir el paquete y cambiarse al directorio del paquete fuente:tar -xvjf sshguard-1.4rc3.tar.bz2cd sshguard-1.4rc3Crear las variables de entorno:export [email protected] DEBFULLNAME=nombre-apellidosEjecutar dh_make:ecrespo@canaima:~/empaquetado/Ejercicios/fuentes/sshguard/sshguard-1.4rc3$dh_make -f ../sshguard-1.4rc3.tar.bz2 -c BSD -s -bMaintainer name : Ernesto Nadir Crespo AvilaEmail-Address : [email protected]: Sat, 11 Apr 2009 16:43:08 -0430Package Name : sshguardVersion: 1.4rc3License : bsdUsing dpatch : noUsing quilt : noType of Package : cdbsHit to confirm: 68. Empaquetar un paquete con CDBSArchivo debian/rulesl:#!/usr/bin/make -finclude /usr/share/cdbs/1/rules/debhelper.mkinclude /usr/share/cdbs/1/class/autotools.mk# Add here any variable or target overrides you need.DEB_CONFIGURE_EXTRA_FLAGS := --with-firewall=iptables 69. Construir el paquete binarioPara construir el paquete se tienen los siguientescomandos:dpkg-buildpackage -rfakeroot : Construye el paquete sinfirmar, pero devuelve el mensaje de error que no se firm elpaquete.dpkg-buildpackage -rfakeroot -k si se va a firmarel paquete.dpkg-buildpackage -us -uc -rfakeroot : De esta forma se ledice que no firme el paquete.Debuild: Es otra herramienta de empaquetado, la diferenciaes que hace la verificacin de lintian de una vez, sin opcindevuelve un mensaje de error que no se firm el paquete.Debuild -k : Con esta opcin se le pasa la llavegpg y pedir la clave de la llave secreta.debuild-pbuilder:Igual que debuild slo que maneja lasdependencias y crea una bitacora. 70. Verificar los paquetesLas herramientas para la verificacin de paquetes son:Lintianlintian -i ../nombre-paquete_version-paquete_arch-paquete.[changes][dsc][deb] Pruebas de instalacin:- Instalar en un sistema nuevo, eliminar -Actualizar desde versin anterior- Actualizar a una versin anterior, si es posible -Posiblemente usar un entorno chroot (ver debootstrap) oqemu, pero puede esperar (avanzado) 71. Crear Parches 72. Crear parches con dpatch Versin con CDBS dh_make -f ../sshguard-1.4rc3.tar.bz2 -c BSD -s -b --dpatch Maintainer name : Ernesto Nadir Crespo Avila Email-Address : [email protected] 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 to confirm: Versin 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 : [email protected] 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 to confirm 73. Crear parches con dpatchEl debian/rules para debhelper con dptach:Lo ms relevante del rules es este include:include /usr/share/dpatch/dpatch.makePara el caso de CDBS es lo siguiente:include /usr/share/cdbs/1/rules/dpatch.mkPara colocar los patch simplemente se crea un directoriodebian/patched y ah se ubicarn los parches:Un ejemplo de creacin de parches a continuacin:cd udev*/cp -a . /tmp/oldpushd /tmp/olddebian/rules patchcp -a . /tmp/new; cd ../newsed -i s/Linux/Penguin/g READMEcd ..diff -Nurp old new > 90_penguins.patchpopdmv /tmp/90_penguins.patch debian/patchesrm -rf /tmp/old /tmp/new 74. Empaquetar con SCV 75. Empaquetar con Herramientas CV. subversionExiste el repositorio de subversion de paquetes en/var/repo/ .Para migrar el paquete se hace necesario ejecutar svn-inject que crea los mdulos y directorios necesarios.svn-inject -o -c 2 /ruta/al/paquete/antiguo/pyhello.dscffile:///var/deb-repoA parte de crear los mdulos y directorios el comando hahecho un checkout:~/prj$ ls pyhellotagstrunk~/prj$ svn info pyhelloRuta: pyhelloURL: file:///var/deb-repo/pyhelloRaz del repositorio: file:///var/deb-repoUUID del repositorio: 57189996-dc92-4614-af31-cdb96cf453dcRevisin: 1Tipo de nodo: directorio 76. Empaquetar con Herramientas CV. subversion Svn-buildpackage tiene 2 modos: Manteniendo el repo y los archivos de upstream. Opcin por defecto. Manteniendo slo los archivos de gestin del paquete, se puede activar con la opcin -o en svn-inject. Compilando el paquete: Desde el directorio trunk ejecutar: svn-buildpackage -us -uc -rfakeroot Si adems 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 distribucin. Para crear una liberacin 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. Empaquetar con Herramientas CV. subversion Nueva versin del upstream: Cuando el autor del software crea una nueva versin 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 versin ~/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. 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. Ms informacin 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 continuacin se importa las fuentes del paquete: hg-importdsc /home/ecrespo/paquetes/sshguard/sshguard_1.3-1.dsc 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. 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. 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. 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. Crear Paquetes Backports 84. Backport a razn que existe backports es el lento mecanismo derelease de Debian. Al utilizar backportsse pierde la ventaja que ofrece Debian de estabilidad (IE senecesitaran hacer backports de parchesde seguridad).La opcin que se tiene es crear una jaula con chroot de laversin 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. Backport Condiciones para crear un backport: Los paquetes tienen que estar en testing. Agregar en el changelog el nmero 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 Adnne Trojette Sun, 29 Jun 2008 14:00:42 +0200 sshguard (1.0-2) unstable; urgency=low 86. Backport Las dependencias se tienen que manejar de la versin del backport, igualmente para el policy de Debian. Archivo debian/control: Source: sshguard Section: net Priority: optional Maintainer: Ernesto Nadir Crespo Avila 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 sshProtects networked hosts from the todays widespreadbrute force attacks against ssh servers. It detects such attacksand blocks the authors address with a firewall rule. 87. Metapaquetes 88. Paquetes virtuales, metapaquetes y dummyUn paquete virtual es un nombre genrico que aplica acualquiera grupo de paquetes que proveenla misma funcionalidad. Por ejemplo, los programas tin y trnson lectores de noticias, y por endedeben satisfacer cualquier dependencias que requieran unlector de noticias en el sistema, parapoder funcionar. Por ende ambos se le dice que sonpaquetes virtuales llamados news-readers(lectores-de-noticias).Tipos de paquetes:Paquetes de dependencias,Paquetes de cambios de configuracin.Un ejemplo es crear el paquete accesibilidad, este manejarlas dependencias de todos los paquetes que se necesiten paradarle accesibilidad a un computador.O crear un paquete que realice los cambios necesarios en laconfiguracin de los usuarios para que soporte accesibilidad. 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 informacin del mantenedor, versin del paquete, dependencias entre otras cosas. equivs-build: Crea el metapaquete del archivo que crea equivs-control. 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. 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. 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. Equivs Si se desea firmar el metapaquete con la llave GPG se usa la opcin -f claro se debe tener la llave del usuario en el equipo. El comando equivs-build -f canaima-caribay-radio ... Necesita una frase contrasea para desbloquear la clave secreta del usuario: "Ernesto Nadir Crespo Avila (seraph1) " 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 cdigo fuente completo en la subida signfile canaima-caribay-radio_1.0_amd64.changes Necesita una frase contrasea para desbloquear la clave secreta del usuario: "Ernesto Nadir Crespo Avila (seraph1) " clave DSA de 1024 bits, ID C97E7015, creada el 2005-08-15dpkg-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. Equivs Crear metapaquete con Archivo de configuracin (equivs) El programa gnome-orca crea un perfil de configuracin para cada usuario. La forma de copiar dichos archivos a los usuarios creados es copiar toda la configuracin en el directorio /etc/skell/ . Se crear el metapaquete canaima-accesibilidad-escritorio: equivs-control canaima-accesibilidad-escritorio 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 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/LinuxEste metapaquete provee los programas de accesibilidad y configuraciones para que las personas con discapacidad puedan utilizar canaima GNU/Linux. 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 Thu, 22 Sep 2011 22:33:15 -0430 97. Equivs El archivo Copyright contendr lo siguiente: Authors: Copyright (C) 2011 Ernesto Nadir Crespo Avila License:This package is free software; you can redistribute it and/or modifyit under the terms of the GNU General Public License as published bythe 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 ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See theGNU General Public License for more details.You should have received a copy of the GNU General Public Licensealong with this program; if not, write to the Free SoftwareFoundation, 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. 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/root0 2011-09-23 08:41 ./ drwxr-xr-x root/root0 2011-09-23 08:41 ./usr/ drwxr-xr-x root/root0 2011-09-23 08:41 ./usr/share/ drwxr-xr-x root/root0 2011-09-23 08:41 ./usr/share/doc/ drwxr-xr-x root/root0 2011-09-23 08:41 ./usr/share/doc/canaima- accesibilidad-visual-escritorio/ -rw-r--r-- root/root1044 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/root0 2011-09-23 08:41 ./etc/ drwxr-xr-x root/root0 2011-09-23 08:41 ./etc/skell/ drwxr-xr-x root/root0 2011-09-23 08:41 ./etc/skell/.orca/ drwxr-xr-x root/root0 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/root7291 2011-09-23 08:41 ./etc/skell/.orca/user-settings.py -rw-r--r-- root/root6193 2011-09-23 08:41 ./etc/skell/.orca/user-settings.pyc drwxr-xr-x root/root0 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. Equivs Crear metapaquete con archivos postinst y prerm (equivs). Ahora aparte de colocar los archivos en /etc/skell para los copiar la configuracin en los usuarios que se creen a continuacin es necesario copiar la configuracin a los usuarios ya existentes. En este caso se muestra la creacin 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 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. 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 ] ; thenfor usuario in /home/*? ; dousuario_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 ]; thencp -r /etc/skel/.config/autostart/radiotray.desktop /home/${usuario}/.config/autostart/radiotray.desktopchown ${usuario}.${usuario} /home/${usuario}/.config/autostart/radiotray.desktop elsemkdir -p /home/${usuario}/.config; chown -R ${usuario}.${usuario} /home/${usuario}/.configmkdir -p /home/${usuario}/.config/autostart; chown -R ${usuario}.${usuario} /home/${usuario}/.config/autostartcp -r /etc/skel/.config/autostart/radiotray.desktop /home/${usuario}/.config/autostart/radiotray.desktopchown ${usuario}.${usuario} /home/${usuario}/.config/autostart/radiotray.desktop fi if [ -f /home/${usuario}/.local/share/radiotray/bookmarks.xml ]; thencp -r /etc/skel/.local/share/radiotray/bookmarks.xml /home/${usuario}/.local/share/radiotray/bookmarks.xmlchown ${usuario}.${usuario} /home/${usuario}/.local/share/radiotray/bookmarks.xml elsemkdir -p /home/${usuario}/.local; chown -R ${usuario}.${usuario} /home/${usuario}/.localmkdir -p /home/${usuario}/.local/share; chown -R ${usuario}.${usuario} /home/${usuario}/.local/sharemkdir -p /home/${usuario}/.local/share/radiotray; chown -R ${usuario}.${usuario} /home/$ {usuario}/.local/share/radiotraycp -r /etc/skel/.local/share/radiotray/bookmarks.xml /home/${usuario}/.local/share/radiotray/bookmarks.xmlchown ${usuario}.${usuario} /home/${usuario}/.local/share/radiotray/bookmarks.xml fiesacdone fiExit 0 ... 101. Equivs ... File: prerm #!/bin/sh -e set -e PKG=canaima-radiotray-confif [ "$1" = configure ] ; thenfor usuario in /home/*? ; dousuario_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 ]; thenrm -f /home/${usuario}/.config/autostart/radiotray.desktop fi if [ -f /home/${usuario}/.local/share/radiotray/bookmarks.xml ]; thenrm -f /home/${usuario}/.local/share/radiotray/bookmarks.xml fiesacdonefiexit 0 Description: Radiotray bookmarks to Venezuelan radio streaming Radiotray config to autostart in gnome and radio stream bookmark 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: 103. Equivs Luego se ejecuta el comando equivs-build y se instala la aplicacin. En la figura se muestra el radiotray en el escritorio del usuario 104. Paquetes de configuracinEl programa config-package-dev permite crear paquetes deconfiguracin que sobre escriben configuraciones yaexistentes en el directorio /etc/ .El paquete que se le sobre escribir su configuracin es el openssh-server. Este programa tiene su archivo de configuracin como servidor en/etc/ssh/sshd_config.La configuracin por defecto permite que el usuario root acceda a equipos deforma remota y se permite reenviar paquetes de conexiones grficas. 105. Paquetes de configuracinEl archivo sshd_config contiene lo siguiente:Port 22Protocol 2HostKey /etc/ssh/ssh_host_rsa_keyHostKey /etc/ssh/ssh_host_dsa_keyHostKey /etc/ssh/ssh_host_ecdsa_keyUsePrivilegeSeparation yesKeyRegenerationInterval 3600ServerKeyBits 768SyslogFacility AUTHLogLevel INFOLoginGraceTime 120PermitRootLogin yesStrictModes yesRSAAuthentication yesPubkeyAuthentication yesIgnoreRhosts yesRhostsRSAAuthentication noHostbasedAuthentication noPermitEmptyPasswords noChallengeResponseAuthentication noX11Forwarding yesX11DisplayOffset 10PrintMotd noPrintLastLog yesTCPKeepAlive yesAcceptEnv LANG LC_*Subsystem sftp /usr/lib/openssh/sftp-serverSe cambia a no ambas opciones de configuracin. 106. Paquetes de configuracinCrear el directorio de trabajo:mkdir canaima-sshd-config-0.1Dentro del directorio de trabajo se crea los directorios debian y files:cd canaima-sshd-config-0.1mkdir -p debian filesEn el directorio files se crear el directorio etc, dentro de el se crea el directoriossh y se copiar el archivo sshd_config a ese directorio:mkdir -p files/etcmkdir -p files/etc/sshcp /etc/ssh/sshd_config ./files/etc/ssh/sshd_config.canaimaSe modifica el archivo sshd_config.canaima para que los parmetros de accesocomo root y reenviar paquetes X11 aparezcan como no:PermitRootLogin noX11Forwarding noSe crea el archivo debian/copyright y debian/changelog como se ha explicadoanteriormente.Se crea el archivo debian/compat conteniendo el valor 7 (segn versin depolticas de Debian). 107. Paquetes de configuracinSe crea el archivo debian/control y debian/control.in con elsiguiente contenido:Source: canaima-sshd-configSection: configPriority: extraMaintainer: Ernesto Nadir Crespo Avila Build-Depends: cdbs (>= 0.4.23-1.1), debhelper (>= 4.2.0), config-package-dev(>= 4.5~)Standards-Version: 3.9.2Package: canaima-sshd-configArchitecture: allPre-Depends: openssh-serverDepends: cdbs, ${misc:Depends}Provides: ${diverted-files}Conflicts: ${diverted-files}Description: Archivo de configuracion de sshArchivo de configuracion del servidor ssh.Se crea el archivo debian/canaima-sshd-config.install con la ruta donde seencuentran los archivos de configuracin:files/* / 108. Paquetes de configuracinSe crea el archivo debian/rules, en este archivo se define laextensin .canaima la cual permite diferenciar los paquetes basede Debian de la distribucin Canaima, adems se define el archivoa modificar y se incluye los cdbs necesarios:#!/usr/bin/make -fDEB_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.mkinclude /usr/share/cdbs/1/rules/config-package.mkPara crear el paquete se ejecuta el comando dpkg-buildpackage:dpkg-buildpackage -rfakeroot -k 109. Paquetes de configuracinVerificar la instalacin del paquete:dpkg -i canaima-sshd-config_0.1_all.debSelecting 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) ...Aadiendo `desviacin de /etc/ssh/sshd_config a /etc/ssh/sshd_config.canaima-orig porcanaima-sshd-configAl 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-origAl remover el paquete se elimina los enlaces y queda el archivo original delsshd_config. 110. Repositorio local de paquetes 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 configuracin distribution. Dists:Se tiene un directorio por cada versin de la distribucin. Pool: Se encuentran los paquetes clasificados por seccin y en orden alfabtico. 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. 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. Referencias:Adoptar un paquete:http://wiki.debian.org/AdoptarUnPaqueteCompleta gua de empaquetado:https://wiki.ubuntu.com/PackagingGuide/CompleteTutorial de empaquetado:http://women.debian.org/wiki/English/PackagingTutorialCDBS:https://perso.duckcorp.org/duck/cdbs-doc/cdbs-doc.xhtmlMantener un paquete con subversion:http://crysol.org/es/node/620Paquetes de configuracin:http://debathena.mit.edu/config-packages/Paquete de configuracin:http://wiki.debian.org/ConfigPackagesComo usar dpatch:http://matrixhasu.altervista.org/index.php?view=use_dpatchEmpaquetar con git:http://wiki.debian.org/PackagingWithGitEmpaquetar con mercurial:http://ernesto-ecrespo.blogspot.com/2009/04/subir-un-paquete-debian-pyching-al.htmlScripts de mantenimiento:http://women.debian.org/wiki/English/MaintainerScriptsSistema de parches:https://wiki.ubuntu.com/PackagingGuide/PatchSystemsQuilt:http://pkg-perl.alioth.debian.org/howto/quilt.htmlGua de empaquetado de aplicaciones en python:https://wiki.ubuntu.com/PackagingGuide/PythonEmpaquetado:http://women.debian.org/wiki/English/BuildingTutorialEmpaquetar sin ayuda:http://women.debian.org/wiki/English/BuildingWithoutHelperGua para empaquetar aplicaciones de kde:https://wiki.ubuntu.com/PackagingGuide/KDE?action=show&redirect=KubuntuPackagingGuideGua de empaquetado:https://help.ubuntu.com/6.10/ubuntu/packagingguide/C/index.htmlLibro de bolsillo:https://wiki.ubuntu.com/PackagingGuide/HandsOnCrear un metapaquete:http://blog.ibeentoubuntu.com/2008/08/howto-create-debian-metapackage.htmldpath:http://blog.orebokech.com/2007/08/converting-debian-packages-from-dpatch.htmlMetapaquete con equivs:http://ernesto-ecrespo.blogspot.com/2009/03/como-crear-un-metapaquete.htmlMensajes de lintian:http://lintian.debian.org/tags.htmlBackport: http://www.backports.org/dokuwiki/doku.php?id=contribute 115. Contacto: Ernesto Crespo Correo: [email protected] Twitter: @_seraph1 Blog: http://ernesto-ecrespo.blogspot.com 116. Derechos:Est presentacin est basada en: Presentacin de Empaquetado de Isaac Clerencia DD Presentacin de Empaquetado de Larz Wirzenius Presentacin de J. Feliz Ontan 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