7.11 ¿Cómo instalo un nuevo programa?

Imagen de ElSanto

En esta sección consideraremos las posibilidad de instalar un nuevo programa en nuestro sistema linux.

La oferta de programas en linux y los formatos de paquete

En la red podemos encontrar una enorme cantidad de software para linux el cual podemos encontrarlo como archivos en código fuente, que han de compilarse antes de su instalación, o en formato binario, listos para ser instalados. En formato binario encontraremos los paquetes que instalan las diversas distribuciones linux y -evidentemente- el software comercial: no iban a desvelar su código fuente ;-))!. La idea fundamental que justifica la necesidad de paquetes de software para linux estriba en que:


  • Se comprueban las dependencias de funcionamiento del paquete y éste no se instala si no están instalados los necesarios para que la aplicación funcione.

  • La instalación y desinstalación es automática y no deja "basura" en el sistema al desinstalar paquetes.

  • Actualización automática de paquetes.

  • Control de los archivos de configuración.

Existen varios sistemas o formatos de paquetes, que fueron establecidos por ciertas distribuciones de linux y que merecen discutirse separadamente: el sistema de paquetes Debian, RedHat y Slackware

El sistema de paquetes Debian

Este sistema fue el primero en aparecer, exclusivo de Debian y muy potente: su sistema de dependencias es el más completo y flexible que existe. Lo usa la propia Debian y Corel Linux. Los paquetes debian tienen la extensión .deb y la herramienta de gestión de dichos paketes es dpkg. Una descripción mínima de las posibilidades de dpkg se indica a continuación

Instalación

-i|--install

   dpkg -i  ; por ejemplo:

   dpkg -i icewm_0.8.12-1.deb

Si deseamos instalar toda una seie de paquetes que se encuentran en un directorio determinado, por ejemplo, /usr/local/Debian/archive, es posible hacerlo de manera recurrente con la opción -R:

    dpkg -i -R /usr/local/Debian/archive

sin embargo, esta opción puede no ir bien a causa de posibles dependencias entre paquetes ya que dpkg los va instalando conforme los encuentra, y ese quizás no sea el orden requerido para las dependencias. Mejor es entonces hacer la instalación en dos etapas con las opciones --unpack y --configure:

   dpkg --unpack /usr/local/Debian/archive

desempaqueta todos los ficheros .deb del directorio. Si solamente queremos configurar algunos de ellos, haremos entonces

   dpkg --configure 

pero si queremos instalar todos los paquetes desempaquetados del directorio haremos:

   dpkg --pending

o de manera más corta,

   dpkg -a

Actualización

Para actualizar se usa la misma opción -i que en la instalación. Si por ejemplo tenemos instalado el paquete icewm_0.8.11-1.deb y hacemos

   dpkg -i icewm_0.8.12-1.deb

en lugar de instalarse separadamente actualiza el sistema a esta última versión.

Desinstalación

-r|--remove

Esta opción borra un paquete determinado, pero no borra los ficheros de configuración. Esto puede interesarnos cuando pensemos reinstalar el paquete en el futuro, pues ya dispondríamos de los ficheros de configuración. Así si queremos eliminar el paquete icewm_0.8.12-1.deb que tenemos instalado dejando sus ficheros de configuración haremos

   dpkg -r icewm

NOTA: nótese que sólamente hay que escribir el cabecero del paquete, no su versión ni su extensión.

--purge

En este caso el paquete se borra junto con todos sus ficheros de configuración asociados. El paquete queda completamente erradicado del sistema:

   dpkg --purge icewm

Consultas


  • dpkg -l: da un listado de todos los paquetes instalados en el sistema, con la versión y una breve descripción

  • dpkg -I : proporciona información sobre el paquete

  • dpkg --print avail : proporciona información sobre el paquete

  • dpkg -L : da una lista de los distintos ficheros que se crearon en la instalación del paquete

  • dpkg -S : proporciona el nombre del paquete al que pertenece el fichero (dar la ruta completa: /usr/bin/wget)

Existe una utilidad que funciona como interfaz de usuario para la gestión de paquetes debian llamada dselect, que nos sirve cuando hay que navegar entre la multitud de paquetes de un CD debian o en los directorios remotos mediante ftp. Pero aunque se trata de una herramienta poderosa en manos del usuario medio y avanzado, es muy temida por el neófito habida cuenta de su poco intuitivo manejo. Para evitar esta reacción del usuario novel, los desarrolladores de Debian han creado la utilidad apt, que en la nueva liberación Debian 2.2 debería encontrarse plenamente activa junto con un propio front-end. Mientras tanto los novicios har=EDan bien en consultar el manual de dselect para novatos http://www.debian.org/releases/stable/i386/dselect-beginner.html.

