RPM es el acrónimo recursivo de RPM Package Manager:es el administrador de paquetes de bajo nivel predeterminado en algunas de las distribuciones de Linux más famosas y utilizadas, como Fedora, Red Hat Enterprise Linux, CentOS, OpenSUSE y sus derivados. El software, como es de esperar, es gratuito y de código abierto; cuando se invoca con -q
se puede usar para consultar paquetes para recuperar información específica, como dependencias, recomendaciones, archivos, etc. En este tutorial, aprenderemos cómo realizar dichas consultas.
Requisitos de software y convenciones de la línea de comandos de Linux Categoría | Requisitos, convenciones o versión de software utilizada |
Sistema | Distribuciones que usan el administrador de paquetes rpm |
Software | El administrador de paquetes rpm |
Otro | Ninguno |
Convenciones | #:requiere que los comandos de Linux dados se ejecuten con privilegios de root, ya sea directamente como usuario root o mediante el uso de sudo comando $:requiere que los comandos de Linux dados se ejecuten como un usuario normal sin privilegios |
Invocar rpm en modo de consulta
El administrador de paquetes rpm se puede usar para modificar el estado del sistema, ya que se puede usar para instalar, actualizar y eliminar paquetes (cuando se invoca con -i
, -U
y e
opciones, respectivamente), o puede ejecutarse en modo "consulta", sin necesidad de privilegios administrativos, cuando se inicia con -q
opción, que es la versión corta de --query
.
Si un paquete ya está instalado en nuestro sistema, todo lo que necesitamos hacer es mencionarlo por su nombre; si no es el caso, y queremos consultar un .rpm
descargado archivo, por ejemplo, tenemos que usar el -p
(--package
) y proporcione la ruta del archivo como argumento. Veamos algunos ejemplos prácticos de cómo recuperar información sobre un paquete.
Obtención de información general sobre un paquete
Una de las cosas básicas que podemos querer hacer cuando se trata de un paquete rpm es mostrar información general sobre él. Para realizar esta tarea, todo lo que tenemos que hacer es usar el -i
(o --info
) opción al invocar rpm en modo de consulta. Por el bien de este ejemplo, trabajaremos con el paquete "gimp", que ya está instalado en el sistema. En este caso ejecutaríamos:
$ rpm -qi gimp
Inmediatamente después de invocar el comando, recibimos un resultado similar al siguiente, que incluye información, como la descripción del software, su versión, arquitectura, fecha de instalación, tamaño, etc.:
Name : gimp
Epoch : 2
Version : 2.10.24
Release : 1.fc34
Architecture: x86_64
Install Date: Mon 21 Jun 2021 11:26:33 AM CEST
Group : Unspecified
Size : 109267268
License : GPLv3+ and GPLv3
Signature : RSA/SHA256, Sat 03 Apr 2021 02:00:02 AM CEST, Key ID 1161ae6945719a39
Source RPM : gimp-2.10.24-1.fc34.src.rpm
Build Date : Sat 03 Apr 2021 01:13:55 AM CEST
Build Host : buildhw-x86-11.iad2.fedoraproject.org
Packager : Fedora Project
Vendor : Fedora Project
URL : http://www.gimp.org/
Bug URL : https://bugz.fedoraproject.org/gimp
Summary : GNU Image Manipulation Program
Description :
GIMP (GNU Image Manipulation Program) is a powerful image composition and
editing program, which can be extremely useful for creating logos and other
graphics for web pages. GIMP has many of the tools and filters you would expect
to find in similar commercial offerings, and some interesting extras as well.
GIMP provides a large image manipulation toolbox, including channel operations
and layers, effects, sub-pixel imaging and anti-aliasing, and conversions, all
with multi-level undo.
Lectura de un registro de cambios del paquete
Como sabemos, un registro de cambios es un registro en el que se informan y ordenan cronológicamente todos los cambios realizados en un proyecto. Si lo que queremos hacer es leer el registro de cambios de un paquete rpm, debemos invocar el administrador de paquetes rpm en modo consulta y usar el --changelog
opción. Veamos un ejemplo:
$ rpm -q --changelog gimp
Aquí está el resultado (truncado) del comando anterior en la última versión de Fedora (34):
[...]
Thu Jan 09 2020 Josef Ridky <[email protected]> - 2:2.10.14-3
- Demodularizing of gimp (#1772469)
* Mon Nov 18 2019 Kalev Lember <[email protected]> - 2:2.10.14-2
- Rebuild for libmypaint 1.4.0
* Mon Nov 04 2019 Kalev Lember <[email protected]> - 2:2.10.14-1
- Update to 2.10.14
* Tue Aug 20 2019 Josef Ridky <[email protected]> - 2:2.10.12-3
- Fix default configuration for font folders (#1706653)
* Wed Jul 31 2019 Josef Ridky <[email protected]> - 2:2.10.12-2
- Fix issue with reading SVG files (#1715882)
* Thu Jul 25 2019 Fedora Release Engineering <[email protected]> - 2:2.10.12-1.1
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
* Thu Jun 13 2019 Kalev Lember <[email protected]> - 2:2.10.12-1
- Update to 2.10.12
* Thu Apr 11 2019 Richard Shaw <[email protected]> - 2:2.10.10-2
- Rebuild for OpenEXR 2.3.0.
* Mon Apr 08 2019 Josef Ridky <[email protected]> - 2:2.10.10-1
- New upstream release 2.10.10 (#1697119)
Lista de todos los archivos proporcionados por un paquete
Cuando instalamos un paquete en nuestro sistema se copian una serie de archivos en los lugares adecuados, tal y como pretende su mantenedor. Si queremos listar los archivos proporcionados por un paquete que ya está instalado en nuestro sistema, podemos invocar el administrador de paquetes
rpm en modo consulta con -l
opción (abreviatura de --list
) ):
$ rpm -ql gimp
Como dijimos anteriormente, si queremos consultar un paquete antes lo instalamos, en su lugar, tenemos que agregar el -p
y proporcione la ruta del paquete como argumento:
$ rpm -qlp /path/to/package.rpm
El comando anterior producirá el siguiente resultado:
/etc/gimp
/etc/gimp/2.0
/etc/gimp/2.0/controllerrc
/etc/gimp/2.0/gimprc
/etc/gimp/2.0/gtkrc
/etc/gimp/2.0/menurc
/etc/gimp/2.0/sessionrc
/etc/gimp/2.0/templaterc
/etc/gimp/2.0/toolrc
/etc/gimp/2.0/unitrc
/usr/bin/gimp
/usr/bin/gimp-2.10
/usr/bin/gimp-console
/usr/bin/gimp-console-2.10
/usr/bin/gimp-test-clipboard-2.0
[...]
Lista de scripts usados por un paquete
Algo de .rpm
Los paquetes utilizan una serie de scripts o "scriptlets" que se ejecutan como parte del proceso de instalación o eliminación. Si queremos echarles un vistazo, podemos hacerlo invocando rpm en modo consulta con los --scripts
opción. Por el bien de este ejemplo, revisaremos los scripts incluidos en el systemd paquete:
$ rpm -q --scripts systemd
A continuación podemos ver la salida (truncada) del comando anterior, cuando se ejecuta en Fedora 34. Como puede ver, antes de los scripts en sí, podemos notar que también se informa el contexto en el que se usan (por ejemplo, "preinstalación" o "postinstalación"). ”):
preinstall scriptlet (using /bin/sh):
getent group cdrom &>/dev/null || groupadd -r -g 11 cdrom &>/dev/null || :
getent group utmp &>/dev/null || groupadd -r -g 22 utmp &>/dev/null || :
getent group tape &>/dev/null || groupadd -r -g 33 tape &>/dev/null || :
getent group dialout &>/dev/null || groupadd -r -g 18 dialout &>/dev/null || :
getent group input &>/dev/null || groupadd -r input &>/dev/null || :
getent group kvm &>/dev/null || groupadd -r -g 36 kvm &>/dev/null || :
getent group render &>/dev/null || groupadd -r render &>/dev/null || :
getent group systemd-journal &>/dev/null || groupadd -r -g 190 systemd-journal 2>&1 || :
[...]
Otra opción similar es --triggers
que se utiliza para mostrar los scripts de activación contenido en un paquete. ¿Qué son los scripts de activación? Son básicamente scripts que se ejecutan (activan) cuando el estado de otro paquete
cambia:
$ rpm -q --triggers systemd
Con el comando anterior podemos visualizar los scripts de activación contenidos en el systemd paquete:
triggerun scriptlet (using /bin/sh) -- systemd < 246.1-1
# This is for upgrades from previous versions before systemd-resolved became the default.
systemctl --no-reload preset systemd-resolved.service &>/dev/null || :
if systemctl -q is-enabled systemd-resolved.service &>/dev/null; then
systemctl -q is-enabled NetworkManager.service 2>/dev/null && \
! test -L /etc/resolv.conf 2>/dev/null && \
! mountpoint /etc/resolv.conf &>/dev/null && \
grep -q 'Generated by NetworkManager' /etc/resolv.conf 2>/dev/null && \
echo -e '/etc/resolv.conf was generated by NetworkManager.\nRemoving it to let systemd-resolved manage this file.' && \
mv -v /etc/resolv.conf /etc/resolv.conf.orig-with-nm && \
ln -sv ../run/systemd/resolve/stub-resolv.conf /etc/resolv.conf 2>/dev/null || :
systemctl start systemd-resolved.service &>/dev/null || :
fi
triggerpostun scriptlet (using /bin/sh) -- systemd < 247.3-2
# This is for upgrades from previous versions before oomd-defaults is available.
# We use %triggerpostun here because rpm doesn't allow a second %triggerun with
# a different package version.
systemctl --no-reload preset systemd-oomd.service &>/dev/null || :
Enumerar las dependencias y recomendaciones de un paquete
Otra tarea común que podemos querer realizar es encontrar las dependencias de un paquete rpm. La opción que nos permite realizar la tarea es -R
(abreviatura de --requires
). Para comprobar las dependencias del paquete “gimp”, por ejemplo, ejecutaríamos el siguiente comando:
$ rpm -qR gimp
Una vez que ejecutemos el comando, la lista de dependencias de software aparecerá en pantalla:
/usr/bin/python2
babl(x86-64) >= 0.1.78
config(gimp) = 2:2.10.24-1.fc34
fontconfig >= 2.12.4
freetype >= 2.1.7
gegl04(x86-64) >= 0.4.30
gimp-libs(x86-64) = 2:2.10.24-1.fc34
glib2 >= 2.56.2
gtk2 >= 2.24.32
hicolor-icon-theme
[...]
Si en lugar del -R
opción que usamos --recommends
podemos obtener una lista del software que no es estrictamente necesario para el paquete que estamos consultando, pero que recomienda:
$ rpm -q --recommends gimp
Enumerar los paquetes que se vuelven obsoletos por un rpm
De la misma manera que en los ejemplos anteriores, podemos ver qué paquetes se vuelven obsoletos por el paquete que estamos consultando. Todo lo que tenemos que hacer es usar --obsoletes
opción:
$ rpm -q --obsoletes gimp
Aquí está la salida del comando en el ejemplo:
gimp < 2:2.10.24-1.fc34
gimp-help-browser < 2:2.10.24-1.fc34
gimp-unstable < 2:2.10
Conclusiones
Rpm es un administrador de paquetes muy poderoso:en este tutorial vimos cómo ejecutarlo en modo "consulta". Vimos cómo obtener información general sobre un paquete, como su versión y arquitectura, cómo leer el registro de cambios de un paquete, cómo enumerar todos los archivos que instalará un paquete, cómo echar un vistazo a los "scriptlets" que se utilizan como parte de la administración de paquetes y cómo obtener una lista de las dependencias y recomendaciones de un paquete.