Instalación y gestión de aplicaciones en GNU/Linux

sept. 1, 2024

Este artículo forma parte de una serie:

En cualquier sistema operativo, la instalación, actualización y eliminación de software es una tarea fundamental. En GNU/Linux, esta gestión se realiza a través de paquetes, que son colecciones de archivos que se instalan en tu sistema para proporcionar una aplicación o utilidad. Estos paquetes se encuentran almacenados en repositorios, que son básicamente servidores remotos que contienen una gran colección de software empaquetado, listo para ser descargado e instalado.

Repositorios

Los repositorios son almacenes en línea donde se encuentran los paquetes de software listos para ser instalados en una distribución de Linux. Cada distribución tiene sus propios repositorios oficiales, suelen contener software que ha sido probado y verificado para funcionar correctamente con esa distribución en particular. Además de los repositorios oficiales, también es posible añadir repositorios de terceros para obtener software que no está disponible en éstos.

En este artículo vamos a centrarnos en la gestión de paquetes en distribuciones basadas en Debian y Red Hat, que son dos de las familias de distribuciones más populares en el mundo de GNU/Linux. Ejemplos de distribuciones basadas en Debian son Ubuntu, Linux Mint y el propio Debian, mientras que las basadas en Red Hat son Fedora, CentOS y RHEL (Red Hat Enterprise Linux).

Tipos

  • Repositorios Oficiales: Mantenidos por los desarrolladores de la distribución, incluyen software confiable y seguro.
  • Repositorios de Terceros: Mantenidos por desarrolladores de la herramienta o comunidades, pueden incluir software
  • más reciente o específico que no se encuentra en los repositorios oficiales.
  • Repositorios Locales: Repositorios que pueden estar alojados en una red local, a menudo utilizados en entornos empresariales para gestionar software de manera centralizada.

Veremos únicamente los repositorios oficiales y de terceros, son los más habituales, los que se suelen utilizar en la mayoría de entornos de usuario final.

Puedes probar todos los comandos que se mencionarán a continuación sin miedo a romper nada virtualizando cada uno de los sistemas con Docker:


    docker run -it --name debian-container --restart=no debian:latest # Debian
    docker run -it --name fedora-container --restart=no fedora:latest # Fedora
    

Oficiales y de terceros

Los repositorios oficiales, como mencionamos antes, son mantenidos por los desarrolladores de la distribución y contienen software que ha sido probado y verificado para funcionar correctamente en ella; se actualizan regularmente para proporcionar a los usuarios las últimas versiones de software.

La gestión de repositorios en GNU/Linux implica agregar, eliminar o modificar las fuentes de las que el sistema descarga los paquetes. La correcta gestión de los repositorios es crucial para mantener la estabilidad y seguridad del sistema, ya que un repositorio mal configurado o con software no confiable puede conllevar riesgos de seguridad.

Se almacenan en la ruta /etc/apt/sources.list.d en sistemas basados en Debian y /etc/yum.repos.d/ en sistemas basados en Red Hat.

Se verían tal que así en un Ubuntu 24.04:


 betazetadev@desktop:/etc/apt/sources.list.d$ ls
  dart_stable.list                          
  librewolf.sources
  docker.list  
  inkscape_dev-ubuntu-stable-noble.sources  
  ubuntu.sources  
  ubuntu.sources.curtin.orig
  

Y así en un Fedora 40, la versión más reciente a fecha de escritura de este artículo:


 betazetadev@desktop:/etc/yum.repos.d$ ls
  fedora-cisco-openh264.repo  
  fedora-updates-testing.repo  
  fedora-updates.repo  
  fedora.repo
  

El contenido de estos archivos es parecido en su contenido, la URL del repositorio, la distribución y la rama de la que se descargan los paquetes, entre otros parámetros. Por ejemplo, los repositorios oficiales de Ubuntu se verían así:


 Types: deb
 URIs: http://es.archive.ubuntu.com/ubuntu/
 Suites: noble noble-updates noble-backports
 Components: main restricted universe multiverse
 Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
  

