Está en la página 1de 7

GESTIÓN DE PAQUETES

Cada distribución Linux utiliza alguna forma de sistema de gestión de paquetes para controlar
la instalación de aplicaciones y librerías. Un sistema de gestión de paquetes usa una base de
datos que sigue el rastro de lo siguiente:

 Que paquetes están instalados.


 Que archivos han sido instalados para cada paquete.
 Versiones de cada paquete instalado.

Los paquetes están almacenados en servidores llamados repositorios, y se accede por internet
mediante las utilidades del sistema de gestión de paquetes que estén instaladas. Podemos
usar estas utilidades para buscar nuevos paquetes o actualizaciones de los ya instalados.

Un paquete a menudo tendrá dependencias, u otros paquetes que de deberán ser instalados
previamente. Las utilidades de gestión de paquetes detectarán dichas dependencias y
ofrecerán instalar lo necesario antes de instalar el paquete deseado.

Lo malo es que no hay una única utilidad estándar. No todos los sistemas de gestión de
paquetes trabajan en todas las distribuciones Linux. Las utilidades de gestión de paquetes y sus
comandos asociados son enormemente diferentes entre distribuciones Linux. Los dos
principales sistemas de gestión de paquetes usados comunmente en Linux son dpkg y rpm.

Las distribuciones basadas en Debian (como Ubuntu) usan como base el comando dpkg. Este
comando interactúa directamente con el sistema de gestión de paquetes de Linux y es usado
para instalar, gestionar y eliminar paquetes.

Las distribuciones basadas en Red Hat (como CentOS) usan el comando rpm como base del
sistema de gestión de paquetes. De forma similar al comando dpkg, el comando rpm puede
listar paquetes instalados, instalar nuevos paquetes y eliminarlos.

Estos dos comandos son el núcleo de sus respectivos sistemas de gestión de paquetes, aunque
no es realmente el sistema de gestión de paquetes completo. Muchas distribuciones que usan
dpkg o rpm han construido utilidades especiales adicionales para el sistema de gestión de
paquetes sobre estos comandos base para obtener mayor facilidad.

SISTEMAS DE GESTIÓN DE PAQUETES BASADOS EN DEBIAN

El comando dpkg es el núcleo de las herramientas de sistema de gestión de paquetes para la


familia de distribuciones basada en Debian, proporcionando opciones para instalar, actualizar
y eliminar paquetes Debian.

El comando dpkg asume que tenemos el paquete descargado en nuestro sistema local, o bien
disponible como una URL. Aunque la mayoría de las veces no es el caso. Habitualmente
queremos instalar una aplicación desde un repositorio accesible para nuestra distribución
Linux. Para ello, usaremos el Advanced Package Tool (APT), compuesto de:

 apt-cache
 apt-get
 apt
El comando apt es esencialmente un frontend tanto para apt-cache como para apt-get. Lo
bueno sobre APT es que no necesitamos recordar qué herramienta usar cuándo, pues cubre
todo lo que podamos necesitar para gestionar paquetes. El formato básico de apt es:

apt [opciones] acción

La acción define lo que queremos que apt haga. Si se necesita, podemos especificar una o más
opciones.

GESTIONANDO PAQUETES CON APT

Una tarea común es determinar qué paquetes ya están instalados en el sistema. El comando
apt list muestra todos los paquetes disponibles en el repositorio, pero con la opción --installed
podemos limitar la salida a los que ya están instalados en nuestro sistema:

$ apt --installed list

Si ya conocemos el nombre de paquete y queremos mostrar información detallada sobre el


mismo, usamos el comando show:

$ apt show zsh

Y la salida:

Package: zsh

El comando apt show no indica si el paquete está instalado o no en el sistema, solo muestra
información detallada desde el repositorio. Un detalle que no podemos obtener con apt es un
listado de los ficheros asociados con un paquete. Para obtener esta lista, necesitaremos usar
directamente el comando dpkg:

$ dpkg -L apt-utils

Y la salida:

/.
/usr
/usr/bin
/usr/bin/apt-extracttemplates

También podemos hacer lo inverso, es decir, encontrar a que paquete pertenece un archivo en
particular. Necesitaremos usar una referencia absoluta al archivo del paquete para que
funcione:

dpkg --search absolute_file_name

$ dpkg --search /usr/bin/apt-ftparchive

Y la salida:
apt-utils: /usr/bin/apt-ftparchive

INSTALANDO PAQUETES CON APT

Podríamos querer determinar el nombre del paquete a instalar. Para encontrar un paquete
concreto, usaremos apt search:

