Avances tecnológicos del siglo XXI y ejemplos de estos
Taller de Empaquetado para Debian y Canaima
1. Empaquetado para Debian y Canaima
Versión 3.0
Ernesto Nadir Crespo Avila
ecrespo@gmail.com
@_seraph1
Presentación liberada bajo licencia Creative Commons
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 grupo
de programadores para desarrollar un S.O. Que fuera
multiusuario y mutitarea que al principio se llamo Unics y
luego fue Unix, este fue desarrollado en lenguaje
ensamblador.
●En 1972 se reescribe Unix en lenguaje C e incorporando el
stack TCP/IP
●En 1975 la Universidad de California creo su propio Unix
llamado BSD, siendo una fuerte competencia para el Unix de
AT&T.
●En 1991 un estudiante de Finlandia llamado Linux Torvalds
crea un clon de Unix basandose en Minix de Andrew
Tanenbaum.
●En el año 1983, Richard Stallman crea El proyecto GNU para
crear un S.O. Libre que fuera como Unix, ya se tenía un
interpretador de comandos, compilador, un sistema de
archivos y un editor, sólo faltaba el kernel del Sistema
operativo y fue gracias al Kernel de Linux que hoy en día se
tiene a GNU/Linux.
●En 1993 Ian Murdock se encarga de una iniciativa que nace de
la FSF y su proyecto GNU para crear un Sistema Operativo
totalmente libre y Universal. Debian es la contracción del
nombre de la ex-esposa Debra e Ian.
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. 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. 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. 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. Objetivos de Debian y Canaima
Debian
●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 seguridad
Canaima
● ¿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?
17. Desarrolladores Debian a nivel mundial
Desarrolladores en Venezuela: Eloy París, Cesar Mendoza,
Muammar El Khatib y José Luis Rivas.
Mantenedores de paquetes: Christian Sanchez, Ernesto
Hernández Novich, Gerardo Curiel, Manuel García, Alejandro
Garrido, Juan Angulo Moreno, Ernesto Crespo y Carlos
Alberto 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/
●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. ¿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/
23. WNPP
En wnpp se tiene una descripción del proceso de reporte de
fallos:
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 o
interés la persona encargada a dejado libre el paquete.
●RFH: Petición de ayuda, el responsable actual quiere seguir
manteniendo el paquete pero necesita ayuda en el mismo.
●ITP: Intento de empaquetado, es un paquete nuevo que no se
encuentra en Debian y alguien está empaquetandolo para Debian.
●RFP: Petición de empaquetado, alguien ha encontrado un
programa interesante y desea que un mantenedor o desarrollador
lo suba a Debian.
24. WNPP
Procedimiento para eliminar los errores:
●O: Si va a adoptar un paquete retitule el error reemplazando O por
ITA.
●RFA: Si va a adoptar un paquete retirule el error reemplazando RFA
por ITA.
●RFP: Si va a empaquetar este programa, cambie el error
reemplazando RFP por ITP y así las personas pueden saber que este
paquete está siendo empaquetado.
El correo a enviar debería tener la siguiente estructura:
To: control@bugs.debian.org
From: nombre-apellidos <nombre@example.com>
retitle NNNNNN ITA: nombre-paquete -- descripcion-paquete
owner NNNNNN !
Thanks
Donde 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
27. Paquetes Fuente en Debian
Un paquete fuente contiene archivos independientes de la
arquitectura y tienen todo lo necesario para la construcción de
un 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 del
paquete hello para debian.
●hello_2.2-3.dsc: Contiene el archivo de control del paquete
hello con información de firma del empaquetador y
verificació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 por
Debian.
Para paquetes nativos no se maneja el orig ni el diff.
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. Metadato de un paquete
La información de los metadatos de un paquete binario que
muestra el comando dpkg –info es la siguiente:
Package: El nombre del paquete.
Source: El nombre del paquete fuente la cual este binario fue
compilado.
Version: La version del paquete incluyendo la versión
upstream (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. 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.
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. 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. 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. ¿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. ¿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.
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. 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. 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. 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. Empaquetar un paquete sin ayuda
Colocar el siguiente contenido en debian/rules:
# Name of the package
package=roaddemo
# Function to check if we're 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 we're 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
56. Empaquetar un paquete sin ayuda
Colocar 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 variable
and not strip stuff when it
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. 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. 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. 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. 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 today's widespread
brute force attacks against ssh servers. It detects such attacks
and blocks the author's 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 <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. 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 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.
66. Empaquetar un paquete con debhelper
Archivo de man sshguard.1:
Para editar este archivo se usa la aplicación manedit sshguard.1
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. 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. 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. 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)
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. 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
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. 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. 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. 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. 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 today's widespread
brute force attacks against ssh servers. It detects such attacks
and blocks the author's 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 -k
En este momento se tiene el paquete .deb yylos archivos creados
En este momento se tiene el paquete .deb los archivos creados
en el momento del empaquetado:
en el momento del empaquetado:
ecrespo@canaima:~/repositorio$ ls
ecrespo@canaima:~/repositorio$ ls
sshguard_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.deb
repositorio sshguard_1.3-2.dsc sshguard_1.3-2_i386.changes
repositorio sshguard_1.3-2.dsc sshguard_1.3-2_i386.changes
sshguard_1.3.orig.tar.gz
sshguard_1.3.orig.tar.gz
84. Backport
a razón que existe backports es el lento mecanismo de
“release” de Debian. Al utilizar backports
se pierde la ventaja que ofrece Debian de estabilidad (IE se
necesitaran hacer backports de parches
de seguridad).
La opción que se tiene es crear una jaula con chroot de la
versión de lenny o etch.
Mkdir /home/usuario/etch
debootstrap etch /home/usuario/etch
http://debian.dst.pdvsa.com/debian/
Luego entrar a la jaula:
chroot /home/usuario/etch/
Modificar el archivo sources.list para que tenga el repositorio
backport.
deb http://www.backports.org/debian lenny-backports main
contrib non-free
Instalar las llaves del backport:
apt-get install debian-backports-keyring
Actualizar 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 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. 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 today's widespread
brute force attacks against ssh servers. It detects such
attacks
and blocks the author's address with a firewall rule.
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. 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. 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
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. 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. 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. 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. 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'
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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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.
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. 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/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
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