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
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:
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.