Redes y Sistemas

Qué es un paquete en Linux y qué gestores existen

En este artículo explicamos qué es el sistema de gestión de paquetes de Linux, qué es un paquete y cuáles son los incluídos en cada distribución de Linux.

Publicado el 01 de Marzo de 2021
Compartir

Cuando hablamos sobre qué es Linux debemos diferenciar dos partes. Por un lado, está el Kernel, el núcleo del sistema que se encarga de su funcionamiento general, y el resto de programas que lo componen para hacer un uso más específico. Estos programas se distribuyen usando paquetes, estos paquetes sirven para entregar el software y su mantenimiento. Así como en Windows tenemos ejecutables instalables Linux depende de paquetes que se administran mediante repositorios de software.

Antes de comenzar un curso de Linux desde cero, te recomiendo seguir leyendo este artículo. ;)

Qué es un paquete en Linux

Para explicar qué son los paquetes en Linux, podemos pensar en un sencillo ejemplo. Imaginemos que compramos en una tienda online, y ese paquete que nos envían contiene las diferentes piezas que componen un producto, por ejemplo, las piezas de LEGO y las instrucciones necesarias para ensamblar un Halcón Milenario de Star Wars. Aquí cada pieza tiene una función, y servirá para construir los elementos que conformarán el producto final.

Salvando distancias, un paquete en Linux consiste en una colección de archivos que permiten la instalación de un programa y sus tareas relacionadas, como la búsqueda de dependencias, instalaciones previas, etc.

Por ejemplo, podemos pensar en un programa popular como es GIMP. Este software de edición de imágenes se distribuye a través de un paquete. Dentro de él, todos los archivos requeridos para ser instalado y posterior ejecución. Además se incluye un pequeño archivo que proporciona metadatos importantes sobre el programa.

La razón de distribuir software en base a paquetes es simple. Cuando hablamos de GNU/Linux nos referimos a un ecosistema muy amplio de distribuciones que cuentan con notables diferencias entre sí. Esto hace que no sea posible “garantizar” que un software funcione correctamente en una computadora determinada. El uso de paquetes resuelve este problema de interoperabilidad gracias al pequeño archivo que antes mencionamos con metadatos que actúa como un manifiesto de dependencias que deben cumplirse para que el software empaquetado se ejecute correctamente en un ordenador determinado.

Qué es un gestor de paquetes en Linux

El uso de paquetes nos ahorra muchos dolores de cabeza a la hora de instalar o mantener nuevo software, pero en ocasiones el número de pasos que debemos dar puede consumirnos demasiado tiempo, sobre todo cuando tenemos que instalar varios programas. Para esto tenemos los gestores de paquetes. Se tratan de utilidades presentes en cada distribución que se encarga de automatizar el proceso, también listan otros paquetes disponibles en el repositorio y muestran información sobre sus dependencias. Existen muchos, pero en general realizan la misma función básica de instalar y administrar nuevos programas, pero cada uno usa una arquitectura interna ligeramente diferente y diferentes interfaces de usuario para realizar las tareas centrales del administrador de paquetes.

Los sistemas comunes de administración de paquetes incluyen:

  • DPKG: el administrador de paquetes base para distribuciones basadas en Debian.

  • Apt-get: una interfaz que hace más amigable y añade funciones para el sistema DPKG, que se encuentra en las distribuciones basadas en Debian.

  • Aptitude: Aptitude es una interfaz para APT para distribuciones basadas en Debian. Muestra una lista de paquetes de software y permite al usuario elegir de modo interactivo cuáles desea instalar o eliminar

  • Synaptic: Synaptic es instalado por defecto en Debian en la versión de escritorio, es una herramienta gráfica para la gestión de paquetes basada en GTK+ y APT.

  • RPM: el administrador de paquetes base que se encuentra en las distribuciones basadas en Red Hat, como Red Hat Enterprise Linux, CentOS y Fedora.

  • Yum: un front-end para el sistema RPM, que se encuentra en las distribuciones basadas en Red Hat.

  • Dnf: una interfaz más rica en funciones para el sistema RPM.

  • ZYpp: se encuentra en SUSE y OpenSUSE.

  • Pacman: el administrador de paquetes para distribuciones basadas en Arch Linux.

Independientemente del administrador de paquetes específico, el proceso de mantenimiento del software en una computadora basada en Linux es generalmente el mismo. Lanzas un catálogo de software que lee de uno o más repositorios (archivos de software optimizados para una plataforma determinada). Elija y elija qué software instalar o desinstalar a través del catálogo gráfico, o utilice una sesión de shell para ejecutar los comandos manualmente.

Gestionando paquetes en Debian/Ubuntu