El formato en sistemas basados en Red Hat es diferente pero similar en su esencia:


  [fedora]
  name=Fedora $releasever - $basearch
  #baseurl=http://download.example/pub/fedora/linux/releases/$releasever/Everything/$basearch/os/
  metalink=https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch
  enabled=1
  countme=1
  metadata_expire=7d
  repo_gpgcheck=0
  type=rpm
  gpgcheck=1
  gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$releasever-$basearch
  skip_if_unavailable=False
  

Es importante resaltar la parte del firmado, ya que los paquetes se firman digitalmente para garantizar su autenticidad y evitar la manipulación de los mismos. Si un paquete no está firmado o la firma no coincide con la clave pública del repositorio, el gestor de paquetes mostrará un mensaje de advertencia y no permitirá la instalación del mismo. Esto es una medida de seguridad para garantizar que los paquetes descargados son auténticos y no han sido modificados por terceros.

En distribuciones basadas en Debian, anteriormente, se utilizaba el archivo /etc/apt/sources.list (aun presente) para gestionar los repositorios, pero en la actualidad se recomienda utilizar archivos individuales en el directorio /etc/apt/sources.list.d/ para una mejor organización y mantenimiento, de esta manera podemos diferenciar los repositorios en archivos separados y habilitar o deshabilitarlos según sea necesario sin preocupación de afectar a otros.

Los repositorios pueden ser gestionados también a través de la interfaz gráfica de las herramientas de gestión de software y actualizaciones integradas en las distribuciones más habituales. En Ubuntu, por ejemplo, se llama Software & Updates y permite añadir, eliminar y modificar los repositorios de forma sencilla y visual.

Gestión de paquetes

La gestión de paquetes en GNU/Linux se realiza a través de herramientas específicas que permiten instalar, actualizar, eliminar y buscar paquetes en los repositorios. En distribuciones basadas en Debian, la herramienta más común es apt, mientras que en distribuciones basadas en Red Hat se utiliza yum.

Una vez sabemos de dónde se obtienen las aplicaciones y cómo se organizan los repositorios en el sistema vamos a ver cómo instalar, actualizar y eliminar paquetes en GNU/Linux.

Búsqueda e información de los paquetes

Podemos hacer búsquedas de paquetes en los repositorios para obtener información sobre ellos, su nombre, descripción, versión y dependencias. Para ello, utilizamos el comando apt search en distribuciones basadas en Debian y yum search en distribuciones basadas en Red Hat. Con “dependencias” nos referimos a otros paquetes o librerías que un programa necesita para funcionar correctamente. Cuando instalas un paquete, el gestor de paquetes también se encarga de instalar automáticamente todas las dependencias requeridas para que el software funcione.

La búsqueda nos proporcionará los detalles del paquete, su descripción, número de versión, tamaño, dependencias y otros detalles. Por ejemplo, para buscar el paquete htop, que es un monitor de sistema interactivo que se ejecuta directamente en la terminal, se utilizaría el siguiente comando:


    apt search htop
    

Eso sí, antes de hacer una búsqueda en sistemas basados en Debian, es recomendable actualizar el estado del repositorio en nuestro sistema utilizando el comando apt update. Esto actualizará la lista de paquetes disponibles en los repositorios y su información, permitiendo que el gestor de paquetes encuentre las versiones más recientes. En sistemas basados en Red Hat, como Fedora, no es necesario realizar un paso previo similar, ya que yum search actualiza automáticamente la información del repositorio antes de mostrar los resultados.

En distribuciones basadas en Red Hat, el comando sería similar:


    yum search htop
    

También podemos buscar entre los paquetes instalados en el sistema para saber si tenemos un paquete en concreto. Para ello, utilizamos el comando apt list --installed en distribuciones basadas en Debian y yum list installed en distribuciones basadas en Red Hat.

Por ejemplo, para buscar si el paquete htop está instalado en el sistema, se utilizaría el siguiente comando:


    apt list --installed | grep htop
    

En distribuciones basadas en Red Hat, el comando sería similar:


    yum list installed | grep htop
    