El sistema de paquetes RedHat

El formato de paquetes diseñado por RedHat, lo usan además todas las distribuciones basadas en él como Caldera Openlinux, Mandrake, Esware, Hispafuentes y también SuSE, aunque esta última no se trata de una "emanación" de RedHat. La extensión de los paquetes es .rpm y la herramienta de gestión de paquetes se llama también rpm, cuyas posibilidades se muestran a continuación:

Instalación

-i

   rpm -i nombre_del_paquete.rpm; por ejemplo:
   dpkg -i wget-1.4.5-2.rpm

Sin embargo, el paquete solamente se instalará si se han satisfecho las posibles dependencias con otros paquetes. Es posible forzar la instalación rechazada a causa de dependencia con otros paquetes usando la opción -nodeps, pero no es aconsejable.

Actualización

-U

   rpm -i nombre_del_paquete_actualizado.rpm
   rpm -U wget-1.5.3-1.rpm

de este modo se desinstala el paquete obsoleto wget-1.4.5-2 y se instala la nueva versión wget-1.5.3-1. Si el programa rpm encuentra un fichero de configuración que no ha sido cambiado por el administrador hasta el momento de la actualización, sobreescribe el nuevo fichero de configuración en él, pero si encuentra el fichero de configuración modificado por el administrador, entonces salva el fichero de configuración antiguo con la extensión .rpmorig y lo reemplaza por el nuevo.

Desinstalación

-e

   rpm -e nombre_del_paquete
   rpm -e wget

NOTA: Nótese que sólamente hay que escribir el cabecero del paquete, no su versión ni su extensión.

Consultas

Para realizar una consulta disponemos de la orden

   rpm -q [parámetros] [opciones] [nombre del paquete]


  • rpm -q -a : lista todos los paquetes instalados

  • rpm -q : informa del nombre, versión y número de desarrollo del paquete

  • rpm -q -i : proporciona información verbosa acerca del paquete instalado.

  • rpm -q -l : muestra la lista de archivos correspondiente al paquete

  • rpm -q -f : muestra el paquete al que corresponde el fichero (especificar la ruta completa: /usr/bin/wget)

Antaño (hasta la versión de RedHat 5.2), había una herramienta estupenda para la gestión de paquetes rpm mediante interfaz gráfica de usuario: se llamaba glint, y fue muy aplaudido por los neófitos y administradores por su facilidad para manipular los paquetes. Hoy día ya no disponemos de él, pero si se utilizan Escritorios como KDE o GNOME, podemos usar sus utilidades kpackage o gnorpm, respectivamente.

El sistema de paquetes de Slackware

En cuanto al "sistema de paquetes .tgz" de Slackware, hay cierta distancia con respecto a los ya vistos y es que no hace comprobación de dependencias, labor que corresponde al usuario o administrador. El sistema de paquetes sirve fundamentalmente para instalar o desinstalar de manera rápida los paquetes. La ventaja de esta estrategia es que los usuarios de Slackware pueden instalar los paquetes inmediatamente sin esperar a que pasen el filtro de las dependencias.Por ello, Slackware es una distribución orientada a usuarios algo avanzado, con una idea diáfana de lo que necesitan. El sistema de paquetes de Slackware utiliza ficheros tar comprimidos, tar.gz o tgz, existiendo un programa interactivo para gestionarlos llamado pkgtool. Pero también dispone de utilidades en línea de comando para manejar los paquetes.

installpkg

Escribiendo

   installpkg [ opciones ] archivo.tgz

instalamos el paquete en Slackware. Las opciones son:


  • -warn: Proporciona un informe de lo que ocurriría si instalamos el paquete que envía a la salida estándar.

  • -m: Empaqueta el contenido del directorio de trabajo y sus subdirectorios en el archivo.

removepkg

Escribiendo

   removepkg [ opciones ] archivo.tgz

desinstalamos el paquete del sistema completamente, eliminando además los scripts, librerías, ficheros y directorios anejos. Las opciones son:


  • -warn: Proporciona un informe de lo que ocurrir=EDa si desinstalamos el paquete y lo envía a la salida estándar.

  • -preserve: Reconstruye el árbol de directorios del paquete en /temp/preserved_packages/packagename (packagename es el nombre del paquete, en nuestro caso genérico, "archivo").

  • -copy: Es equivalente a -warn -preserve; es decir no lo desinstala pero informa y guarda el árbol de directorios.

  • -keep: Salva los ficheros temporales creados por removepkg. Útil para debugging.

