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_buscada
apt-get update
apt-cache search cadena_buscada
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_paqueteEjemplo: 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_paqueteEjemplo: 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 updateEjemplo: 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
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_paqueteEjemplo: 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_paqueteEjemplo: 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:
- El capítulo de gestión de paquetes del FAQ de Debian GNU/Linux, proporciona una vista general de los sistemas de paquetes en sistemas Debian:
http://www.debian.org/doc/FAQ/ch-pkgtools.en.html
- La página principal del proyecto RPM:
http://www.rpm.org
- Para algo más a fondo, la Wikipedia tiene un artículo sobre metadatos:
https://es.wikipedia.org/wiki/Metadato
No hay comentarios:
Publicar un comentario
Nota: solo los miembros de este blog pueden publicar comentarios.