martes, 26 de septiembre de 2017

Gestión de Paquetes

Si pasamos algún tiempo en la comunidad Linux, oímos muchas opciones acerca de que distribución es la “mejor”. A menudo, estas discusiones se vuelven muy tontas, centrándose en cosas como la belleza del fondo de pantalla (¡Algunas personas no usan Ubuntu por su gama de colores por defecto!) y otros asuntos sin importancia.

El aspecto más importante que determina la calidad de una distribución es el sistema depaquetes y la vitalidad de la comunidad que soporte la distribución. Según pasemos más tiempo con Linux, veremos que su ecosistema de software es extremadamente dinámico. Las cosas cambian constantemente. La mayoría de las distribuciones Linux líderes liberan nuevas versiones cada seis meses y muchos programas individuales se actualizan cada día. Para enfrentarse a esta ventisca de software, necesitamos buenas herramientas para la gestión de paquetes.

La gestión de paquetes es un método para instalar y mantener software en el sistema. Hoy, la mayoría de la gente puede satisfacer todas sus necesidades de software instalando paquetes de su distribuidor Linux. Ésto contrasta con los primeros días de Linux, cuando uno tenía que descargar y compilar código fuente para instalar software. No es que haya nada malo en compilar código fuente; de hecho, tener acceso al código fuente es una de las grandes maravillas de Linux. Nos da (y a todos los demás también) la capacidad de examinar y mejorar el sistema. Lo único es que tener un paquete precompilado es más rápido y fácil de manejar.

En este capítulo, veremos algunas herramientas de línea de comandos que se usan para manejar los paquetes. Aunque todas las distribuciones importantes ofrecen programas gráficos potentes y sofisticados para mantener el sistema, es importante aprender programas de la línea de comandos también. Pueden realizar muchas tareas que son difíciles (o imposibles) de hacer con sus homólogos gráficos.


Sistemas de paquetes

Diferentes distribuciones usan diferentes sistemas de paquetes y como regla general, un paquete destinado a una distribución no es compatible con otra distribución. La mayoría de las distribuciones se clasifican dentro de dos familias de tecnologías de paquetes: la familia Debian “.deb” y la familia Red Hat “.rpm”. Hay algunas excepciones importantes como Gentoo, Slackware y Foresight, pero la mayoría de las demás usan uno de estos dos sistemas básicos.

Principales familias de sistemas de paquetes

Estilo Debian (.deb)
Debian, Ubuntu, Xandros, Linspire

Estilo Red Hat (.rpm)
Fedora, CentOS, Red Hat Enterprise Linux, OpenSUSE, Mandriva, PCLinuxOS


Cómo funciona un sistema de paquetes

El método de distribución de software utilizado en la industria del software propietario normalmente implica comprar un tipo de medio de instalación como un “disco de instalación” y luego ejecutar un “asistente de instalación” para instalar una nueva aplicación en el sistema.

Linux no funciona de esa forma. Virtualmente todo el software para un sistema Linux se encuentra en Internet. La mayoría lo proveerá el suministrador de la distribución en forma de paquetes y el resto estará disponible en código fuente para ser instalado manualmente. Hablaremos un poco sobre cómo instalar software compilando el código fuente en un capítulo posterior.


Paquetes

La unidad básica de software en los sistemas de paquetes es el paquete. Un paquete es una colección comprimida de archivos que incluyen el paquete de software. Un paquete puede consistir en numerosos programas y archivos de datos que soportan el programa. Además de los archivos a instalar, el paquete también incluye metadatos sobre el paquete, como una descripción en texto del paquete y su contenido. Adicionalmente, muchos paquetes contienen scripts de pre y post instalación que realizan tareas de configuración antes y después de la instalación del paquete.

Los paquetes son creados por una persona conocida como el mantenedor del paquete, a menudo (pero no siempre) un empleado del suministrador de la distribución. El mantenedor del paquete toma el software en código fuente del proveedor superior (el autor del programa), lo compila, y crea los metadatos del paquete y todos los scripts de instalación necesarios. A menudo, el mantenedor del paquete aplicará modificaciones al código fuente original para mejorar la integración del programa con otras partes de la distribución Linux.