$ apt search package_name

Lo bueno del comando search es que no necesitamos insertar wildcards para el nombre de
paquete. Las wildcards son implícitas. Por defecto, search muestra paquetes que contienen el
término buscado, ya sea en el nombre del paquete o en su descripción. Si queremos limitar la
búsqueda a los nombres de paquete, usaremos la opción --names-only.

The beauty of the search command is that you do not need to insert wildcards around
package_name. Wildcards are implied. By default, the search command displays packages that
contain the search term in either the package name or the package description, which can be
misleading at times. If you want to limit the output to only package names, include the
--names-only option.

$ apt --names-only search zsh

Y la salida:

Sorting... Done
Full Text Search... Done
fizsh/focal,focal 1.0.9-1 all
Friendly Interactive ZSHell
zsh/focal 5.8-3ubuntu1 amd64
shell with lots of features
zsh-antigen/focal,focal 2.2.3-2 all
manage your zsh plugins

Una vez encontrado el paquete, instalaremos mediante:

$ sudo apt install package_name

Ya que instalar nuevo software requiere privilegios de root, debemos usar el comando sudo en
Ubuntu.

Al instalar un paquete, apt preguntará también por la instalación de otros paquetes. Esto es
porque apt resuelve automáticamente cualquier dependencia por nosotros e instala las
librerías y paquetes adicionales necesarios. Esta característica suele estar incluida en muchos
sistemas de gestión de paquetes.

ACTUALIZANDO SOFTWARE CON APT

Aunque apt ayuda a evitar problemas al instalar software, intentar coordinar una actualización
multipaquete con dependencias puede ser complicado. Para actualizar todos los paquetes con
seguridad, usaremos el comando upgrade (de nuevo con sudo para obtener privilegios de
root):

$ sudo apt upgrade

Este comando no toma nombres de paquete como argumento, pues actualizará todos los
paquetes instalados a la versión más reciente del repositorio, lo cual es más seguro para la
estabilización del sistema.

El comando upgrade no eliminará ningún paquete como parte del proceso de actualización. Si
un paquete necesita ser eliminado como parte de una actualización, usaremos el siguiente
comando:

$ sudo apt full-upgrade

Aunque pueda parecer extraño, a veces se requiere eliminar paquetes para mantener las cosas
sincronizadas entre actualizaciones.

DESINSTALANDO SOFTWARE CON APT

La desinstalación es tan fácil como la instalación o la actualización. Lo único que tenemos que
tener en cuenta es si queremos mantener los datos del programa y los archivos de
configuración.

Para eliminar un paquete pero no sus archivos de datos y configuración, usaremos el comando
remove. Para no conservar sus archivos de datos y configuración, usaremos el comando purge:

$ sudo apt purge zsh

En este ejemplo, como parte de la salida de purge, apt nos advierte que el paquete zsh-
common, que fue instalado como una dependencia, no fue eliminado automáticamente, por si
pudiera ser requerido por algún otro paquete. Si estamos seguros de que no es requerido por
otros paquetes, podemos eliminarlo usando el comando autoremove, que chequeará todos los
paquetes marcados como dependencias y que no son requeridos:

$ sudo apt autoremove

REPOSITORIOS APT

Los lugares de repositorio por defecto para apt son establecidos cuando instalamos la
distribución Linux. Estos lugares están almacenados en /etc/apt/sources.list. En muchos casos,
no necesitaremos agregar o eliminar un repositorio, por lo que no tocamos este archivo.

Las fuentes de repositorio usan la siguiente estructura:

deb (or deb-src) address distribution_name package_type_list

El valor deb (o deb-src) indica el tipo de paquete. Si el valor es deb, indica que es una fuente de
programas compilados, y si es deb-src, se trata de un origen de códigos fuente.
La entrada address es la dirección del repositorio. La entrada distribution_name es el nombre
de esta versión de distribución de repositorio de paquetes en particular. Finalmente, la
entrada package_type_list puede ser más de una palabra, e indica qué tipo de paquetes tiene
el repositorio (valores como main, restricted, universe, partner, etc.).

CONTENEDORES SNAP

Canonical, los creadores de la distribución Ubuntu, ha desarrollado un formato contenedor de


aplicación llamado snap. El sistema de empaquetado snap agrupa todos los archivos
requeridos para una aplicación en un único archivo de distribución snap. La diferencia entre un
paquete snap y paquete dpkg es que los snap no tienen ninguna dependencia (todos los
archivos necesarios para correr una aplicación están en el paquete a instalar). Esto podría
crear duplicados de archivos que podrían ser compartidos con otras aplicaciones, pero
también resuelve cualquier incidencia que pudiera ocurrir por conflictos con librerías
instaladas por múltiples paquetes.

