Creative Commons Reconocimiento-NoComercial-CompartirIgual 2.1
© 1999-2007 Joel Barrios Dueñas. Usted es libre de copiar, distribuir y comunicar públicamente la obra y hacer obras derivadas bajo las condiciones siguientes: a) Debe reconocer y citar al autor original. b) No puede utilizar esta obra para fines comerciales (incluyendo su publicación, a través de cualquier medio, por entidades con fines de lucro). c) Si altera o transforma esta obra, o genera una obra derivada, sólo puede distribuir la obra generada bajo una licencia idéntica a ésta. Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la licencia de esta obra. Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor. Los derechos derivados de usos legítimos u otras limitaciones no se ven afectados por lo anterior. Licencia completa en castellano. La información contenida en este documento y los derivados de éste se proporcionan tal cual son y los autores no asumirán responsabilidad alguna si el usuario o lector hace mal uso de éstos.
RPM Package Manager, anteriormente conocido como Red Hat Package Manager y que es más conocido por su nombre abreviado RPM, es un sistema de gestión de paquetería para distribuciones de GNU/Linux y que está considerado en la Base Estándar para Linux (Linux Standard Base o LSB), que es un proyecto cuyo objetivo es desarrollar y promover estándares para mejorar la compatibilidad entre las distribuciones de GNU/Linux para permitir a las aplicaciones ser utilizadas en cualquier distribución.
RPM fue originalmente desarrollado por Red Hat para su
distribución de GNU/Linux, y ha sido llevado hacia otra distribuciones
de Linux y sistemas operativos.
RPM utiliza una base de datos que se almacena en /var/lib/rpm, la cual contiene toda la meta-información de todos los paquetes que son instalados en el sistema y que es utilizada para dar seguimiento a todos los componentes que son instalados. Esto permite instalar y desinstalar limpiamente todo tipo de aplicaciones, bibliotecas, herramientas y programas y gestionar sus dependencias exactas.
RPM viene instalado de modo predeterminado en Red Hat Enterprise Linux, Fedora, CentOS, White Box Enterprise Linux, SuSE Linux, OpenSuSE, Mandriva y distribuciones derivadas de estas.
Hay ciertos escenarios en donde se puede corromper la base de datos de RPM. Ésta se puede reconstruir fácilmente utilizando el siguiente mandato:
rpm --rebuilddb |
Si se desea conocer si está instalado un paquete en particular, se utiliza el mandato rpm con la opción -q, que realiza una consulta (query) en la base de datos por un nombre de paquete en particular. En el siguiente mandato, donde como ejemplo se preguntará a RPM si está instalado el paquete traceroute:
rpm -q traceroute |
Lo anterior debe devolver una salida similar a la siguiente:
traceroute-2.0.1-2.el5 |
Si se desea conocer que es lo que información incluye el paquete traceroute, se utiliza el mandato rpm con las opciones -qi, para hacer la consulta y solicitar información del paquete (query info). En el siguiente ejemplo se consulta al mandato rpm por la información del paquete traceroute:
rpm -qi traceroute |
Lo anterior debe devolver una salida similar a la siguiente:
Name : traceroute Relocations: (not relocatable) |
Puede consultarse qué componentes forman parte del paquete utilizando el mandato rpm con las opciones -ql, donde se realiza una consulta listando los componentes que lo integran (query list). Si se desea conocer que componentes instaló el paquete traceroute, utilice el siguiente mandato:
rpm -ql traceroute |
Lo anterior debe devolver una salida similar a la siguiente:
/bin/traceroute |
Si se desea consultar a cual paquete pertenece un elemento instalado en el sistema, se utiliza el mandato rpm con las opciones -qf, que realizan una consulta por un fichero en el sistema de archivos (query file). En el siguiente ejemplo se consultará a la mandato rpm a que paquete pertenece el fichero /etc/crontab:
rpm -qf /etc/crontab |
Lo anterior debe devolver una salida similar a la siguiente:
crontabs-1.10-8 |
Si desea consultar la lista completa de paquetes instalados en el sistema, utilice el siguiente mandato, donde -qa significa consultar todo (query all):
rpm -qa |
Debido a que lo anterior devuelve una lista demasiado grande para poderla visualizar con comodidad, puede utilizarse less o more como subrutina:
rpm -qa |less |
Si se quiere localizar un paquete o paquetes en particular, se puede utilizar el mandato rpm con las opciones -qa y utilizar grep como subrutina. En el siguiente ejemplo se hace una consulta donde se quiere conocer que paquetes están instalado en el sistema y que incluyan la cadena php en el nombre.
rpm -qa |grep php |
Lo anterior pudiera devolver una salida similar a la siguiente:
php-5.1.6-15.el5 |
Si se quiere revisar en orden cronológico, de más nuevos a más antiguos, que paquetes están instalados, se puede agregar a -qa la opción --last, y less o more como subrutina para visualizar con comodidad la salida.
rpm -qa --last|less |
Lo anterior devuelve una salida extensa dentro con less como visor. Pulse la teclas de arriba (↑) y abajo (↓) o Av. Pág. y Reg. Pág. para desplazarse en la lista. Pulse la tecla q para salir.
Si se quiere verificar si los componentes instalados por un paquete RPM han sido modificados o alterados o eliminados, se puede utilizar el mandato rpm con la opción -V, la cual realiza una verificación de la integridad de los componentes de acuerdo a las firmas digitales de cada componente (MD5SUM o suma MD5). En el siguiente ejemplo se verificara si el paquete crontabs ha sido alterado:
rpm -V crontabs |
Si algún componente fue modificado, puede devolverse una salida similar a la siguiente, donde el fichero /etc/crontab fue modificado tras su instalación:
S.5....T c /etc/crontab |
Si se desea realizar una verificación de todos los componentes del sistema, se puede utilizar el mandato rpm con las opciones -Va, que hace una consulta, especifica todos los paquetes, y solicita se verifique si hubo cambios (query all Verify).
rpm -Va |
Lo anterior puede devolver una salida muy extensa, pero sin duda alguna mostrará todos los componentes que fueron modificados o alterados o eliminados tras la instalación del paquete al que pertenecen. Un ejemplo de una salida común sería:
.......T c /etc/pki/nssdb/cert8.db |
La mayoría de los distribuidores serios de equipamiento lógico en formato RPM siempre utilizan una firma digital PG/GnuPG para garantizar que éstos son confiables y como un método de evitar que paquetes alterados pasen por el usuario administrador del sistema y sistemas de gestión de paquetes como yum, up2date, Yast, Pup, etc., sin ser detectados. Las firmas digitales de los responsables de la distribución siempre incluyen firmas digitales en el disco de instalación o bien en alguna parte del sistema de archivos. En el caso de CentOS y Red Hat Enterprise, las firmas digitales están en /usr/share/doc/rpm-*/ o bien /usr/share/rhn/. Algunos distribuidores pueden tener estas firmas en algún servidor HTTP o FTP. Para importar una firma digital, se utiliza el mandato rpm con la opción --import. Para ejemplificar, realice el siguiente procedimiento:
rpm --import http://www.alcancelibre.org/al/AL-RPM-KEY |
Lo anterior importa la firma digital de Alcance Libre y permitirá detectar si un paquete de Alcance Libre fue alterado o está corrupto o si fue dañado. Si se utiliza yum para gestionar la paquetería, éste de modo predeterminado impide instalar paquetes que si estos carecen de una firma digital que esté instalada en la base de datos de RPM.
Cuando se desee instalar un paquete con extensión *.rpm, siempre es conveniente revisar dicho paquete. Hay varias formas de verificar su contenido antes de proceder a instalado. Para fines demostrativos, ingrese hacia http://www.alcancelibre.org/al/webapps/ y descarge el paquete tnef.
Una vez descargado el paquete tnef, se puede verificar la información de dicho paquete utilizando el mandato rpm con las opciones -qp, para realizar la consulta especificando que se trata de un paquete RPM (query package), y la opción -i, para solicitar información.
rpm -qpi tnef-1.2.3.1-1.1.el5.al.i386.rpm |
Lo anterior debe devolver una salida similar a la siguiente:
Name : tnef Relocations: /usr |
Si se desea conocer que componentes va a instalar un paquete RPM en particular, se puede utilizar el mandato rpm con las opciones -qpl, para realizar la consulta, especificar que se trata de un paquete RPM y para solicitar la lista de componentes (query package list). En el siguiente ejemplo se realiza esta consulta contra el paquete tnef-1.2.3.1-1.1.el5.al.i386.rpm:
rpm -qpl tnef-1.2.3.1-1.1.el5.al.i386.rpm |
Lo anterior debe devolver una salida similar a la siguiente:
/usr/bin/tnef |
Para verificar si las firmas digitales de un paquete RPM son las mismas y el paquete no ha sido alterado, se puede utilizar el mandato rpm con las opción -K, que solicita verificar firmas digitales de un paquete RPM (Keys):
rpm -K tnef-1.2.3.1-1.1.el5.al.i386.rpm |
Si el paquete está integro, debe devolver una salida similar a la siguiente:
tnef-1.2.3.1-1.1.el5.al.i386.rpm: (sha1) dsa sha1 md5 gpg OK |
Si el paquete RPM fue dañado, alterado o está corrupto, puede devolver una salida similar a la siguiente:
tnef-1.2.3.1-1.1.el5.al.i386.rpm: (sha1) dsa sha1 MD5 GPG NOT OK |
Para instalar un paquete, se utiliza el mandato rpm con las opciones -ivh, que significa instalar, devolver una salida descriptiva y mostrar una barra de progreso (install verbose hash). Si el paquete no hace conflicto con otro y/o no sobreescribe componentes de otro paquete, se procederá a instalar el mismo. En el siguiente ejemplo se instalará el paquete tnef-1.2.3.1-1.1.el5.al.i386.rpm:
rpm -ivh tnef-1.2.3.1-1.1.el5.al.i386.rpm |
Lo anterior debe devolver una salida similar a la siguiente:
Preparing... ########################################### [100%] |
Si hubiera una versión de éste paquete instalada en el sistema, rpm -ivh no realizará la instalación y devolverá un mensaje respecto a que la está instalado dicho paquete. Repita el siguiente mandato:
rpm -ivh tnef-1.2.3.1-1.1.el5.al.i386.rpm |
Al ya haber sido instalado el paquete tnef, el sistema deberá devolver una salida similar a la siguiente:
Preparing... ########################################### [100%] |
Hay circunstancias y escenarios donde se requiere reinstalar de nuevo el paquete. Para lograr esto se agrega la opción --force para forzar la reinstalación de un paquete. En el siguiente ejemplo se solicita al mandato rpm forzar la reinstalación de el paquete tnef-1.2.3.1-1.1.el5.al.i386.rpm:
rpm -ivh --force tnef-1.2.3.1-1.1.el5.al.i386.rpm |
Lo anterior debe devolver una salida similar a la siguiente:
Preparing... ########################################### [100%] |
Para verificar las dependencias de un paquete descargado, se utiliza el mandato rpm con las opciones -qp y --requires, la cual consulta las dependencias del paquete. En el siguiente ejemplo, se ha descargado el paquete joomla-1.0.15-2.9.el5.al.noarch.rpm desde http://www.alcancelibre.org/al/webapps/, y se procede a consultar sus dependencias:
rpm -qp --requires joomla-1.0.15-2.9.el5.al.noarch.rpm |
Lo anterior debe devolver una salida similar a la siguiente:
config(joomla) = 1.0.15-2.9.el5.al |
Pueden hacerse consultas a la inversa de lo anterior, es decir, consultar al mandato rpm que paquete provee alguna dependencia en particular. En el siguiente ejemplo se solicitará al mandato rpm que paquete provee la dependencia php.
rpm -q --whatprovides php |
Lo anterior debe devolver una salida similar a la siguiente:
php-5.1.6-15.el5 |
También puede consultarse qué requiere de un paquete o componente en particular. En el siguiente ejemplo se consulta al mandato rpm que paquetes requieren al paquete httpd.
rpm -q --whatrequires httpd |
Lo anterior puede devolver una salida similar a la siguiente:
system-config-httpd-1.3.3.1-1.el5 |
De ser necesario, se puede incluso hacer consultas respecto a ficheros (como bibliotecas compartidas) para conocer que paquetes dependen de éstos. En el siguiente ejemplo se consulta la mandato rpm que paquetes requieren a la biblioteca libbz2.so.1:
rpm -q --whatrequires libbz2.so.1 |
Lo anterior debe devolver una salida similar a la siguiente, y que consiste en una lista de paquetes RPM instalados en el sistema:
bzip2-libs-1.0.3-3 |
Para instalar o actualizar un paquete, se utiliza el mandato rpm con las opciones -Uvh, que significa instalar o actualizar, devolver una salida descriptiva y mostrar una barra de progreso (update verbose hash), y se procede a instalar y/o actualizar el mismo:
rpm -Uvh joomla-1.0.15-2.9.el5.al.noarch.rpm |
Si falta alguna de las dependencias, el sistema devolverá una salida similar a la siguiente:
error: Failed dependencies: |
Evidentemente se debe instalar el paquete php-xml para poder instalar el paquete joomla-1.0.15-2.9.el5.al.noarch.rpm. Este puede estar incluido en el disco de instalación o bien estar incluido entre las actualizaciones del sistema.
Si el paquete php-xml hubiera estado instalado (yum -y install php-xml), la salida hubiera sido similar a la siguiente:
Preparing... ########################################### [100%] |
Antes de la aparición de yum, este era el talón de Aquiles de RPM. Actualmente estos problemas se pueden resolver utilizando yum en los sistemas que lo incluyen. La forma más práctica de instalar paquetería RPM resolviendo dependencias automáticamente es a través de yum. En el siguiente ejemplo se realiza el procedimiento de instalación del paquete joomla-1.0.15-2.9.el5.al.noarch.rpm utilizando yum:
yum -y localinstall joomla-1.0.15-2.9.el5.al.noarch.rpm |
Lo anterior debe devolver una salida similar a la siguiente:
Loading "fastestmirror" plugin |
Algunos paquetes incluyen guiones que ejecutan procesos que pueden ser requeridos previo o posterior a la instalación. Si no se desea que se ejecuten estos guiones, se añade a rpm -ivh o rpm -Uvh la opción --noscripts. En el siguiente ejemplo, se instalará el paquete joomla-1.0.15-2.9.el5.al.noarch.rpm sin la ejecución de los guiones que pudieran estar definidos en el paquete RPM:
rpm -Uvh --noscripts joomla-1.0.15-2.9.el5.al.noarch.rpm |
En circunstancias en las cuales ser realizaron cambios en los permisos en el sistema de archivos, es posible volver a dejarlos de acuerdo a los especificados en el paquete RPM original utilizando el mandato rpm con la opción --setperms del siguiente modo:
rpm --setperms paquete |
Vea el permiso de /usr/bin/passwd del siguiente modo:
ls -l /usr/bin/passwd |
Lo anterior puede devolver una salida similar a la siguiente:
-rwsr-xr-x 1 root root 22984 ene 6 2007 /usr/bin/passwd |
Cambie el permiso del siguiente modo:
chmod 700 /usr/bin/passwd |
Vuelva a ver el permiso de /usr/bin/passwd del siguiente modo:
ls -l /usr/bin/passwd |
Lo anterior debe devolver una salida similar a la siguiente:
-rwx------ 1 root root 22984 ene 6 2007 /usr/bin/passwd |
El fichero /usr/bin/passwd pertence al paquete passwd, confirmelo del siguiente modo:
rpm -qf /usr/bin/passwd |
Lo anterior debe devolver una salida similar a la siguiente:
passwd-0.73-1 |
Para recuperar de nuevo el permiso original de /usr/bin/passwd, utilice lo siguiente:
rpm --setperms passwd |
Vuelva a ver el permiso de /usr/bin/passwd del siguiente modo:
ls -l /usr/bin/passwd |
Lo anterior debe devolver una salida similar a la siguiente y que corresponde al permiso original del fichero /usr/bin/passwd:
-rwsr-xr-x 1 root root 22984 ene 6 2007 /usr/bin/passwd |
Para desinstalar paquetería, se utiliza el mandato rpm con la opción -e, que se utiliza para eliminar, seguida del nombre del paquete. En el siguiente ejemplo, se solicita al mandato rpm desinstalar los paquetes joomla y php-xml:
rpm -e joomla php-xml |
Si no hay dependencias que lo impidan, el sistema solo devolverá el símbolo de sistema. Si el paquete o alguno de sus componentes fuera dependencia de otro u otros paquetes, el sistema informará que no es posible desinstalar y devolverá la lista de paquetes que lo requieren. En el siguiente ejemplo se tratará de desinstalar el paquete crontabs:
rpm -q crontabs |
Como el paquete crontabs es requerido por anacron, el sistema devolverá una salida similar a la siguiente:
error: Failed dependencies: |
Si se desea des instalar cualquier paquete sin importar que otros dependan de este, se puede utilizar agregar la opción --nodeps. Esto es contraindicado, y solo debe ser utilizado es situaciones muy particulares o escenarios donde así se requiere. Evite siempre desinstalar paquetes que sean dependencia de otros en el sistema a menos que vaya a reinstalar inmediatamente un paquete que los sustituya.
Alcance Libre
http://www.alcancelibre.org/staticpages/index.php/como-rpm