Aplicaciones
De GLASS
Tabla de contenidos |
Objetivos
Después de leer este capítulo
- Tendrá una idea clara de lo que sucede cuando se compila una aplicación
- Entenderá el porqué del sistema de paquetes y sabrá crear sus propios paquetes para Slackware
Introducción
En este capitulo se describen los diferentes métodos disponibles en los sistemas GNU/Linux para instalar aplicaciones en el sistema. Al contrario de lo que sucede con los sistemas operativos propietarios, de código cerrado, en GNU/Linux y otros sistemas operativos libres, las aplicaciones se distribuyen de dos formas diferentes: mediante su código fuente o mediante los binarios. El código fuente de un programa no es directamente ejecutable por el sistema, para que lo sea, es necesario compilarlo para una determinada arquitectura e instalarlo en el sistema. Una vez hecho esto se obtiene un código binario capaz de ser interpretado y ejecutado. Cuando un programa se distribuye mediante su código fuente, se hace mediante un tarball, que es un archivo que contiene todos los elementos necesarios para poder compilar e instalar la aplicación en el sistema. Por otro lado, cuando una aplicación se distribuyen en formato binario, se hace mediante un paquete, que no es mas que un archivo que contiene todos los elementos necesarios para que el programa funcione: binarios, librerías, ficheros de configuración etc. Los paquetes son específicos de cada aplicación y proporcionan un sistema para facilitar la instalación, eliminación o actualización de los programas.
Estas dos formas de distribuir aplicaciones dan lugar a tres formas distintas de instalarlas, la primera de ellas es hacerse con las fuentes del programa (el tarball), compilarlas he instalar los archivos en el sistema. La segunda forma sería hacerse con el paquete de la aplicación deseada e instalarlo en el sistema. Finalmente está la opción de construir el paquete a partir del código fuente. Este capítulo aborda estos tres casos posibles y muestra las ventajas e inconvenientes que aporta cada uno de ellos.
Compilación
La principal diferencia existente entre el software libre y el propietario, es el acceso al código fuente del mismo. El hecho de que los programas y el propio sistema se acompañen de su código fuente abre un sinfín de posibilidades, que por su propia concepción, están vetadas a los sistemas propietarios. La consecuencia de la apertura del código, implica que cualquiera con los conocimientos adecuados, pueda modificarlo para mejorarlo u añadir nuevas funcionalidades, o simplemente, detectar vulnerabilidades y/o sugerir mejoras. Esto permite que los programas evolucionen más y mejor, y que sólo tengan posibilidad de implantarse aquellos cuyo código es realmente competitivo. Probablemente, el administrador de sistemas no se vea nunca en la necesidad de modificar el código fuente de un programa, aun y así, además de todas las ventajas mencionadas anteriormente, va ha tener la posibilidad de compilar los programas específicamente para su arquitectura, redundando esto en una mejor optimización del código binario resultante.
Obtener el código fuente
El código fuente de un programa suele estar formado por varios archivos, que se distribuyen bajo un solo fichero comprimido llamado tarball, el cual, generalmente tiene la extensión “.tar.gz“. Los tarballs están disponibles en la red vía web o ftp, ya sea en el sitio web del programa en cuestión, o en cualquier otro mirror. Una vez descargado el tarball, éste se ha de copiar a un archivo sobre el que se tengan permisos de lectura y escritura. Para descomprimir el archivo se utiliza el siguiente comando:
tar zxvf nombre_programa.tar.gz
Este comando descomprime el tarball y extrae los archivos que lo forman, a un directorio del mismo nombre que el tarball, pero sin la extensión “.tar.gz“.
Compilar e instalar la aplicación
Antes de seguir con el proceso habitual de compilación, es muy recomendable leer la documentación adjunta, ya que en ella se explica el procedimiento para compilar e instalar el programa, también se indicará si se han de realizar acciones especificas para ese programa, o ejecutar algún script adicional para completar la instalación.
El primer paso consiste en configurar los archivos necesarios para compilar la aplicación, para ello es necesario situarse en el directorio creado al descomprimir el tarball, y ejecutar el script configure, el cual, es el encargado de generar el archivo Makefile, necesario para compilar la aplicación mediante el programa make. El script configure comprueba además si se dispone de todos los elementos necesarios para llevar a cabo la compilación.
./configure
Si el resultado de la ejecución de este script es satisfactoria, se obtiene el archivo Makefile. Este archivo le indica al programa make de qué manera deberá compilar el programa. Make determina qué partes de un programa han de ser recompiladas, y genera automáticamente los comandos necesarios para hacerlo.
make
En función de la complejidad de la aplicación a compilar y del número de archivos de código fuente que la compongan, este proceso puede alargarse y consumir mucho tiempo y recursos, tanto de CPU como de memoria, por lo que el tiempo de compilación puede variar enormemente de una máquina a otra. En todo momento se muestran por pantalla los comandos generados por make, generalmente llamadas al compilador de C/C++ del proyecto GNU.
make install
Este comando instala la aplicación, copiando los archivos creados durante el proceso de compilación a su lugar correspondiente. Por norma general, los binarios de la aplicación serán colocados en /bin o en /usr/local/bin, las librerías probablemente serán copiadas a /lib o a /usr/lib, la documentación a /usr/doc y las páginas del manual a /usr/man. A partir de este momento la aplicación está lista para su ejecución.
Uno de los problemas de instalar una aplicación en el sistema de esta manera, queda patente en el momento de proceder a desinstalar dicha aplicación, dado que los archivos que la forman, han quedado desperdigados por toda la jerarquía del sistema de ficheros. En el capitulo siguiente se explica como minimizar este contratiempo, forzando a que los archivos se copien a una ubicación especifica.
Por otro lado, compilar una aplicación grande, como el sistema X-Window, por ejemplo, puede llegar a consumir mucho tiempo, sin que ello se compense con un aumento espectacular en el rendimiento del sistema. En esta y otras ocasiones, lo mas conveniente suele ser instalar los binarios de la aplicación en el sistema mediante el sistema de paquetes.
Ubicación en el sistema
Una manera de solucionar el problema que supone la compilación estándar de una aplicación, es cambiando la ubicación en la que la esta se instalará por defecto. En la jerarquía de ficheros, existe un directorio llamado /usr/local pensado para albergar las aplicaciones que se compilan manualmente. En el momento de invocar a configure para crear el Makefile, es posible especificarle una serie de parámetros. Así mediante el parámetro –prefix=/ruta/al/destino, la aplicación no será copiada sobre la raíz del sistema (/), sino que se crearán los directorios y archivos necesarios a partir del punto especificado. De esta forma es posible ubicar los programas en un directorio creado a tal efecto en /usr/local/mi_programa.
Por ejemplo:
./configure –prefix=/usr/local/gkrellm
Dado que ahora la aplicación se ubica en la estructura de directorios creada a partir de /usr/local/gkrell, para eliminarla del sistema basta con borrar el directorio que contiene dicha aplicación:
rm -r /usr/local/gkrellm
Existen otros parámetros que permiten ajustar el resultado obtenido al ejecutar el programa make. Por ejemplo, con --exec-buid=[tipo-de-maquina] es posible generar binarios para una maquina diferente a en la que estamos compilando. En compilaciones de programas extensos, esta opción permite ahorrar mucho tiempo, ya que nos permite compilar un programa en una maquina de ultima generación, y luego ejecutar el programa generado, en una máquina menos potente, ahorrando así mucho tiempo en el proceso de compilado.
./configure --prefix=/usr/local/proftpd –build=i386-pc-linux
También es posible especificar otra tipo de arquitecturas
./configure --build=sparc-sun-sunos4.1.1
En caso de no especificar por completo el tipo de arquitectura, o el sistema operativo, el script completará estos parámetros con los valores por defecto.
Comprensión del sistema de paquetes
Normalmente los programas están comprimidos en un tarball, el cual contiene el código fuente que el administrador deberá compilar. Muchas veces esto supone un engorro para el administrador, puesto que pueden ser programas grandes cuyo código tarde mucho rato en compilar, como el caso del sistema X-Window o Mozilla . Otras veces el administrador al compilar el programa pierde la orientación sobre la situación de los binarios, librerías y/o dependencias de cada programa, cosa que repercutiría negativamente en futuras limpiezas o actualizaciones del sistema. De este modo, se llevo a cabo la idea de un sistema de paquetes, mediante el cual un desarrollador compila los programas de una manera estándar, y los empaqueta bajo el formato soportado por la distribución en la que se deberá instalar. El sistema de paquetes nativo de Slackware utiliza el formato de paquetes (TGZ), de modo que un administrador que quiera instalar un programa en su sistema no tiene mas que bajárselo y ejecutar en su shell el comando 'installpkg nombre_paquete.tgz'. Esta utilidad del sistema de paquetes lo descomprime, y copia cada uno de los archivos que lo componen al la ubicación que le corresponda. El paquete también contiene un archivo de texto que informa sobre el listado de archivos que forman ese programa, y su ubicación en el sistema, de este modo, en el momento en que ese mismo administrador quiera borrar el programa, no tiene que ir a buscar todos los archivos para borrarlos, sino que le basta con ejecutar 'removepkg nombre_paquete'. Del mismo modo a la hora de actualizarlo con la llegada de futuras versiones, la orden 'upgradepkg nombre_paquete.tgz' borra los archivos de la versión antigua y los reemplaza con los de la nueva.
En el caso de otras distribuciones como RedHat, la instalación seria con un paquete en formato RPM, y la sintaxis quedaría en algo como 'rpm -ivh nombre_paquete.rpm'. Para desinstalar y actualizar paquetes se utilizan herramientas análogas, siguiendo la sintaxis de las utilidades del sistema de paquetes (RPM). La distribución Debian por su parte, hace lo propio con su sistema de paquetes (DEB).
Obviamente los diferentes sistemas de paquetes soportados por las varias distribuciones de Linux, son desarrollados y mantenidos por diferentes programadores, cada uno con intención de facilitar las tareas a los usuarios y mantener limpia su distribución.
Funcionamiento del sistema de paquetes en Slackware
El sistema de paquetes de Slackware es extremadamente sencillo, no en vano se basa en la filosofía KISS (Keep It Simple, Stupid). Las utilidades de todo el sistema están programadas en Shell-Scripts, son las siguientes: makepkg, installpkg, removepkg, upgradepkg, explodepkg y pkgtool.
Cuando se añade un paquete al sistema, éste crea un fichero en /var/log/packages, el cual contiene información sobre el mismo. Por ejemplo el paquete de la aplicación wget crea el fichero wget-1.8.2-i386-2 con la siguiente información:
PACKAGE NAME: wget-1.8.2-i386-2 COMPRESSED PACKAGE SIZE: 351 K UNCOMPRESSED PACKAGE SIZE: 1090 K PACKAGE LOCATION: /var/log/mount/slackware/n/wget-1.8.2-i386-2.tgz PACKAGE DESCRIPTION: wget: wget (a non-interactive network retriever) wget: wget: GNU Wget is a free network utility to retrieve files from the wget: World Wide Web using HTTP and FTP, the two most widely used Internet wget: protocols. It works non-interactively, thus enabling work in the wget: background after having logged off. wget: wget: The author of Wget is Hrvoje Niksic <hniksic@srce.hr>. wget: wget: wget: FILE LIST: FILE LIST: ./ etc/ etc/wgetrc install/ install/slack-desc usr/ usr/doc/wget-1.8.2/ChangeLog ... usr/share/locale/zh_TW/ usr/share/locale/zh_TW/LC_MESSAGES/ usr/share/locale/zh_TW/LC_MESSAGES/wget.mo
Como se aprecia en el archivo, se detallan el nombre, el tamaño, la ubicación, una pequeña descripción y la lista de ficheros que componen el paquete. De esta manera los paquetes pueden ser eliminados fácilmente del sistema, ya que la utilidad removepkg paquete utilizar los datos almacenados en el archivo /var/log/packages/paquete para eliminar un paquete del sistema.
El sistema de paquetes de Slackware no ofrece control de dependencias, es decir, un paquete se instala en el sistema aunque no se satisfagan las dependencias, esto sucede cuando un paquete requiere de unas librerías que no se encuentran instaladas. De esta manera, se permite instalar cualquier aplicación pese a que no se cumplan las dependencias. Será tarea del administrador, el resolver manualmente las dependencias mediante la utilidad ldd y consultando el fichero MANIFEST.bz2 del CDROM de instalación.
El siguiente ejemplo ayuda a comprender como solucionar problemas de dependencias:
root@super8:/home/melmak# installpkg firestarter-0.9.2-i686-1.tgz Installing package firestarter-0.9.2-i686-1... PACKAGE DESCRIPTION: firestarter: firestarter-0.9.2 firestarter: firestarter: Firestarter is a complete firewalling tool for Linux. firestarter: Use the firewall creation wizard to create a basic firewall. firestarter:
El comando anterior instala el paquete firestarter en el sistema. La instalación finaliza correctamente, pero al tratar de ejecutarla, el sistema da un error de dependencias.
root@super8:/home/melmak# firestarter firestarter: error while loading shared libraries: libbonoboui-2.so.0: cannot open shared object file: No such file or directory
Mediante la aplicación ldd es posible obtener la lista de paquetes necesarios para la correcta ejecución de la aplicación. root@super8:/home/melmak# ldd /usr/bin/firestarter |grep 'not found'
libbonoboui-2.so.0 => not found
libgnomecanvas-2.so.0 => not found
libbonobo-2.so.0 => not found
...
Ahora el administrador debería buscar los paquetes que contienen las librerías no encontradas en el sistema:
root@super8:# cd /mnt/cdrom/slackware root@super8:# bzcat MANIFEST.bz2 |grep libbonoboui-2 |grep '||' || Package: ./gnome/libbonoboui-2.2.0.1-i386-1.tgz
Y así sucesivamente hasta que se satisfagan todas las dependencias.
Suele decirse que una de las debilidades de Slackware se encuentra en el sistema de paquetes (TGZ), por no poseer control de versiones ni dependencias, aunque eso, en la mayoría de los casos, si el usuario tiene una mínima idea de lo que esta haciendo, se convierte en una ventaja.
Utilidades del sistema de paquetes de Slackware
Las utilidades del sistema de paquetes se componen de una serie de Shell-scripts. Estas utilidades fueron programadas por el creador de la distribución Slackware: Patrick J. Volkerding, también conocido como The Man. A continuación se describe el funcionamiento y utilización de estas utilidades.
- installpkg
Instala uno o múltiples paquetes *.tgz en el sistema. La base de datos de los paquetes instalados esta en /var/log/packages, donde cada paquete genera su archivo de texto con información sobre el mismo. Es posible especificar varios paquetes o utilizar comodines. Si se instala un paquete que ya se encuentra en el sistema, este sera sobreescrito. Para evitarlo borre el paquete antes o utilice upgradepkg.
- removepkg
Elimina paquetes instalados. Durante todo el proceso se informa por pantalla de las acciones realizadas. El nombre del paquete puede especificarse tal como aparece en /var/log/packages o parcialmente. Por ejemplo para borrar el paquete firestarter-0.9.2-i686-1:
root@super8:~# removepkg firestarter Removing package /var/log/packages/firestarter-0.9.2-i686-1... Removing files: --> Deleting /usr/bin/firestarter --> Deleting /usr/doc/firestarter-0.9.2/AUTHORS --> Deleting /usr/doc/firestarter-0.9.2/COPYING ... --> Deleting /usr/share/pixmaps/firestarter.png --> Deleting empty directory /usr/doc/firestarter-0.9.2/
Como se aprecia en el ejemplo no es necesario especificar el nombre completo del paquete. Por otro lado, cuando un paquete es eliminado del sistema, su archivo correspondiente, situado en /var/local/packages, es movido a /var/log/removed_packages. Del mismo modo, si el paquete tenía algún script de post-instalación, también es movido de /var/log/scripts a /var/log/removed_scripts.
- upgradepkg
Actualiza paquetes ya instalados en el sistema. En primer lugar se copian los archivos del paquete nuevo y posteriormente se eliminan los del paquete viejo. Véase un sencillo ejemplo:
root@super8:/var/log# ls /var/log/packages/ |grep gaim gaim-0.59.8-i686-1 root@super8:/var/log# upgradepkg gaim-0.59.8-i686-1%/home/melmak/gaim-0.64-i686-1.tgz +============================================================================== | Upgrading gaim-0.59.8-i686-1 package using /home/melmak/gaim-0.64-i686-1.tgz +============================================================================== Pre-installing package gaim-0.64-i686-1... Removing package /var/log/packages/gaim-0.59.8-i686-1-upgraded-2003-06-27,23:40:25... --> Deleting /usr/lib/gaim/chatlist.so --> Deleting /usr/lib/gaim/libicq.la --> Deleting /usr/lib/gaim/libicq.so --> Deleting /usr/man/man1/gaim.1 --> Deleting /usr/share/gnome/apps/Internet/gaim.desktop Installing package gaim-0.64-i686-1... PACKAGE DESCRIPTION: gaim: gaim-0.64 gaim: gaim: Gaim is an IM client that supports many protocols, including AIM, ICQ, gaim: MSN, IRC, and Jabber. Gaim is NOT endorsed by, nor affiliated with, gaim: AOL nor any other company in ANY way. gaim: Package gaim-0.59.8-i686-1 upgraded with new package /home/melmak/gaim-0.64-i686-1.tgz.
- explodepkg
Descomprime los archivos *.tgz en el directorio actual. Si los hay, no ejecuta los scrpits de instalación:
root@super8:/home/melmak/nmap# ls nmap-3.28-i686-1.tgz root@super8:/home/melmak/nmap# explodepkg nmap-3.28-i686-1.tgz Exploding package nmap-3.28-i686-1.tgz in current directory: ./ usr/ usr/bin/ .. install/doinst.sh install/slack-desc An installation script was detected in ./install/doinst.sh, but was not executed.
En el directorio actual se crea la estructura de directorios que el paquete copiaría a la raíz del sistema.
root@super8:/home/melmak# tree nmap
nmap
|-- install
| |-- doinst.sh
| `-- slack-desc
|-- nmap-3.28-i686-1.tgz
`-- usr
|-- bin
| |-- nmap
| `-- nmapfe
|-- doc
| `-- nmap-3.28
| |-- CHANGELOG
| |-- COPYING
| |-- HACKING
| |-- INSTALL
| `-- README-WIN32
|-- man
| `-- man1
| |-- nmap.1.gz
| |-- nmapfe.1.gz
| `-- xnmap.1.gz
`-- share
|-- gnome
| `-- apps
| `-- Utilities
| `-- nmapfe.desktop
`-- nmap
|-- nmap-os-fingerprints
|-- nmap-protocols
|-- nmap-rpc
`-- nmap-services
- pkgtool
Programa que, mediante sencillos menús, permite visualizar, instalar y eliminar paquetes. Resulta muy útil cuando se han de eliminar varios paquetes, pues bastará con seleccionarlos de entre la lista de paquetes instalados. Por otro lado, esta herramienta permite volver a ejecutar los scripts de instalación que acompañan a algunos de los paquetes ya instalados.

- rpm2tgz
Esta utilidad permite convertir los populares paquetes (RPM) de RedHat, al sistema nativo de paquetes de Slackware, (TGZ). Es recomendable examinar, con explodepkg, el paquete creado por rpm2tgz, antes de proceder a su instalación en el sistema.
Construir paquetes a partir de de las fuentes
En ocasiones, no es fácil encontrar un determinado paquete, otras veces, el paquete descargado fue compilado para una arquitectura i386, en lugar de crearse para arquitecturas i686, como la del moderno equipo sobre el que se instalará. El hecho de no encontrar los binarios compilados para nuestro sistema, no quiere decir que no sea posible instalar la aplicación, pues una de las principales virtudes del software libre es que las fuentes siempre están disponibles. Como se vio en los apartados anteriores, esto permite compilar las aplicaciones a partir de su código fuente, y eventualmente, permite que el administrador genere sus propios paquetes. Para ello están disponibles dos herramientas: makepkg y protopkg. La primera es la suministrada de forma nativa por la distribución Slackware y, al igual que el resto de utilidades del sistema de paquetes, fue programada por Patrick J. Volkerding. La segunda es obra de David Cantrell, creador de la versión para Sparc de Slackware.
Makepkg 2.0
Makepkg empaqueta el contenido del directorio actual dentro de un paquete (TGZ). Antes de ejecutar esta orden se ha de crear el árbol del directorio a empaquetar. Los pasos necesarios para crear un paquete mediante esta utilidad serían los siguientes: Descargar el tarball y descomprimirlo.
melmak@super8:~$ wget download.insecure.org/nmap/dist/nmap-3.28.tar.bz2 melmak@super8:~$ bzip2 -cd nmap-3.28.tar.bz2 | tar xvf -
Situarse en el directorio del tarball descomprimido:
melmak@super8:~$ cd nmap-3.28
Crear allí un directorio para el árbol del paquete compilado.
melmak@super8:~/nmap-3.28$ mkdir -p ./paquete_nmap/usr/
Ejecutar el scipt configure indicando el destino de los binarios que se creen.
melmak@super8:~/nmap-3.28$ ./configure --prefix=/home/melmak/nmap-3.28/paquete/usr/ checking for gcc... gcc checking for C compiler default output... a.out checking whether the C compiler works... yes checking whether we are cross compiling... no ... checking build system type... i686-pc-linux-gnu checking host system type... i686-pc-linux-gnu configure: creating ./config.status config.status: creating Makefile
Compilar especificando el destino de todos los archivos generados
melmak@super8:~/nmap-3.28$ make prefix=/home/melmak/nmap-3.28/paquete_nmap/usr/ Compiling libpcap make[1]: Entering directory `/home/melmak/nmap-3.28/libpcap-possiblymodified' gcc -I. -g -O2 -DHAVE_CONFIG_H -c ./pcap-linux.c gcc -I. -g -O2 -DHAVE_CONFIG_H -c ./pcap.c gcc -I. -g -O2 -DHAVE_CONFIG_H -c ./inet.c ... gcc -g -O2 -I/usr/include/gtk-1.2 -I/usr/include/glib-1.2 -I/usr/lib/glib/include -I/usr/X11R6/include -Wall -I../nbase -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DLINUX=1 -DPCAP_TIMEOUT_IGNORED=1 -DVERSION=\"3.28\" -DHAVE_CONFIG_H=1 -I. -L../nbase -o nmapfe nmapfe.o nmapfe_sig.o nmapfe_error.o -L/usr/lib -L/usr/X11R6/lib -lgtk -lgdk -rdynamic -lgmodule -lglib -ldl -lXext -lX11 -lm -lnbase make[1]: Leaving directory `/home/melmak/nmap-3.28/nmapfe'
Instalar los archivos creados durante la compilación.
melmak@super8:~/nmap-3.28$ make prefix=/home/melmak/nmap-3.28/paquete_nmap/usr/ install
Opcionalmente se puede crear un script de instalación en ./install/doinst.sh. Por último hay que situarse en el directorio paquete_namp, y ya sólo queda crear el paquete con makepkg
root@super8:/home/melmak/nmap-3.28# cd paquete_nmap/ root@super8:/home/melmak/nmap-3.28/paquete_nmap# makepkg nmap-3.28-i686-ejemplo.tgz makepkg nmap-3.28-i686-ejemplo.tgz Slackware package maker, version 2.0. Searching for symbolic links: ... usr/share/gnome/apps/ usr/share/gnome/apps/Utilities/ usr/share/gnome/apps/Utilities/nmapfe.desktop tar-1.13: nmap-3.28-i686-ejemplo.tar is the archive; not dumped Gzipping nmap-3.28-i686-ejemplo.tar... Renaming nmap-3.28-i686-ejemplo.tar.gz to nmap-3.28-i686-ejemplo.tgz... Package creation complete.
Ahora ya es es posible instalar la aplicación como paquete
root@super8:/home/melmak/nmap-3.28/paquete_nmap# installpkg nmap-3.28-i686-ejemplo.tgz Installing package nmap-3.28-i686-ejemplo... PACKAGE DESCRIPTION:
Ya sólo queda comprobar que la aplicación ha quedado instalada en el sistema root@super8:~# nmap -sS -O assl.ath.cx -p 20-110
Starting nmap 3.28 ( www.insecure.org/nmap/ ) at 2003-06-28 02:14 CEST Interesting ports on 143.Red-217-126-51.pooles.rima-tde.net (217.126.51.143): (The 85 ports scanned but not shown below are in state: filtered) Port State Service 20/tcp closed ftp-data 21/tcp open ftp 22/tcp open ssh 25/tcp open smtp 80/tcp open http 110/tcp open pop-3 Remote operating system guess: Linux Kernel 2.4.0 - 2.5.20 Uptime 44.030 days (since Thu May 15 01:31:49 2003) Nmap run completed -- 1 IP address (1 host up) scanned in 24.546 seconds
Protopkg 2.0
El funcionamiento de este programa es significativamente más sencillo que su homólogo makepkg. Con él tan sólo se ha de crear un archivo llamado prototype, en el cual se especifican los pasos estándar con los que se compilaría la aplicación normalmente. Estos pasos suelen estar explicados en la documentación del tarball.
Protopkg toma una instantánea del árbol de directorios del sistema, copia los archivos generados en el proceso de compilación, y los compara con la foto del que tenía árbol, antes de instalarse la aplicación. De esta sencilla manera es capaz de crear el paquete, pues sabe en todo momento los archivos que se han de borrar para eliminar el paquete.
Protopkg ya no se incluye en el CD-ROM de Slackware 9.0. Para instalarlo es necesario descargarlo de la red. ftp://ftp.slackware.com/pub/slackware/unsupported/packages/utils/protopkg-2.0beta2-noarch-1.tgz
Las fuentes están disponibles aquí: ftp.physics.auth.gr/pub/mirrors/slackware/latest/unsupported/protopkg/source/protopkg-2.0.tar.gz
Los pasos para crear un paquete con esta aplicación son los siguientes:
En primer lugar creamos en /var/spool/prototypes un directorio para cada paquete que queramos instalar, con el nombre genérico del programa a instalar, para de esta forma facilitar así su identificación.
Por ejemplo para crear el paquete del programa nmap:
root@super8:~# mkdir -p /var/spool/prototypes/nmap-3.28
Posteriormente se copia alli el tarball con las fuentes del paquete a instalar
root@super8:~# cp /home/melmak/nmap-3.28.tar.bz2 /var/spool/prototypes/nmap-3.28/
En el directorio creado, editamos un archivo llamado prototype, que no es más que un shell-scritp que le indica a protopkg los pasos que ha de realizar para generar el paquete. Algunas de las directivas importantes de este archivo son:
- VERSION
Especifica la versión del programa que se va a instalar
- BUILD
Indica el número de veces que se ha ejecutado protopkg para generar el paquete, numero de intentos o versiones creadas
- ARCH
Indica la arquitectura del microprocesador. Utilizando el mismo formato que ejectando uname -a o arch. De esta manera el paquete se creara para una u otra arquitectura
- PROGNAME
Nombre del programa
- PKGNAME
Nombre del paquete, creado automáticamente con todas las variables anteriores. El nombre del paquete, se forma de la siguiente manera : PKGNAME="$PROGNAME-$VERSION-$ARCH-$BUILD"
- DESC
Es la descripción de lo que hace el paquete, este mensaje aparece en pantalla al instalar el paquete con el comando installpkg nobre_paquete.tgz
- VERSION
Especifica la versión del programa que se va a instalar
- IGNOREPATH
Permite acelerar la creacion del paquete, ya que permite añadir los PATHS en dónde NO hay que mirar los cambios, no tiene sentido que se mire en /dev, /proc dado que ninguna aplicación copia archivos a dichas ubicaciones.
- MANTAINER
Nombres y e-mails del creador del paquete
- SOURCE
Especifica el sitio web o ftp desde dónde se puede descargar el paquete
El archivo prototype para crear el paquete de nmap quedaría asi:
# nmap-3.28 prototype VERSION=3.28 BUILD=1 ARCH=i686 PROGNAME="nmap" PKGNAME="$PROGNAME-$VERSION-$ARCH-$BUILD" DESC="\ Nmap es un scanner de puertos avanzado, este paquete ha sido \n\ creado a modo de ejemplo para el curso de administracion de sitemas." IGNOREPATH="/dev:/proc:/home:/root:/tmp:/export:/mnt:/floppy:/cdrom" STRIPBIN=y STRIPLIB=y SETATTR=y MAINTAINER="Marcos Martínez <marjimma@eupmt.es> - http://assl.ath.cx" SOURCE="http://download.insecure.org/nmap/dist/nmap-3.28.tar.bz2" LOCATION="http://www.nmap.com" compile() { bzip2 -cd $CWD/$PROGNAME-$VERSION.tar.bz2 | tar xvf - cd $PROGNAME-$VERSION ./configure make } install() { make install } attributes(){ echo "No attributes..." } special(){ echo "No special..." } subpacks(){ echo "No subpacks..." }
Para generar el paquete, ya sólo queda ejecutar:
root@super8:/var/spool/prototypes/nmap-3.28# protopkg -vcd
Tras finalizar el proceso, se obtiene el paquete en el directorio actual, ahora ya sólo queda almacenarlo en su ubicación definitiva, por ejemplo en /var/spool/packages, e instalarlo con las utilidad installpkg.
root@super8:/var/spool/prototypes/nmap-3.28# mkdir /var/spool/packages root@super8:/var/spool/prototypes/nmap-3.28# mv nmap-3.28-i686-1.tgz ../../packages/ root@super8:/var/spool/prototypes/nmap-3.28# installpkg ../../packages/nmap-3.28-i686-1.tgz Installing package nmap-3.28-i686-1... PACKAGE DESCRIPTION: Executing install script for nmap-3.28-i686-1...
Funcionamiento del sistema de paquetes en Gentoo
Es sistema de paquetes de Gentoo se llama portage, y su herramienta principal emerge.
El portage es un árbol de directorios en el cual se almacenan los paquetes disponibles, llamados ebuilds. Los ebuilds continen la información necesaria para que un paquete de software pueda ser instalado. El portage se encuetra localmente en /usr/portage.
Un ejemplo de ebuild es el siguiente:

