Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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:
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.
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:
La acción define lo que queremos que apt haga. Si se necesita, podemos especificar una o más
opciones.
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:
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:
Y la salida:
apt-utils: /usr/bin/apt-ftparchive
Podríamos querer determinar el nombre del paquete a instalar. Para encontrar un paquete
concreto, usaremos apt search:
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.
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
…
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.
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):
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:
Aunque pueda parecer extraño, a veces se requiere eliminar paquetes para mantener las cosas
sincronizadas entre actualizaciones.
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:
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:
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.
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
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
Para buscar en el repositorio snap para nuevas aplicaciones, usaremos el comando snap find:
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):
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)
…
stress-ng removed
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.
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).