Los paquetes y su gestión:
Los paquetes son la agrupación instalable de los diferentes archivos necesarios para que un programa funcione. Se pueden parecer a los programas que se descargan de internet para windows, es decir, un archivo ejecutable que contiene un programa. La diferencia es que en GNULinux los paquetes no son ejecutables, sino que son gestionados por terceras aplicaciones. Además, los paquetes de Linux suelen ser muchísimo más compactos y reducidos ya que no traen consigo las librerías compartidas (dependencias) y, llegado el caso de necesitarse, serán instaladas o se nos informará de la necesidad de hacerlo, según el gestor de paquetes que estemos utilizando.
Las aplicaciones Linux se suministran normalmente en tres formatos o tipos de paquetes:
RPM: se utilizan en distribuciones basadas en Red Hat, Fedora, Mandriva…, pueden tener tanto binarios como código fuente.
DEB: distribuciones basadas en Debian (Linex, Guadalinex…). Pueden contener tanto binarios como código fuente.
Tar.gz: código fuente empaquetado y comprimido para ser instalado directamente.
La mayor parte de las aplicaciones disponen de versiones DEB, y RPM. y, por supuesto, todas se encontrarán también empaquetadas en tar.gz. Se pueden convertir paquetes y pasarlos de rpm a deb y viceversa, si se diera el caso que no existieran paquetes en alguno de los formatos,con el programa ALIEN, pero éste no siempre podrá garantizar el correcto funcionamiento de un paquete convertido a otro, en general, se garantizará mejor la instalación de un paquete si éste fue creado directamente para su tipo correspondiente.
Paquetes RPM:
Es un sistema de empaquetamiento que se está convirtiendo en un estándar de hecho en el mundo Linux por las ventajas que supone sobre otros modelos, pero bajo mi punto de vista todavía no alcanza a las posibilidades de la paquetería DEB, no obstante, al ser creado por RedHat, y dado que ésta es una de las distribuciones más utilizadas en el mundo, hace que su sistema de paquetes lo sea también.
RPM proporciona al usuario una serie de facilidades que hacen el mantenimiento del sistema mas sencillo de gestionar ya que mantiene una base de datos de los paquetes instalados y de sus archivos, lo que permite realizar consultas y verificaciones del sistema. Asimismo, Otra ventaja es que al actualizar software, los archivos de configuración se respetan de manera que no sea necesario volver a realizar los ajustes específicos que ya tuviera definidos, o si no fuera posible, realiza una copia de seguridad de los mismos.
Trabajar con RPM
rpm tiene cinco modos de trabajo: instalación, actualización, consulta, desinstalación y verificación.
Instalación
Pongamos que tenemos al lector de pantallas yasr empaquetado en RPM:yasr-0.7.6.i386.rpm
Normalmente se nombran utilizando el nombre del paquete (yasr), versión (0.7), desarrollo (6), y arquitectura (i386). Asegúrate de elegir la arquitectura adecuada para tu sistema!.
Para instalar un paquete: rpm -ivh yasr-0.7.6.i386.rpm
El parámetro i es el utilizado para la instalación. Los otros dos son opcionales, pero útiles. El modo verbose, con v aporta información extra y la h (hash) imprime esas marcas de progreso (#) que nos dicen que algo está ocurriendo, podemos hacer una prueba de lo que ocurrirá, sin llegar a instalar, usando la opción: -test.
La instalación de paquetes resulta fácil, pero pueden ocurrir percances:
-Si intentas instalar un paquete que ya está instalado, toma como ejemplo el paquete yasr que hemos instalado más arriba, el sistema nos dará un mensaje similar a este:
yasr package yasr-0.7.6 is already installed
error: yasr-0.7.6.i386.rpm cannot be installed
Para forzar la instalación usaremos: -replacepkgs
Si intentas instalar un paquete que contiene un archivo que ha sido ya instalado por algún otro paquete el sistema te dará un error similar al siguiente:
yasr /usr/bin/yasr conflicts with file from mim-0.7.6
error: yasr-0.7.6.i386.rpm cannot be installed
Para hacer que rpm ignore el error, usa -replacefiles
Si intentas instalar un paquete para el cual existe una dependencia no satisfecha:
Los paquetes rpm pueden «depender» de otros paquetes, lo cual significa que requieren que otros paquetes estén instalados en el sistema para que funcionen. En este caso el error será:
failed dependencies: yasr is needed by yyyy-x.x.x donde yyy es el nombre del paquete dependiente y x.x.x es el número de versión de ese paquete. La mejor forma de arreglar este error es instalar los paquetes requeridos. Se puede forzar la instalación usando -nodeps, pero si no se satisface una dependencia es casi seguro que el programa no va a funcionar.
Actualización:
Actualizar un paquete es como instalar un paquete con la salvedad de que rpm desinstala automáticamente cualquier versión antigua del mismo.
rpm -Uvh yasr-2.0-1.i386.rpm
En la actualización se mantienen los ficheros de configuración si ello fuera posible. Si los cambios fueran tan importantes para no permitirlo, rpm guarda los ficheros de configuración.
Consulta de paquetes:
Consultar la base de datos de paquetes instalados tampoco es complicado: lo conseguimos con la opción rpm -q. La forma más sencilla de usarlo es:
rpm -q yasr-0.7.6
Combinando -q con otros parámetros, extraeremos más información. Para consultar todos los paquetes instalados utiliza -a
rpm -qa
Esto mostrará en pantalla una lista con los nombres de los paquetes. Para consultar el paquete al que pertenece un fichero concreto: -f
rpm -qf /bin/ls fileutils-4.0-21
Con la opción -ql podemos ver un listado de los ficheros, con -qd vemos un listado de los ficheros con la documentación y con la opción -qc los ficheros de configuración del paquete.
Desinstalación de paquetes:
Desinstalar un paquete es tan sencillo como instalarlo, rpm garantiza la limpieza del procedimiento y que se desinstalarán todos los ficheros, no importa donde estén instalados:
rpm -e yasr
En la desinstalación se usa el nombre yasr y no el nombre completo del paquete.
Un error habitual es el de «romper» las dependencias al desinstalar un paquete si algún otro paquete instalado depende del que estás intentando borrar. Para hacer que rpm no realice la comprobación de dependencias y desinstale el paquete de todas maneras: -nodeps.
Verificación:
Verificar un paquete es comprobar la integridad del mismo, osea si tenemos en el sistema actualmente lo mismo que se instaló en su día y si está como se supone que debería estar. Entre otras cosas, se compara el tamaño, chequeo MD5, permisos, tipo, usuario y grupo de cada archivo.
rpm -V yasr
Si el paquete está correcto, la salida es: nada. No hay cambios, o sea que no hay nada que mostrar.
En el caso de encontrar diferencias muestra en pantalla una palabra de ocho caracteres, uno por cada prueba que realiza. Un punto equivale a que la comparación es correcta. Una letra indica un cambio en esa comparación concreta. Los chequeos que hace son:
-Tamaño del archivo: S
-Enlace simbólico: L
-Fecha del archivo: T
-Dispositivo distinto: D
-Usuario distinto: U
-Grupo distinto: G
-Modo (permisos) distinto: M
-MD5 modificado: 5
Para localizar ficheros que afectan a la gestión de las bases de datos de rpm tendremos que mirar en /var/lib/rpm y en /usr/lib/rpm
Listado de /var/lib/rpm:
conflictsindex.rpm groupindex.rpm packages.rpm
requiredby.rpm fileindex.rpm nameindex.rpm
providesindex.rpm triggerindex.rpm
packages.rpm es el que contiene la base de datos de los programas que tenemos instalados en el sistema. La integridad de este fichero es importante para el correcto funcionamiento de rpm.
Del contenido de /usr/lib/rpm, cabe destacar dos ficheros de configuración, rpmopt y rpmrc. La configuración actual se puede ver ejecutando:
rpm -showrc
PAQUETES DEB:
En un paquete de este tipo, normalmente, tendremos un conjunto de aplicaciones que se instalarán en la ubicación que esté preestablecida cuando se haya creado el paquete.
Por tanto, podremos sobreentender que un paquete es un fichero que a su vez contiene ficheros y directorios comprimidos que se instalarán en el sistema cuando este paquete sea invocado con las diferentes aplicaciones que tengamos para ello.
Los paquetes DEB se pueden reconocer fácilmente por utilizar como parte de su nombre «la extensión» .DEB. Suelen formarse por un nombre que alude al paquete seguido de los números de versión del paquete y puede contener también un indicativo de la plataforma para la que ha sido creado y compilado. Un ejemplo podría ser algo parecido a lo siguiente: yasr_0.6.7_i386.deb. Esto indicaría que el paquete es yasr, que su versión es la 0.6.7 y que ha sido compilado para la plataforma intel 386. Generalmente el que esté compilado para 386 no indica que no vaya a funcionar en un 486 o en un 586, aunque podría no funcionar adecuadamente si fuera al revés.
Utilidades para gestionar paquetes DEB:
Existen varias aplicaciones para su gestión desde la línea de comandos y desde el entorno gráfico. Algunas de ellas son las siguientes:
Apt-get:
Es posiblemente la herramienta de gestión de paquetes más potente y fácil de manejar que existe. Nos permite desinstalar y manejar todo lo referente a estos paquetes desde la línea de comandos. La mejor de las capacidades de este programa es hacer instalaciones desde internet bajando cada uno de los paquetes necesarios de ordenadores remotos especialmente organizados para ello. A estos lugares en internet de los cuales se descargan los paquetes se les llama repositorios. Casi la totalidad del material que se encuentra en estos repositorios suele ser gratuito. Si un paquete necesita algún otro que sea requerido para su funcionamiento, este programa, a diferencia de otros, busca e instala también esos paquetes. Cuando un programa necesita de otros para funcionar correctamente, se dice que hay dependencias, por ello, estamos haciendo con este programa de instalación de paquetes que gestione las dependencias por nosotros, lo que nos evitará muchos dolores de cabeza por evitarnos la búsqueda de dependencias a mano a lo largo de los miles de archivos que nos puede ofrecer un repositorio o una colección de CDs. Asimismo, también la misma herramienta, en ocasiones, nos podrá ofrecer un listado de paquetes no dependientes pero sí recomendados que podremos instalar o no a nuestro criterio.
Cada distribución que podamos estar utilizando tiene un número específico de repositorios a los que apunta y de los que descargará paquetes o actualizaciones, pero esto no debe ser una limitación, ya que podremos añadir otros diferentes que nos puedan agregar funcionalidades o programas que en los repositorios originales no había. En el archivo etc/apt/sources.list podemos consultar o modificar estos repositorios de paquetes.
Opciones principales de apt-get:
apt-get update – actualiza la lista de los paquetes disponibles en los repositorios. Modifica la información en el fichero sources.list. Es recomendable hacerlo de vez en cuando para asegurarnos de que a la hora de instalar o actualizar un paquete determinado o la distribución en general dispongamos de las versiones más actualizadas.
apt-get upgrade – Comprueba las versiones de los paquetes instalados y, si existen versiones posteriores, realiza una actualización.
apt-get dist-upgrade: Lo mismo que la anterior pero actualiza, no sólo los paquetes, sino también, la propia distribución de linux.
apt-get install NombreDelPaquete: ejemplo apt-get yasr. No hace falta dar todo el nombre completo, se puede introducir sin extensión ni número de versión.
apt-get remove NombreDelPaquete: desinstala el paquete indicado (no así con las posibles dependencias, ya que éstas pueden ser necesarias para que otras aplicaciones puedan seguir funcionando).
Otras opciones pueden ser:
source – Descarga archivos fuente
build-dep – Configura las dependencias de construcción para paquetes fuente
dselect-upgrade – Sigue las selecciones de dselect
clean – Elimina los archivos descargados
autoclean – Elimina los archivos descargados antiguos
check – Verifica que no haya dependencias incumplidas
Modificadores:
-h texto de ayuda.
-q Salida registrable – sin indicador de progreso
-qq Sin salida, excepto si hay errores
-d Sólo descarga – NO instala o desempaqueta los archivos
-s No actúa. Realiza una simulación
-y Asume Sí para todas las consultas
-f Intenta continuar si la comprobación de integridad falla
-m Intenta continuar si los archivos no son localizables
-u Muestra también una lista de paquetes actualizados
-b Construye el paquete fuente después de obtenerlo
-V Muestra números de versión detallados
Dpkg:
Se trata de otra aplicación que gestiona paquetes DEB y proporciona información sobre los paquetes instalados. A diferencia del apt-get, no instala automáticamente las dependencias (otros paquetes que deben instalarse previamente) sino que se limita a indicarlas durante el proceso de instalación. Por eso es un programa menos claro y más difícil de utilizar, pero en ocasiones podrá resultarnos de más utilidad.
Algunas opciones:
dpkg -l
Comprueba los paquetes instalados en la máquina y ofrece un listado completo.
Si queremos información relacionada con un solo paquete, se puede utilizar el pipe GREEP con el comando. Ejemplo: dpkg |grep. Más adelante veremos los pipes o tuberías, pero ahora lo dejaremos así por no ser relevante.
dpkg -L NombrePaquete.
Informa sobre el contenido (los ficheros) que forman un paquete.
Ejemplo.: dpkg -L tree nos informará sobre los ficheros del paquete tree
/.
/usr
/usr/bin (el ejecutable)
/usr/bin/tree
/usr/share ()
/usr/share/man (información manuales)
/usr/share/man/man1
/usr/share/man/man1/tree.1.gz
/usr/share/doc
/usr/share/doc/tree
/usr/share/doc/tree/README
/usr/share/doc/tree/copyright
/usr/share/doc/tree/changelog.gz
/usr/share/doc/tree/changelog.Debian.gz
dpkg -i NombrePaqueteCompleto
Para instalar paquetes que tenemos localmente y no necesitamos descargar.
dpkg -r NombrePaqueteCompleto
Desinstalación
dpkg -s fichero
Informa de los paquetes que contienen ese fichero (a que paquetes pertenece).
La instalación y desinstalación se pueden hacer indistintamente desde dpkg y apt-get ya que gestionan el mismo tipo de ficheros, pero en la mayor parte de las ocasiones utilizaremos apt-get, dejando dpkg para desinstalar paquetes problemáticos o para instalar paquetes sueltos que hemos bajado de internet sin pasar por los repositorios.
FICHEROS TAR Y GZ
El formato tar de ficheros, frecuente en Linux, es una agrupación de éstos (como los zip de Windows pero en este caso no están comprimidos). El empaquetador TAR se utiliza para hacer copias de seguridad de varios archivos o de directorios enteros: el contenido quedará agrupado en un sólo fichero cuyo archivo resultante tendrá, habitualmente, la extensión «.tar». Este programa se utilizó, en un principio, para generar empaquetamientos dedicados a crear copias de respaldo en unidades de cinta externa.
Agrupar y comprimir
El TAR se utiliza frecuentemente en combinación con el GZIP (herramienta de compresión) y así los obtenemos agrupados y comprimidos. Se pueden hacer los dos procesos por separado (agrupar con tar y comprimir después con gzip) pero también se pueden hacer simultaneamente utilizando el carácter «z» con el comando tar. La opción z se utiliza para la compresión y descompresión de archivos.
Ejemplo: tar cvfz fichero
V equivale al modo verboso o prolijo (aparece toda la información del proceso en pantalla); la z es para comprimir.
A los ficheros comprimidos y agrupados se les pone la extensión .tar.gz (gz indica que está comprimido), también, en algunas ocasiones podremos ver la extensión tgz, pero es más común la otra.
Ejemplo: tar cvfz fichero.tar.gz /root
hará una copia del directorio root, comprimida y agrupada, en el fichero.tar.gz, dentro del directorio en el que estamos.
Se pueden hacer a la vez varios directorios separándolos por espacios: tar cvfz directorio1 directorio2 directorio3.
Descomprimir, desagrupar y compilar
Estos paquetes no están en formato DEB ni RPM. Están sin compilar para hacer posible modificaciones de todo tipo incluyendo el código fuente. Antes de compilar un archivo hay que desagrupar y descomprimir. Veamos como haríamos este proceso con el lector de pantallas yasr:
tar xvfz yasr-0.6.7.tar.gz
Se genera un directorio con el nombre del fichero en el directorio en el que estamos que contendrá todos los archivos de código fuente, de documentación y de scripts que sean necesarios para el programa.
Seguidamente se entra en ese directorio y se utilizan los siguientes comandos (en el orden en que figuran):
./configure (esto activa el script de comfiguración y preparación de las variables del compilador y demás partes del sistema; es importante no omitir el ./ (punto barra)).
make (esto arranca la compilación del código fuente para convertirlo a lenguaje que la máquina pueda entender, es decir, se hace que el código fuente se combierta en binario).
make install (esto hace que se instale el programa en las rutas especificadas por el creador del mismo).
De este modo tendríamos instalado el lector de pantallas yasr en nuestro equipo. De todos modos es preferible, si existe el paquete en el formato DEB o RPM intentar instalarlo desde ellos y utilizar solamente el tar.gz cuando no existan o cuando las circunstancias nos lo aconsejen hacer así.Con la orden make clean limpiarás los archivos temporales resultantes del proceso de la compilación y que no nos sirven para nada.
Con make uninstall podrás desinstalar el paquete instalado desde tar.gz.
Existen también diferentes aplicaciones de gestión de paquetes que funcionan en los escritorios gráficos pero de momento vamos a dejarlos de lado y, llegado el caso y dependiendo de su accesibilidad, los trataremos más adelante.
Por otra parte, existen numerosas utilidades para poder gestionar los paquetes en los diferentes escritorios existentes para Linux, pero de momento las dejaremos en espera mientras no comencemos con el trabajo en el modo gráfico y mientras no se consiga una buena accesibilidad.
Que buen aporte. Gracias