upgradepkg

Esta utilidad permite actualizar un paquete instalado con otro especificado.
Si tienen el mismo nombre, basta con hacer:

upgradepkg packagename, pero si el nombre es distinto hay que escribir:
upgradepkg oldpackagename % newpackagename.

Otros gestores y conversión de paquetes

Las opciones: Midnight Commander y FileRunner

Existen dos herramientas que pueden ayudarnos a instalar paquetes .rpm, .deb o.tgz, mediante el uso del llamado sistema virtual de ficheros. Se trata del Midnight Commander (MC) y de FileRunner (FR). Estas herramientas permiten acceder al contenido de los paquetes como si fueran directorios, explorando su interior, y vislumbrando los archivos presentes. El conocido MC, se encuentra ya integrado en GNOME y puede descargarse desde http://www.gnome.dk/mc/index.html.
El FR es otra fantástica utilidad desarrollada en tcl/tk que puede conseguirse en http://www.cd.chalmers.se/~hch/filerunner.html.

El octavo pasajero

Sí, a veces, dada la inexistencia de un sistema estándar de paquetes hay utilidades que los desarrolladores de un sistema han producido y preparado y que no encontramos en una determinada distribución. Así, puede haber un archivo .rpm que no existe como .deb o .tgz. En estos casos existe una herramienta inestimable que permite convertir unos paquetes en otros: Alien.

Alien, creado por Giovanni Quadriglio no debería utilizarse intentando reemplazar paquetes importantes del sistema, como las bibliotecas compartidas, el sistema de inicio (sistemv o BSD), etc, que son esenciales para el funcionamiento del mismo. Por otra parte, no se elabora del mismo modo un paquete para Debian que para RedHat. Más aún! Puede haber diferencias en los paquetes .rpm dependiendo que sean de Caldera, SuSE o RedHat; así que Tened cuidado ahí fuera! ;-).

Alien puede descargarse de http://kitenet.net/programs/alien, en cualquiera de los formatos conocidos. Para usar alien se necesitan otras utilidades. La primera, ya que alien está escrito en perl, será disponer de perl instalado. Para la versión actual de alien (6.99) nos bastará perl 5.004. Para convertir paquetes a rpm o desde rpm, necesitaremos tener instalado el RedHat Package Manager; para el caso de deb, necesitamos dpkg, dpkg-deb, debmake, gcc y make. Todos estos archivos "extra" que nos harán falta para las múltiples posibilidades de alien pueden descargarse de ftp//ykbsb2.yk.psu.edu.pub/alien/ como un paquete llamado "alien-extra", en cualquier formato de paquete. Las fundamentales acciones conversoras de alien podemos extraerlas del man:

   alien [ opciones ] paquete a convertir

Las opciones son -d para transformar cualquier formato a .deb (por defecto), -r para convertir a .rpm y -t para pasar a .tgz (también es posible pasar a .slp de Stampede con --to-slp).

Instalando a las bravas

A menudo, especialmente en el caso de la programación libre de código abierto (free software, source code), se dispone del código original (fuente), que generalmente se suministra en forma de un archivo "empaquetado" que contiene "pegados" todos los ficheros y directorios que nos harán falta y que muy a menudo se encuentra además comprimido, para reducir el tamaño del mismo. Para empaquetar ficheros y directorios en un único archivo se usa el programa tar (produciendo un archivo .tar) y para comprimirlo se usan las utilidades compress, gzip o bzip2 (dando lugar a los archivos .z o .Z, .gz y .bz2, respectivamente). De este modo, podemos encontrar nuestros archivos fuente como .tar únicamente en el caso de programas no muy grandes, pues si no hay que comprimirlos para que la gente los descargue con mayor facilidad o quepan más archivos en un medio de almacenamiento como un CDrom. Por eso es más frecuente encontralos con el formato .tar.Z, .tar.gz (también escritos como .tgz y conocidos familiarmente como "tarballs") o .tar.bz2. Una vez que hemos descargado alguno de estos archivos o lo hemos copiado a nuestro disco duro desde un CDrom ó un floppy, habremos de descomprimirlos/desempaquetarlos en un directorio para proceder a su instalación.

En los siguientes epígrafes vamos a considerar los pasos que hay que dar para instalar felizmente la aplicación escogida.

Ubicación de los archivos fuente