Hoy por hoy resulta muy cómodo instalar y administrar aplicaciones mediante el uso de la GUI que presentan las distribuciones basadas en Debian o Ubuntu. La mayoría cuenta con su propia tienda de aplicaciones y el proceso es básicamente un “point and click”, seleccionas la aplicación y pulsamos en instalar, pero los usuarios más avanzados preferimos utilizar APT en su lugar.

La principal razón es que si bien Apt no es tan intuitivo sin duda es mucho más potente y nos permite por ejemplo confeccionar scripts a medida facilitando la dura vida de un administrador de sistemas.

Para acceder necesitaremos usar el terminal con elevación de privilegios. Por tanto, debemos utilizar sudo; de lo contrario, se deniega el acceso a APT:

sudo apt [parámetros] [nombre del programa]

Cómo sincronizar APT con repositorios

Para actualizar el índice de paquetes de nuestro sistema en cada uno de los repositorios a los que está conectado, usaremos el comando apt update. Este comando siempre debe ser el primero a invocar antes de realizar otros cambios en el paquete con el objetivo de sincronizar su copia local de los paquetes disponibles y sus versiones con el índice del estado actual con los repositorios. Ejecuta esto:

sudo apt update

También veremos cómo en ocasionalmente Apt arroja errores sobre, por ejemplo, claves de seguridad faltantes u otros. Lo mejor en estos casos es siempre revisar la salida del comando para determinar si ha experimentado errores de configuración críticos.

Imagen 1 en Qué es un paquete en Linux y qué gestores existen

Actualización APT con y sin sudo

Tanto si usamos apt o apt-get ambos admiten el indicador -y para responder automáticamente “Y” en cualquier mensaje que requiera su confirmación. Este acceso directo resulta útil cuando se está actualizando un entorno por primera vez en mucho tiempo así evitamos confirmar ciertas actualizaciones potencialmente docenas de veces, también es muy útil para confeccionar un sencillo script que automatice la instalación de paquetes.

sudo apt upgrade -y

Instalando paquetes usando APT

Dicho todo esto, la instalación de paquetes en distribuciones derivadas de Debian o Ubuntu es bastante sencilla. Basta con abrir el terminal y escribir:

sudo apt install [nombre del paquete]

Otra cosa es que además podemos concatenar todos los paquetes que necesitemos para instalarlos todos de una sola vez. Por ejemplo:

sudo apt install -y gimp terminator inkscape wine

Cómo instalar paquetes .deb usando dpkg

También es posible que necesites trabajar un paquete .deb instalandolo con dpkg. Aunque existen otras herramientas, algunas con interface gráfico, como los administradores de paquetes como Ubuntu Software Center, Synaptic o Muon para instalar el software en distribuciones basadas en Debian, algunas aplicaciones no están disponibles en los repositorios y deben descargarse de los sitios web de proveedores específicos. Por citar un ejemplo debemos mencionar a Google Chrome que se presenta en este formato.

Para instalar un paquete .deb usando dpkg debemos hacerlo siguiendo el siguiente ejemplo:

dpkg -i nombre_paquete.deb

Tras esto podemos ver los diferentes pasos que realiza dpkg; sabiendo en qué punto podría haber ocurrido un error, etc. Si te preocupa esto, la instalación también puede realizarse en dos etapas: primero desempaquetado, luego configuración. apt lo aprovecha limitando la cantidad de invocaciones de dpkg (ya que cada llamada es costosa debido a la carga de la base de datos en memoria, especialmente la lista de archivos ya instalados).

dpkg —unpack nombre_paquete_1.0.deb

(Leyendo la base de datos … 112846 ficheros o directorios instalados actualmente.)

Preparando para desempaquetar nombre_paquete_1.0.deb …

Desempaquetando nombre_paquete (1.0-2) sobre (1.0-2) …

Procesando disparadores para mime-support (3.62) …

dpkg —configure nombre_paquete

Configurando nombre_paquete (1.0-2) …

Updating database of manual pages …

Existe también una forma de “forzar” la instalación. Esto puede interesarnos en caso de que dpkg devuelva algún error y necesitemos ignorarlo por alguna razón como una colisión de archivos o problemas de dependencias. La orden dpkg —force nos ayudará en este caso.

Eliminación de un paquete usando dpkg

En distribuciones basadas en Debian desinstalar paquetes usando dpkg es bastante simple. Solo necesitamos operar con la opción -r o —remove seguida del nombre de un paquete eliminará dicho paquete.