Gracias a la combinación de apt list --installed y grep podemos buscar entre los paquetes instalados en el sistema, el comando grep busca una cadena de texto en la salida de otro comando, en este caso, busca la cadena htop en la salida de apt list --installed o yum list installed, mediante la tubería | se envía la salida de un comando a otro. En este otro artículo hicimos un recorrido por los comandos más comunes de la terminal de GNU/Linux que te recomiendo visitar, si es que aun no estás familiarizado con ellos. Nos informará si el paquete está instalado o no, y en caso de estarlo, nos mostrará la versión instalada. Si no aparece nada en la salida, significa que el paquete no se encuentra en el sistema.

En caso de no encontrar un paquete en los repositorios oficiales, puede que esté en un repositorio de terceros o que ya no esté disponible para nuestra distribución a través de estos medios, por lo que habría que buscarlo por otras vías. Por lo general, cuando esto ocurre, lo que se suele hacer es acudir a la página web oficial del software y buscar instrucciones de instalación para nuestra distribución, que suele incluir la descarga de un paquete .deb o .rpm para su instalación manual o indicarnos cómo añadir el repositorio para utilizar apt o yum para gestionarlo.

Los paquetes .deb son para las derivadas de Debian, mientras que los paquetes .rpm se utilizan en las basadas en Red Hat. Estos paquetes contienen el software empaquetado y sus dependencias, se pueden instalar manualmente en el sistema utilizando herramientas como dpkg y rpm respectivamente.

Los paquetes instalados utilizando binarios .deb o .rpm generalmente requieren gestión manual. En el caso de los paquetes .deb, no se actualizarán automáticamente a través de apt, por lo que es importante tener en cuenta este detalle al instalar software de esta manera. Sin embargo, en sistemas basados en Red Hat, los paquetes .rpm pueden actualizarse utilizando el mismo binario con el comando rpm -U, lo que permite mantener los paquetes actualizados sin necesidad de una gestión manual constante. Más adelante exploraremos la gestión manual de los paquetes.

Instalación, eliminación y actualización de paquetes

Cómo decíamos, utilizaremos los comandos apt y yum para acceder a los paquetes del repositorio, ambos comandos requieren privilegios de superusuario en caso de hacer modificaciones (instalar, eliminar, actualizar), de ser así, es necesario utilizar sudo o iniciar una sesión como superusuario antes de ejecutarlos, la consulta (búsqueda) puede hacerse con un usuario sin privilegios de administración.

Derivadas de Debian

APT

Para instalar un paquete con apt, se utiliza el siguiente comando:


    sudo apt install nombre_paquete
    

Para instalar el paquete htop, del que previamente hemos hecho la búsqueda oportuna, se utilizaría el siguiente comando:


    sudo apt install htop
    

Para eliminarlo, se utilizaría el parámetro remove:


    sudo apt remove htop
    

Mientras que para actualizarlo, se utilizaría el comando:


    sudo apt install --only-upgrade htop
    

Hay que tener en cuenta que los programas de la propia distribución se pueden actualizar con estas herramientas, para ello se utiliza, primero apt update para actualizar la lista de paquetes disponibles como coméntabamos antes y apt upgrade para actualizar los paquetes instalados en el sistema. Así podemos, de una tirada, actualizar todo el software.

Esto actualiza las aplicaciones instaladas desde los repositorios oficiales, pero no actualiza el sistema operativo en sí ni las aplicaciones instaladas desde otros medios, como por ejemplo, aplicaciones de terceros o manualmente. Para actualizar el sistema operativo a una nueva versión, se utiliza el comando apt dist-upgrade. Pero es importante tener en cuenta que en caso de haber problemas con la actualización, el sistema puede quedar inestable o incluso dejar de funcionar, por lo que se recomienda encarecidamente hacer una copia de seguridad antes de realizar este proceso. Los paquetes instalados a mano, por lo general, hay que actualizarlos a mano.

DPKG