Repositorios

Mientras que algunos proyectos de software eligen realizar su propia distribución y empaquetado, la mayoría de los paquetes hoy son creados por los suministradores de la distribución y terceras partes interesadas. Los paquetes son puestos a disposición de los usuarios de una distribución en repositorios centrales que pueden contener miles de paquetes, cada uno construidos y mantenidos especialmente para la distribución.

Una distribución puede mantener varios repositorios diferentes para fases diferentes del ciclo de desarrollo del software. Por ejemplo, normalmente habrá un repositorio de “pruebas” que contendrá paquetes que acaban de ser construidos y que están destinados a almas valientes que buscan errores antes de que sean liberados para distribución general. Un distribución, a menudo, tiene un repositorio de “desarrollo” donde se guardan los paquetes en proceso de trabajo para incluirlos en la siguiente versión principal de la distribución.

Una distribución también puede tener repositorios de terceros relacionados. Éstos a menudo se necesitan para proporcionar software que, por razones legales como patentes o problemas DRM anti piratería, no pueden ser incluidos con la distribución. Quizá el caso más conocido es el del soporte del encriptado de los DVD, que no es legal en Estados Unidos. Los repositorios de terceros funcionan en países donde las patentes de software y las leyes anti pirateria no se aplican. Estos repositorios son normalmente independientes de la distribución que soportan y para usarlos, debemos conocerlos y incluirlos manualmente en los archivos de configuración del sistema de gestión de paquetes.


Dependencias

Los programas raras veces son “autónomos”; en su lugar necesitan la presencia de otros componentes de software para hacer su trabajo. Actividades comunes, como entrada/salida por ejemplo, están soportadas por rutinas compartidas por muchos programas. Estas rutinas se almacenan en lo que llamamos librerías compartidas, que proporcionan servicios esenciales a más de un programa. Si un paquete requiere un recurso compartido como una librería compartida, se dice que tiene dependencia. Los sistemas de gestión de paquetes modernos cuentan con un método de resolución dependencias para asegurarse de que cuando un paquete se instala, todas sus dependencias se instalan también.


Herramientas de paquetes de alto y bajo nivel

Los sistemas de gestión de paquetes normalmente consisten en dos tipos de herramientas: herramientas de bajo nivel que soportan tareas como instalar y eliminar paquetes, y herramientas de alto nivel que realizan búsquedas por metadatos y resolución de dependencias. En este capítulo, veremos las herramientas proporcionadas por los sistemas estilo Debian (como Ubuntu y muchos otros) y aquellas usadas por productos Red Hat recientes. Mientras que todas las distribuciones estilo Red Hat coinciden en el mismo programa de bajo nivel (rpm), usan distintas herramientas de alto nivel. Para nuestro tema, veremos el programa de alto nivel yum, usado por Fedora, Red Hat Enterprise Linux y CentOS. Otras distribuciones estilo Red Hat cuentan con herramientas de alto nivel con características parecidas.


Herramientas de sistemas de paquetes


Distribuciones: Estilo Debian
Herramientas de bajo nivel: dpkg
Herramientas de alto nivel: apt-get, aptitude

Distribuciones: Fedora, Red Hat Enterprise Linux, CentOS
Herramientas de bajo nivel: rpm
Herramientas de alto nivel: yum


Tareas comunes en la gestión de paquetes

Hay muchas operaciones que pueden ser realizadas con las herramientas de gestión de paquetes de la línea de comandos. Veremos las más comunes. Ten en cuenta que las herramientas de bajo nivel también soportan la creación de paquetes, una actividad fuera del objetivo de este libro.

En el siguiente apartado, el término “nombre_paquete” ser refiere al nombre real del paquete en lugar del término “archivo_paquete”, que es el nombre del archivo que contiene el paquete.


Buscando un paquete en un repositorio

Usando las herramientas de alto nivel para buscar metadatos en un repositorio, un paquete puede ser localizado basándonos en su nombre o descripción.

Comandos de búsqueda de paquetes

Estilo Debian
apt-get update
apt-cache search cadena_busc
ada

Estilo Red Hat
yum search cadena_buscada


Ejemplo: Para buscar el editor de texto emacs en un repositorio yum, podemos usar este comando:

 yum search emacs


Instalando un paquete de un repositorio

Las herramientas de alto nivel permiten descargar e instalar un paquete de un repositorio con resolución completa de dependencias.

Comandos de instalación de paquetes

Estilo Debian
apt-get update
apt-get install nombre_paquete

Estilo Red Hat
yum install nombre_paquete


Ejemplo: Para instalar el editor de texto emacs de un repositorio apt:

 apt-get update; apt-get install emacs


Instalando un paquete de un archivo de paquetes

Si un archivo de paquetes ha sido descargado de una fuente distinta a un repositorio, puede ser instalado directamente (aunque sin resolución de dependencias) usando una herramienta de bajo nivel:


Comandos de instalación de paquetes de bajo nivel

Estilo Debian
dpkg --install archivo_paquete

Estilo Red Hat
rpm -i archivo_paquete
Ejemplo: si el archivo de paquetes emacs-22.1-7.fc7-i386 ha sido descargado de un sitio que no sea un repositorio, podría ser instalado de la siguiente forma:

 rpm -i emacs-22.1-7.fc7-i386.rpm


Nota: Como esta técnica usa el programa de bajo nivel rpm para realizar la instalación, no se realiza ninguna resolución de dependencias. Si rpm descubre una dependencia que falta, rpm terminará con un error.

Eliminando un paquete

Los paquetes pueTabla 15-6: den ser desinstalados usando tanto las herramientas de bajo nivel como de alto nivel. Las herramientas de alto nivel se muestran a continuación.

Comandos de eliminación de paquetes

Estilo Debian
apt-get remove nombre_paquete

Estilo Red Hat
yum erase nombre_paquete
Ejemplo: para desinstalar el paquete emacs de un sistema estilo Debian:

 apt-get remove emacs


Actualizando paquetes de un repositorio

La tarea de gestión de paquetes más común es mantener el sistema actualizado con los últimos paquetes. Las herramientas de alto nivel pueden realizar estas tareas vitales en un paso único.

Comandos de actualización de paquetes

Estilo Debian
apt-get update; apt-get upgrade

Estilo Red Hat
yum update
Ejemplo: para aplicar todas las actualizaciones disponibles a los paquetes instalados en un sistema estilo Debian:

 apt-get update; apt-get upgrade

Actualizando un paquete desde un archivo de paquetes

Si una versión actualizada de un paquete ha sido descargada desde una fuente que no es un repositorio, puede ser instalada reemplazando a la anterior versión:
Comandos de actualización de paquetes de bajo nivel

Estilo Debian
dpkg --installarchivo_paquete

Estilo Red Hat
rpm -U archivo_paquete

Ejemplo: Actualizar una instalación existente de emacs a la versión contenida en el archivo de paquetes emacs-22.1-7.fc7-i386.rpm en un sistema Red Hat:

 rpm -U emacs-22.1-7.fc7-i386.rpm

Nota: dpkg no tiene una opción específica para actualizar un paquete en lugar de instalarlo tal como lo hace rpm.

Listando los paquetes instalados

Estos comandos pueden utilizarse para mostrar una lista de todos los paquetes instalados en el sistema:

Comandos de listado de paquetes

Estilo Debian
dpkg --list

Estilo 
Red Hat
rpm -qa


Determinando si un paquete está instalado

Estas herramientas de bajo nivel pueden utilizarse para mostrar si un paquete específico está instalado:

Comandos de estado de paquetes

Estilo Debian
dpkg –statusnombre_paquete

Estilo Red Hat
rpm -q nombre_paquete

Ejemplo: Para determinar si el paquete emacs está instalado en un sistema estilo Debian:

 dpkg –status emacs


Mostrando información acerca de un paquete instalado

Si sabemos el nombre de un paquete instalado, los siguientes comandos pueden utilizarse para mostrar una descripción del paquete:


Comandos de información de paquetes

Estilo Debian
apt-cache shownombre_paquete

Estilo Red Hat
yum info nombre_paquete
Ejemplo: Para ver una descripción del paquete emacs en un sistema estilo Debian:

 apt-cache show emacs


Buscando qué paquete ha instalado un archivo

Para determinar que paquete es responsable de la instalación de un archivo en particular, podemos usar los siguientes comandos:

Comandos de identificación del archivo de paquetes

Estilo Debian
dpkg --search archivo_paquete

Estilo Red Hat
rpm -qf archivo_paquete
Ejemplo: Para ver que paquete instaló el archivo /usr/bin/vim en un sistema Red Hat:

 rpm -qf /usr/bin/vim


Resumiendo

En los siguientes capítulos, exploraremos muchos programas diferentes cubriendo un amplio rango de áreas de aplicaciones. Mientras que la mayoría de los programas se instalan normalmente por defecto, necesitaremos instalar paquetes adicionales si programas necesarios no están instalados en nuestro sistema. Con nuestro conocimiento recién obtenido (y valorado) de gestión de paquetes, no deberíamos tener problemas instalando y manejando los programas que necesitemos.


El mito de la instalación de software Linux

La gente que migra desde otras plataformas, a veces, son víctimas del mito de que el software es algo difícil de instalar en Linux y que la variedad de sistemas de paquetes usados por las diferentes distribuciones es un impedimento. Bien, es un impedimento, pero sólo para los vendedores de software propietario que deseen distribuir versiones binarias de su software secreto.

El ecosistema Linux se basa en la idea del código abierto. Si el desarrollador de un programa libera el código fuente de un producto, es probable que una persona asociada a la distribución empaquete el producto y lo incluya en su repositorio. Este método asegura que el producto se integra bien con la distribución y que el usuario tiene la comodidad de una “única tienda”, en lugar de tener que buscar la web de cada producto.

Los controladores de dispositivos son manejados de forma muy parecida, excepto que en lugar de ser elementos separados en el repositorio de una distribución, forman parte del propio kernel Linux. Hablando en general, no hay algo como un “disco de controladores” en Linux. O el kernel soporta un dispositivo o no lo hace, y el kernel Linux soporta muchos dispositivos. Muchos más, de hecho que Windows. De acuerdo, esto no consuela si el dispositivo en concreto que necesitas no está soportado. Cuando esto ocurre, necesitas ver la causa. Una falta de soporte de controladores está a menudo causada por una de estas tres cosas:

1. El dispositivo es demasiado nuevo. Como muchos distribuidores de hardware no soportan activamente el desarrollo Linux, falta, a menos que un miembro de la comunidad Linux escriba el código del controlador para el kernel. Esto lleva tiempo.

2. El dispositivo es demasiado exótico. No todas las distribuciones incluyen cada controlador de dispositivo posible. Cada distribución desarrolla sus propios kernels, y como los kernels son muy configurables (lo que hace posible ejecutar Linux en todo, desde relojes de pulsera a grandes servidores) podrían haber pasado por alto un dispositivo en particular. Para encontrar y descargar el código fuente del controlador, puedes (sí tú) compilar e instalar el controlador tú mismo. Este proceso no es demasiado difícil, pero sí que es enredado. Hablaremos sobre compilar software en un capítulo posterior.

3. El vendedor de hardware esconde algo. Ni ha liberado el código fuente para el controlador de Linux, y ni ha liberado la información técnica para que alguien lo cree. Esto significa que el proveedor de hardware está tratando de mantener las interfaces de programación al dispositivo en secreto. Como no queremos dispositivos secretos en nuestros ordenadores, sugiero que quitemos el hardware ofensivo y lo tiremos a la basura con otras cosas inútiles.


Para saber más

Echa un rato conociendo el sistema de gestión de paquetes de tu distribución. Cada distribución proporciona documentación para sus herramientas de gestión de paquetes. Además, aquí hay algunas fuentes genéricas más:



No hay comentarios:

Publicar un comentario

Nota: solo los miembros de este blog pueden publicar comentarios.