Cómo reconstruir la base de datos RPM dañada en CentOS


La base de datos RPM está formada por archivos que se encuentran en el directorio /var/lib/rpm/ en CentOS y otras distribuciones empresariales de Linux como RHEL , openSUSE , Oracle Linux y más.

Si la base de datos RPM está dañada, RPM no funcionará correctamente, por lo que las actualizaciones no se pueden aplicar a su sistema, se producen errores al actualizar paquetes en su sistema a través del administrador de paquetes YUM. El peor de los casos es no poder ejecutar ningún comando de rpm y yum correctamente.

Hay una serie de factores que pueden llevar a la corrupción de la base de datos de RPM, como transacciones previas incompletas, instalación de cierto software de terceros, eliminación de paquetes específicos y muchos otros.

En este artículo, mostraremos cómo reconstruir una base de datos RPM dañada; De esta manera puede recuperarse de una corrupción de la base de datos RPM en CentOS. Esto requiere privilegios de usuario root, de lo contrario, use el comando sudo para obtener esos privilegios.

Reconstruir la base de datos de RPM dañada en CentOS

Primero, haga una copia de seguridad de su base de datos de RPM actual antes de continuar (es posible que la necesite en el futuro), utilizando los siguientes comandos.

# mkdir /backups/
# tar -zcvf /backups/rpmdb-$(date +"%d%m%Y").tar.gz  /var/lib/rpm

A continuación, verifique la integridad del archivo de metadatos del paquete maestro /var/lib/rpm/Packages ; este es el archivo que necesita reconstrucción, pero primero elimine los archivos /var/lib/rpm/__ db * para evitar bloqueos antiguos con los siguientes comandos.

# rm -f /var/lib/rpm/__db*		
# /usr/lib/rpm/rpmdb_verify /var/lib/rpm/Packages

En caso de que falle la operación anterior, lo que significa que aún encuentra errores, debe volcar y cargar una nueva base de datos. También verifique la integridad del archivo de paquetes recién cargados de la siguiente manera.

# cd /var/lib/rpm/
# mv Packages Packages.back
# /usr/lib/rpm/rpmdb_dump Packages.back | /usr/lib/rpm/rpmdb_load Packages
# /usr/lib/rpm/rpmdb_verify Packages

Ahora, para verificar los encabezados de la base de datos, consulte todos los paquetes instalados con las marcas -q y -a , e intente observar cuidadosamente cualquier error enviado a stderror .

# rpm -qa >/dev/null	#output is discarded to enable printing of errors only

Por último, pero no menos importante, reconstruya la base de datos de RPM con el siguiente comando, la opción -vv permite mostrar mucha información de depuración.

# rpm -vv --rebuilddb

Use la herramienta dcrpm para detectar y corregir la base de datos de RPM

También descubrimos la herramienta de línea de comandos dcrpm (detectar y corregir rpm) que se utiliza para identificar y corregir problemas conocidos relacionados con la corrupción de la base de datos de RPM. Es una herramienta simple y fácil de usar que puede ejecutar sin opción. Para un uso eficaz y confiable, debe ejecutarlo regularmente a través de cron.

Puedes instalarlo desde la fuente; descargue el árbol de origen e instálelo usando setup.py (que también debería tomar la dependencia psutil de pypi ), como se muestra.

# git clone https://github.com/facebookincubator/dcrpm.git
# cd dcrpm
# python setup.py install

Una vez que haya instalado dcrpm , ejecútelo como se muestra.

# dcrpm

Finalmente, intente ejecutar nuevamente el comando rpm y yum fallido para ver si todo funciona bien.

dcrpm repositorio de Github: https://github.com/facebookincubator/dcrpm

¡Eso es todo! En este artículo, hemos explicado cómo reconstruir una base de datos RPM dañada en CentOS. Para hacer preguntas o compartir sus opiniones sobre esta guía, utilice el formulario de comentarios a continuación.