Normalmente el código fuente de los programas se sitúan en /usr/local/src. Para que cualquier usuario ubique ahí sus propios directorios el administrador debe otorgar los siguientes permisos (como al /tmp):

   chmod 1777 /usr/local/src

De este modo todos los usuarios pueden poner archivos ahí, pero solamente los propietarios pueden borrar sus ficheros. No obstante, en otros casos, únicamente es el administrador el que se encarga de la selección e instalación del software y entonces los permisos deben ser 755 propietario root y grupo root.

Descompresión y desempaquetado simultáneo con tar

La utilidad tar nos permite descomprimir (caso que sea necesario) y desempaquetar los archivos. Dependiendo del formato del archivo se utilizará una u otra opción. Recomiendo que hagais man tar para ver el variado plumaje de sus opciones. Las más usuales son:


  • z para descomprimir un archivo comprimido .Z, .z o .gz

  • y para descomprimir un archivo comprimido .bz2

  • x para extraer el contenido del archivo (sus ficheros y directorios empaquetados)

  • v (verbose) para ver lo que está sucediendo en la pantalla

  • f (en útimo lugar y seguido del nombre del archivo fuente) para dirigir la salida de tar a ese archivo

  • t lista el contenido del archivo


De este modo podemos efectuar las siguientes acciones:
   tar xvf archivo.tar

   tar zxvf archivo.tar.Z
   
   tar zxvf archivo.tar.gz (ó tgz)
 
   tar yxvf archivo.tar.bz2

No obstante, antes de proceder a la descompresión/desempaquetado del archivo fuente es de recibo hacer un tar tzf al archivo fuente para ver si los ficheros se expanden dentro de un subdirectorio o directamente en /usr/local/src. En este último caso (algo raro), se debe crear un subdirectorio en /usr/local/src copiar el fichero tar a este subdirectorio y proceder a desempaquetarlo.

NOTA: Este último caso no es muy común, pero se dan algunos casos en los que el creador del fichero tar, queriendo o sin querer, comete el fallo de no empaquetar los ficheros dentro de su propio directorio. Esto a sido causa de que a más de uno de nosotros se nos haya llenado p.ej. el directorio /usr/local/src de un monton de "basura" y que hayamos pasado un "ratito" limpiando dicho directorio.

Instalación

Una vez que hemos descomprimido y desempaquetado ficheros y directorios, debemos buscar y leer cuidadosamente los archivos README e INSTALL, donde se nos indicará paso a paso como habrá de hacerse la instalación. En muchos casos se nos advierte de que hay que modificar el Makefile o escoger algunos directorios determinados para la ruta de bibliotecas ó de ciertos ejecutables o hacer algún enlace simbólico o copiar algún archivo en un directorio dado. De cualquier forma, lo más común es ejecutar lo siguiente.

./configure

: Este programa analiza la configuración del sistema y genera un archivo Makefile. Dicho archivo indica los pasos que el programa make ha de seguir para compilar la aplicación. En algunos casos no hay archivo configure y hemos de editar nosotros el Makefile o el config.h para establecer las opciones que nos interesen. No está de más echar un vistazo de todas maneras. Una vez realizado este primer paso debemos ejecutar

make

: Este programa invoca al compilador siguiendo las instrucciones del fichero Makefile. Algunas veces habrá que hacer make all o make nombre_del_programa, como indique el archivo README o INSTALL. Mientras se compila, aparecen en la pantalla mensajes indicadores de las tareas que se están realizando. Pueden aparecer muchos warnings, pero pueden ignorarse, ya que no darán problemas. La compilación habrá terminado con éxito si no se detiene con algún mensaje de Error. De este modo se habrá creado el fichero ejecutable. Para instalarlo convenientemente ejecutaremos el comando su para transformarnos en superusuario y entonces escribiremos

make install

: Generalmente el ejecutable se copia a /usr/local/bin, las bibliotecas en /usr/local/lib y la página de manual en /usr/local/man. Si queremos que se copien en otro directorio hay que cambiar la línea correspondientes en el Makefile o hacer ./configure --prefix=/directorio_de_instalación. En otros casos, no hay que hacer make install y copiamos a mano los archivos a los correspondientes directorios o hacemos un enlace simbólico a los mismos. Existen otras opciones que pueden realizarse después como make clean, etc, que vendrán indicadas en el fichero README o INSTALL.

NOTA: Este proceso que puede parecer muy complicado al principio, no lo es tanto cuando lo hayas hecho unas cuantas veces. Lo importante es leerse detenidamente los ficheros README o INSTALL que vengan con el programa.