Pero ojo, esta eliminación, sin embargo, no es completa: se mantendrán todos los archivos de configuración, scripts del encargado, archivos de registros (registros de sistema) y otros datos de usuarios que gestiona el paquete. Para eliminar completamente todo lo asociado con un paquete, es preferible además usar la opción -P o —purge seguida del nombre del paquete.

dpkg -r debian-cd

(Leyendo la base de datos … 114438 ficheros o directorios instalados actualmente.)

Desinstalando debian-cd (3.1.25) …

dpkg -P debian-cd

(Leyendo la base de datos … 113917 ficheros o directorios instalados actualmente.)

Purgando ficheros de configuración de debian-cd (3.1.25) ..

Instalando paquetes RPM en sistemas basados en Red Hat y Fedora Linux

El comando rpm es uno de los administradores de paquetes originales de Linux. RPM incluso significa Redhat Package Manager. A diferencia de los administradores de paquetes más avanzados, rpm es simple y requiere mucha más intervención manual. Dicho esto, sigue siendo una solución de gestión de paquetes que puede ser usado en toda la familia Redhat de distribuciones de Linux.

Usando RPM

Por lo general, el escenario es muy similar a usar dpkg, descrito antes, cuando tenemos un paquete .rpm descargado localmente y deseamos instalarlo. Por supuesto, DNF puede manejar esto, pero si por una razón u otra no está disponible, rpm será la herramienta que nos ayudará. Solo necesitamos escribir:

sudo rpm -i paquete.rpm

El indicador -i le dice a rpm que se instale y la ruta conduce al paquete que se va a instalar. Aunque la mayoría de la gente usa una combinación de indicadores, -ivh, para mostrar información más detallada cuando el comando rpm instala un paquete.

sudo rpm -ivh paquete.rpm

Lo que resulta muy interesante es cómo podemos utilizar el comando rpm para descargar e instalar paquetes directamente desde la web.

sudo rpm -ivh https://example.com/fedora/32/packagename.rpm

Eliminación de paquetes usando rpm

Seguramente querrás desinstalar un paquete o aplicación que no uses. Por eso en sistemas Red Hat o Fedora es recomendable buscar qué paquetes coinciden con el nombre de la aplicación que buscamos:

rpm -qa | grep -i webmin

Y una vez encontremos la coincidencia podemos proceder a desinstalarlo usando:

rpm -e Nombre_paquete

Instalando paquetes usando YUM

YUM es un viejo conocido tanto en CentOS como Fedora.

YUM instala software dentro de CentOS y Fedora. En la práctica YUM no tiene nada que envidiar a otros gestores de paquetes como apt o rpm ya vistos en distribuciones basadas en Debian o RedHat.

Usando YUM

Para instalar un paquete RPM, simplemente ingresamos el siguiente comando:

yum install nombre_paquete

Para eliminar una aplicación de su sistema Linux, ingresamos el siguiente comando:

yum remove nombre_paquete

Nota: Eliminar programas del sistema puede parecer sencillo, pero al eliminar una aplicación puede hacer que otra funcione. En este caso para eliminar programas que dependen del programa que está eliminando, es preferible usar el siguiente comando:

yum autoremove nombre_paquete

El comando autoremove también se puede utilizar sin ningún parámetro, de la siguiente manera:

yum autoremove

Este comando busca en su sistema archivos que no fueron instalados explícitamente y que no tienen dependencias.

¿Qué es una alternativa a un paquete?

Aunque los paquetes siguen sirviendo como un método muy eficiente para distribuir software, en los últimos años están apareciendo tecnologías alternativas que buscan acercar Linux y simplificar su gestión de software. Por citar un ejemplo, quizá el más destacado es el formato Snap que trata a los programas como objetos autónomos y aislados que evitan en cierto modo ser “dependientes de dependencias”.

En el sentido contrario tenemos la compilación desde la fuente. Este proceso era muy común en el pasado y todavía encontramos distribuciones que potencian su uso como Slackware. La principal ventaja es que una instalación de compilación desde el código fuente requiere que obtenga el código real de un programa, esto nos permite observar y entender qué ocurre en su interior y poder hacer los cambios necesarios para optimizar el software a nuestro hardware.

Pero también es un proceso lento y enfocado a usuarios con conocimientos avanzados o desarrolladores y no para un usuario común pero como se suele decir, para gustos colores, ¿no? Y si lo estás pensando quizá te interese visitar este curso de Shell en Linux que te ofrecemos aquí en OpenWebinars.


Compartir este post

También te puede interesar...

Tecnología

Filtrado de paquetes en Linux: Iptables, nftables y bpfilter

26 Noviembre 2018 Alberto Molina
Tecnología

Subsistema Linux en Windows: Instalación y primeros pasos

28 Octubre 2020 Miguel Parada
Artículos
Ver todos