La gestión manual de los paquetes requiere de conocer algunos comandos básicos como dpkg para instalar paquetes .deb o rpm para instalar paquetes con esta extensión.

Para manejar un paquete .deb utilizamos el comando dpkg:

  • dpkg -i paquete.deb: Instala un paquete .deb.
  • dpkg -r paquete: Elimina un paquete instalado.
  • dpkg -l | grep paquete: Muestra información sobre un paquete instalado.

Para actualizarlo es necesario descargar la nueva versión del paquete y volver a instalarlo con dpkg -i paquete.deb.

Basados en Red Hat

YUM

En distribuciones basadas en Red Hat, el comando yum se utiliza para instalar, actualizar y eliminar paquetes desde los repositorios. Para instalar un paquete:


    sudo yum install nombre_paquete
    

Por ejemplo, de nuevo, para instalar el paquete htop utilizaríamos el comando a continuación:


    sudo yum install htop
    

Para eliminarlo, se utilizaría el parámetro remove:


    sudo yum remove htop
    

Mientras que para actualizarlo, se utilizaría el comando yum update:


    sudo yum update htop
    

Al igual que con apt, yum también permite actualizar todo el software del sistema con un solo comando, utilizando yum update. Este comando actualiza tanto las aplicaciones instaladas como el sistema operativo a las versiones más recientes disponibles en los repositorios oficiales. No es necesario un comando adicional para actualizar el sistema operativo en sí, ya que yum update, cubre, en este caso, ambos aspectos. Sin embargo, como ocurre en otros sistemas, las aplicaciones instaladas manualmente o desde repositorios de terceros pueden requerir de una gestión independiente.

RPM

Para gestionar un paquete .rpm en Red Hat y derivados, se utiliza el comando rpm:

  • rpm -i paquete.rpm: Instala un paquete .rpm.
  • rpm -e paquete: Elimina un paquete instalado.
  • rpm -q paquete: Muestra información sobre un paquete instalado.
  • rpm -U paquete.rpm: Actualiza un paquete .rpm.

Mientras que las distribuciones basadas en Red Hat si que permiten actualizar un paquete rpm con el comando rpm -U paquete.rpm siempre será más fiable y seguro hacerlo a través de yum para que se encargue de las dependencias y de la actualización de los paquetes relacionados.

Es fácil llegar a tener problemas de dependencias si se instalan paquetes manualmente por lo que es recomendable siempre que sea posible instalar paquetes desde los repositorios oficiales, ya que estos han sido probados y verificados para funcionar correctamente con la distribución en particular. Sin embargo, en algunos casos es necesario instalar software que no está disponible en los repositorios oficiales, por lo que es necesario recurrir a otras fuentes, como repositorios de terceros o instalación manual.

Como hemos hablado en otras ocasiones, (casi) todo en Linux tiene interfaz gráfica y la gestión de paquetes no iba a ser menos. Todas las grandes distribuciones suelen venir con un programa por defecto integrado que nos permiten instalar, actualizar y eliminar el software de forma sencilla a través de una interfaz gráfica intuitiva, sin necesidad de introducir comandos. Esta de abajo, por ejemplo, es la tienda de aplicaciones de snap de Ubuntu, que permite instalar aplicaciones empaquetadas en snap, un formato creado por Canonical (la empresa detrás de Ubuntu) para su sistema operativo, pero que no es exclusivo de este, ya que se puede instalar en otras distribuciones. En la página de Ubuntu tienes más información al respecto.

Conclusión

La gestión de paquetes en GNU/Linux es una tarea fundamental que permite instalar, actualizar y eliminar software de forma sencilla y segura, pero sobre todo organizada. Gracias a este sistema de paquetes y repositorios, además de centralizar la gestión del software y sus configuraciones (utilizando las rutas específicas para ello) se garantiza la estabilidad y seguridad del sistema. Te invito a trastear un poco con estos y otros comandos para familiarizarte con la gestión de paquetes en GNU/Linux, es una de las tareas más comunes y útiles que realizarás en tu día a día con el sistema operativo.

Artículos relacionados

Quizá te puedan interesar