La aplicación snapd gestiona los paquetes snap instalados en el sistema y corre en segundo
plano. Usaremos la herramienta en línea de comando snap para pedir a la base de datos snap
que muestre los paquetes snap instalados, además de para instalar, actualizar o eliminar
paquetes snap.

Para verificar que snap está corriendo en el sistema, usaremos snap con el comando version:

$ snap version

snap 2.47.1+20.04
snapd 2.47.1+20.04
series 16
ubuntu 20.04
kernel 5.4.0-53-generic

Si snap está corriendo, podemos obtener una lista de las aplicaciones snap actualmente
instaladas:

$ snap list

Name Version Rev Tracking Publisher Notes


core18 20200929 1932 latest/stable canonical* base
lxd 4.0.4 18150 4.0/stable/... canonical* -
snapd 2.47.1 9721 latest/stable canonical* snapd

Para buscar en el repositorio snap para nuevas aplicaciones, usaremos el comando snap find:

$ snap find stress-ng

Name Version Publisher Notes Summary


stress-ng V0.11.24 cking-kernel-tools - A tool to load, stress test and
benchmark a computer system

Para ver más información sobre una aplicación snap:


$ snap info stress-ng

name: stress-ng
summary: A tool to load, stress test and benchmark a computer system
publisher: Colin King (cking-kernel-tools)

Para instalar un nuevo snap, usaremos el comando snap install como usuario root (o con
privilegios de root):

$ sudo snap install stress-ng

Cuando instalamos un paquete snap, el programa snapd lo monta como si se tratara de una
unidad de disco. Podemos ver el nuevo snap montado usando el comando mount:

$ mount

...
/var/lib/snapd/snaps/stress-ng_5273.snap on /snap/stress-ng/5273 type squashfs
(ro,nodev,relatime,x-gdu.hide)

Si necesitamos eliminar un snap, usaremos el comando snap remove:

$ sudo snap remove stress-ng

stress-ng removed

Cuando un snap es eliminado, veremos algunos mensajes acerca del progreso de la


eliminación. En lugar de eliminar un snap, podemos preferir solo deshabilitarlo pero sin
eliminarlo. Usaremos el comando snap disable. Para rehabilitarlo, usaremos snap enable.

INSTALANDO SOFTWARE DESDE CÓDIGO FUENTE

Antes de los gestores de paquetes y de los contenedores de aplicaciones, los desarrolladores


de aplicaciones open source tenían que distribuir su software como código fuente y permitir
que los usuarios compilaran las aplicaciones en sus propios sistemas. Los paquetes de código
fuente eran comunmente lanzados como un tarball. Los paquetes tarball agrupan archivos
dentro de un archivo usando el comando tar. Una vez los archivos están dentro del tarball, es
común usar una utilidad de compresión antes de la distribución.

Una vez que hemos obtenido un paquete tarball de código fuente, hay ciertos pasos
necesarios para instalar el software:

1. Desempaquetar los archivos del tarball usando el comando tar. Las opciones -xvf
expandirán el tarball especificado en línea de comando. Opcionalmente, si el tarball ha
sido comprimido, necesitaremos incluir una opción para descomprimir el archivo.
Usaremos -J para archivos comprimidos .xz o usaremos -z para archivos
comprimidos .gz.
2. Crear el script para compilar el software en nuestro sistema usando el script de
configuración incluido con el paquete. Este detecta qué herramientas están instaladas
en el sistema y qué características de CPU y capacidades están disponibles. Esto crea
un script Makefile para construir (build) el software.

3. Ejecutar el script Makefile para compilar el código fuente usando el comando make.

4. Instalar el software usando el comando sudo make install.

El desarrollador del paquete de software determina la ruta de instalación y si es necesario


disponer de privilegios de root para ejecutar la aplicación.

Desinstalar una aplicación instalada por código fuente puede o no ser fácil. Es asunto del
desarrollador si incluye un script make de desinstalación (por ejemplo sudo make uninstall).

La mayoría de programas de utilidad de Linux están escritos en C o C++. Para compilarlos


necesitaremos tener instalado el paquete gcc, además del paquete make. La mayoría de
distribuciones no los instalan por defecto. Si el programa configure muestra el error de que no
los encuentra, consultaremos los docs de la distribución para ver qué paquetes instalar.

También podría gustarte