Distribución eficiente del software.
-
Una vez tenemos nuestro software listo para ser utilizado…
-
Debemos hacerlo llegar a los potenciales usuarios…
-
Cuanto más fácil de instalar les sea…más probable es que lo empleen.
-
Debemos evitar instalaciones tipo Windows…donde el s.o. no nos proporciona los mecanismos de gestión apropiados para la instalación de software…
-
Desconoce componentes ya instalados.
-
No tiene en cuenta dependencias
-
Permite la sobreescritura de archivos ya instalados (DLL Hell)
-
La propia Microsoft ofrece como alternativa a estos instaladores el conocido como Windows Installer, para la instalación, mantenimiento y eliminación de programas en s.o. de la familia Windows.
-
Algunos formatos de paquetes para distribuir software
-
TAR / TGZ / TBZ / TXZ
-
DEB
-
RPM
Formatos TAR / TGZ / TBZ / TXZ (I)
-
El formato original es
TAR
. -
Es un formato de archivos ampliamente usado en entornos UNIX.
-
Los archivos en este formato usan la extensión
.tar
-
Es un formato pensado inicialmente para ser usado con cintas magnéticas, de ahí su nombre Tape ARchiver (en inglés: archivador en cinta)
-
Tar
sólo reune los diferentes ficheros en un solo archivo, no realiza compresión de datos, por tanto no reduce el tamaño de los archivos que crea.
Formatos TAR / TGZ / TBZ / TXZ (II)
-
La órden de llamada suele tener este formato:
tar <<opciones>> <<archivoSalida>> <<archivo1>> ... <<archivoN>>
-
Dado que "
tar
" fue diseñado en sistemas "UNIX
", almacena la metainformación de los ficheros en estos s.o.: fecha de última modificación, propietario y permisos al estilo UNIX. Además admite el almacenamiento de enlaces simbólicos y enlaces duros -
El formato
tar
está estandarizado por las normas POSIX1 y posteriormente por POSIX2. -
Veamos algunos ejemplos prácticos de uso…
Formatos TAR / TGZ / TBZ / TXZ (III)
-
Hemos dicho que
tar
no comprime…solo empaqueta. -
Pero es bastante habitual comprimir después de empaquetar…
-
…por eso permite enlazar con diversos compresores de forma automática:
-
gzip
… usando la opción -z -
bzip2
… usando la opción -j -
xz
… usando la opción -J
-
-
Por tanto,un archivo
tar
comprimido con:-
gzip
puede usar las extensiones: ".tar.gz
" o ".tgz
" -
bzip2
puede usar las extensiones: ".tar.bz
" o ".tbz
" -
xz
puede usar las extensiones: ".tar.xz
" o ".txz
"
-
Formatos TAR / TGZ / TBZ / TXZ (IV)
-
Hagamos una serie de pruebas en modo texto y modo gráfico…
-
A pesar de lo sencillo de usar que hemos visto que es el formato
tar
… -
Además de ser un estandar POSIX…
-
…resulta que tiene una serie de restricciones/carencias para ser usado en la distribución de software de manera eficiente…
-
-
Al distribuir software es bastante normal que no baste solo con copiar determinados archivos en lugares concretos…, por ejemplo:
-
…que tengamos que ejecutar determinadas acciones para finalizar la instalación correctamente.
-
…que nos interese saber si hay instalado un determinado software previamente y en alguna versión concreta (comprobación de dependencias)…
-
Formatos TAR / TGZ / TBZ / TXZ (V)
-
Es por eso que en la distribución de software, por parte de determinados s.o., se suelen emplear otros formatos tales como
DEB
yRPM
. -
En estos ficheros, además de la información a instalar, podemos indicar:
-
acciones a llevar a cabo como parte del proceso de instalación/desinstalación.
-
comprobación de dependencias de software previamente instalado
-
software recomendado que complementa al que vamos a instalar y puede ser de ayuda al ususario.
-
-
En el resto del tema nos centraremos en el formato
DEB
y veremos como generarRPM
desde unDEB
de manera semi-automática.
Formato DEB (I)
-
La estructura interna de estos ficheros es la de un archivo
ar
. -
Internamente contiene tres archivos:
-
"
debian-binary
": fichero de texto que contiene el número de versión del formato deb. Actualmente es la2.0
. -
"
control.tar.gz
": Contiene la meta-información del paquete. -
"
data.tar
", "data.tar.gz
", "data.tar.bz2
" o "data.tar.lzma
": Contiene los archivos a instalar.
-
Formato DEB (II)
DEB
de forma manual.Cuando terminemos verás que este archivo se parece más aun TAR
que
a un DEB
ya que la parte de control
no estará completa.
-
Estando en el directorio principal de nuestro proyecto, ejecutamos:
mkdir ./debian
-
Bajo el subdirectorio
./debian
reproducimos toda la estructura de directorios de nuestro software cuando esté instalado. En este ejemplo sencillo solo tenemos los subdirectorios "usr
" y "usr/bin
". -
Estando en el directorio principal de nuestro proyecto, ejecutamos:
mkdir -p ./debian/usr/bin
-
Copiamos manualmente los ficheros que componen nuestro software a los directorios que corresponda bajo "
./debian
":cp helloword ./debian/usr/bin
Formato DEB (III)
-
Creamos el directorio "
./debian/DEBIAN
" y dentro de él, el fichero "./debian/DEBIAN/control
". -
Este fichero tiene este formato:
Package: helloworld
Priority: optional
Section: misc
Maintainer: dca
Architecture: amd64
Version: 1.0
Depends:
Description: Increible implementacion de HolaMundo
Al ser ejecutado, imprime una linea en el terminal con el
texto: 'Hola Mundo'.
-
Y ahora solo nos queda construir el fichero
DEB
:fakeroot dpkg -b ./debian /ruta/hasta/fichero.deb
Formato DEB (IV)
-
El ejemplo anterior ha sido a nivel ilustrativo…
-
En la práctica dispondremos, por ejemplo, del código fuente del software en un fichero
TGZ
y tendremos que compilarlo y seguir los pasos que marque su creador para tener una versión instalable del mismo. -
Afortunadamente en estos casos, todo ello se gestiona con uno o varios ficheros
Makefile
, los cuales disponen de unobjetivo
otarget
llamadoinstall
que copia los archivos necesarios a los directorios correspondientes. -
Afortunadamente también, los creadores del formato
DEB
nos proporcionan algunas utilidades para facilitar esta labor. -
Es el caso de la aplicación
dh_make
, según indica en su página de manual:dh_make - prepare Debian packaging for an original source archive
-
Veamos con un ejemplo el funcionamiento de
dh_make
-
En esta entrevista a Gunnar Wolf (desarrollador de Debian) explica en unos 5mn. las bases del proceso de empaquetado en archivos
.deb
usando debhelper.
Formato DEB (V)
Tomamos como ejemplo la aplicación helloworlddca
descargada de
helloworlddca-1.0.tar.gz.
Su contenido es un directorio: helloworlddca-1.0 , que contienes los archivos:
hw.c
y Makefile
#include <stdio.h>
int main (int argc, char *argv[]) {
printf ("Hola Mundo\n");
return 0;
}
Formato DEB (VI)
# Makefile
DESTDIR=.
PROG=hw
all: $(PROG)
$(PROG): $(PROG).c
gcc $(PROG).c -o $@
install: $(PROG)
mkdir -p $(DESTDIR)/usr/bin
cp $(PROG) $(DESTDIR)/usr/bin/
clean:
rm -f *~ $(PROG) *.o
.PHONY: clean install all
Formato DEB (VII)
-
Dentro del directorio
helloworlddca-1.0
ejecutamos:dh_make -s -e mail@provider.com -f ../helloworlddca-1.0.tar.gz
Esto genera el directorio "debian
" con este contenido:
changelog docs init.d.ex menu.ex prerm.ex compat helloworlddca.cron.d.ex manpage.1.ex postinst.ex README.Debian control helloworlddca.default.ex manpage.sgml.ex postrm.ex README.source copyright helloworlddca.doc-base.EX manpage.xml.ex preinst.ex rules source watch.ex
-
La extension
.ex
indica que se trata de ejemplos, si los usamos, la quitamos y modificamos el contenido de estos archivos según corresponda. -
Destacamos los archivos "
changelog
", "control
", "rules
" y los "pre|post inst
" y "pre|post rm
". -
Modifiquemos su contenido y pasemos a generar el archivo "
.deb
". Para ello usamos la orden:dpkg-buildpackage -rfakeroot -us -uc
Las opciones -us (unsigned source, no firma el paquete fuente con
gpg) y -uc (unsigned changes, no firma los cambios con gpg) son
necesarias si no tenemos configurado gpg
.
Formato DEB (VIII)
-
Conforme vayamos modificando los archivos que controlan el empaquetado en formato
.deb
, debemos:-
Crear una nueva entrada en
debian/changelog
, opcionalmente incrementado la versión del empaquetado. -
Regenerar el archivo
.deb
.
-
-
Para crear una nueva entrada en
debian/changelog
disponemos de la aplicación "dch
". -
Es importante tener en cuenta que "
dh_make
" hace uso de los programas que se encuentran en el paquete "debhelper
". -
Una vez tenemos generado un "
.deb
" lo podemos instalar --como administradores-- mediante la orden dpkg:dpkg -i helloworlddca_1.0-1_amd64.deb
-
O pedir información sobre el mismo con:
dpkg -I helloworlddca_1.0-1_amd64.deb
- Importante
-
"
dpkg
" no tiene en cuenta dependencias con otros paquetes…para ello necesitas otras aplicaciones como "apt-get
" o "aptitude
" o "apt
".
Formato RPM
-
Se trata de un formato similar al
.deb
. -
Se emplea en distribuciones como
Red Hat Linux
,Fedora Linux
,SuSE Linux
, etc… -
No vamos a ver directamente como crear paquetes en este formato…pero si que lo vamos a hacer de forma semi-automática con la aplicación alien.
Aplicación alien
-
Se ejecuta como administrador o con la orden sudo.
-
Se le pasa como parametro el nombre del archivo
.tgz
,.deb
o.rpm
a convertir de formato… -
…y una opción que le indica el formato destino:
-
-t convierte de "
.deb
" o ".rpm
" a ".tgz
" -
-r convierte de "
.deb
" o ".tgz
" a ".rpm
" -
-d convierte de "
.tgz
" o ".rpm
" a ".deb
"
-
-
En nuestro caso, una vez hemos generado el
.deb
podemos hacer:
sudo alien -t ../helloworlddca_1.0-1_amd64.deb sudo alien -r ../helloworlddca_1.0-1_amd64.deb
-
alien
dispone también de la opción -c, la cual trata de convertir los scripts que se ejecutan cuando el paquete se instala o desinstala.
Trabajo en grupo en clase
-
En grupos de 4 personas…
-
Descargamos un código fuente en formato
tgz
. -
Tratamos de debianizarlo con
dh_make
y generar el.deb
-
Intentad añadirle
scripts
de instalación (preins/postins) y desinstalación (prerm/postrm). -
Intentad añadirle dependencias.
-
Una vez hecho…convertirlo a
rpm
ytgz
.
-
-
Echa un vistazo a estos otros sistemas de paquetería:
-
Snap.
-
-
¿En qué consisten?
-
¿Qué ventajas aportan respecto a formatos como DEB, RPM, etc…?
-
Práctica individual
-
Realiza lo mismo que en el trabajo en grupo, salvo la conversión a rpm/tgz, pero, p.e. con:
-
una práctica tuya de cualquier asignatura.
-
Alguna aplicación de código abierto que te interese, algunos ejemplos:
-
kilopp, C++.
-
kilo, C.
-
kilo-in-go, Go.
-
-
-
Opcional: Trata de hacer uso de alguno de los archivos
pre|post
que aparecen en la carpetadebian
. -
Debes entregar el archivo DEB generado dentro de un archivo tgz para que el servidor de entregas te permita hacerlo.
-
Comprime todo lo relacionado con tu entrega en un fichero .tgz, el cual es el que tendrás que entregar.
-
La práctica o prácticas se entregará/n en (y sólo en) pracdlsi en las fechas y condiciones allí indicadas.
Aclaraciones
-
Debes estudiar, aclarar y ampliar los conceptos que en ellas encuentres empleando los enlaces web y bibliografía recomendada que puedes consultar en la página web de la ficha de la asignatura y en la web propia de la asignatura.