Linux: Cómo usar dpkg para arreglar apt cuando se rompe

Contenidos

Bash Shell

¿Alguna vez has roto apt? Para los profesionales experimentados de Linux, es bastante común (aproximadamente cada medio año) romper apt. Si conoce algunos comandos en dpkg, ¡a menudo puede arreglar el problema más fácilmente! Averiguar como.

Cuáles son apto y dpkg?

Si está usando una distribución basada en Debian como Ubuntu o Mint, su computadora utiliza apto para manejar paquetes. Apt significa Herramienta de embalaje avanzada, que le posibilita instalar, desinstalar, purgar y administrar paquetes Debian.

al mismo tiempo apt (usado en la línea de comando), es probable que su computadora tenga un administrador de paquetes de escritorio de nivel superior / general, que simplemente utiliza apt, o tal vez dpkg, en el fondo.

El administrador de paquetes de Debian dpkg es una alternativa a la administración de paquetes en instalaciones sustentadas en Debian. Es un nivel mucho más bajo que apt, lo que le da más libertad, pero además presenta un mayor riesgo de romper cosas.

Esta es el motivo por la que (a menos que sea un ingeniero de DevOps experimentado) le recomiendo que utilice apt en todo momento, aumentándolo con dpkg tan pronto como tenga problemas.

Adoptar este enfoque paso a paso le ofrece lo mejor de ambos mundos: la estabilidad y la facilidad de uso del apt administrador de paquetes, con el poder y la granularidad del dpkg Administrador de paquetes Debian, una vez que lo necesite.

Digamos, a modo de ejemplo, que tiene un paquete que acaba de instalar, que de alguna manera terminó rompiendo el apt. O, tal vez, la instalación de un paquete se interrumpió accidentalmente.

Cualquiera que sea la causa, apt ahora se considera roto, y ya has probado cosas como sudo apt update --fix-missing y sudo apt install --fix-broken en vano. Si es así, entonces …

Bienvenido a dpkg

Cuando tu apt está roto, no es divertido. Si es De Verdad roto, es inclusive menos divertido. Inclusive si alguien sabe lo que está haciendo, a veces se necesita un cierto nivel de arte, y definitivamente, habilidad, para arreglar un sistema de empaque roto.

El término «arte» es bastante aplicable, puesto que dispone de una idea o sensación mientras realiza varios pasos de solución de problemas, especialmente si lo ha hecho muchas veces, si algo funcionará o no durante un reinicio.

El riesgo siempre es que el sistema de empaquetado esté tan dañado que, si reinicia, es factible que su instancia de Linux no vuelva a aparecer y que se requiera una resolución de problemas adicional y potencialmente aún más compleja.

Me agradaría decir en este punto que todo esto se puede evitar fácilmente ejecutando algunos comandos simples, pero desgraciadamente, ese no es el caso. El hecho es que cuanto más sepa, más fácil será arreglarlo y más confianza tendrá para saber si está listo para reiniciar el sistema o no.

Aquí es a donde llegamos dpkg. los dpkg El programa nos posibilita un control mucho más granular sobre todos los paquetes instalados, y aún cuando existe un mayor riesgo de que algo salga mal, además hay mucho más poder para cambiar un sistema exactamente de la manera que queremos. Vamos a sumergirnos.

Si está interesado en Linux en general, además puede leer nuestra serie de tres partes Bash Automation & Scripting.

Básico dpkg Uso

Podemos ver los paquetes hoy en día en el sistema simplemente ejecutando dpkg -l. Como es probable que la salida sea muy detallada (aún cuando regularmente está paginada), puede usar un grep para limitar los resultados.

dpkg -l | head -n5 && dpkg -l | grep 'gnome-calculator'
dpkg -l | grep 'gnome-calculator'

Nuestra primera ejecución de dpkg

El primer comando es en realidad una combinación de dos comandos (separados por &&, que literalmente significa: solo ejecute el segundo comando si el primero tiene éxito).

En el primero de estos dos comandos, tomamos las primeras cinco líneas (usando una tubería | y head -n5), y posteriormente, en el segundo comando, buscamos enumerar la salida que estamos buscando. Para este caso, estamos buscando el texto gnome-calculator.

La línea / comando secundario debajo muestra una versión que regularmente usaríamos. Una vez que alguien está familiarizado con la sintaxis del dpkg salida, las primeras cinco líneas generalmente son innecesarias. Tenga en cuenta que la primera columna se refiere a (visualmente) Desired=, con la segunda columna refiriéndose a Status=, y la tercera columna para Err?=. Si sigue visualmente las líneas, verá cómo se conectan rápidamente.

Como el nuestro gnome-calculator se ha instalado correctamente sin errores actuales, no hay un código de tercera columna debajo Err?=. Además notamos aquí que uppercase=badestá escrito en la información breve relacionada con la tercera columna. Como se indicó previamente, en nuestro caso, está en blanco.

La primera columna muestra el estado deseado y la segunda columna muestra el estado actual. Ambos se muestran como i (Install[ed] y Inst[alled] respectivamente, y este (ii) es la secuencia más común que (querrá) ver. Simplemente significa que everything is fine, that the package is installed, and that there are no issues.

Además tenga en cuenta que, en las descripciones de las columnas entre paréntesis, la letra mayúscula indica la conexión entre cualquier letra factible vista y el término relevante. A modo de ejemplo, considere cómo f se refiere a halF-conf, señalando las mayúsculas F en el mismo.

Echemos ahora un vistazo a otra salida para comparar. Esta vez, dejaremos las primeras cinco líneas y podrá acostumbrarse un poco más a leer el resultado inclusive sin los encabezados.

dpkg -l | grep 'mintwelcome'

dpkg -l |  salida grep 'mintwelcome'

Aquí vemos el interesante resultado de rc, dónde ii solía ser para el gnome-calculator. Si busca el r en el primero Desired= descripción de la columna que vimos arriba, puede ver que significa Remove[d], y eso c en la segunda columna representa Conf-files.

¡Ajá! Esta (mintwelcome, un paquete de bienvenida en Mint) es un paquete que desinstalamos en alguna vez, pero los archivos de configuración del mismo permanecen. ¡Vamos a purgarlo!

dpkg --purge 'mintwelcome'
sudo dpkg --purge 'mintwelcome'
dpkg -l | grep 'mintwelcome'

Purga de archivos de configuración 'mintwelcome' con dpkg

Tenga en cuenta que además puede usar el -P taquigrafía en lugar de utilizar --purge.

En el primer comando, podemos intentar purgar mintwelcome sin uso sudo. A pesar de esto, esto no funcionará. Necesita privilegios de superusuario / nivel raíz para desinstalar (o instalar o purgar) paquetes. Podemos correr de nuevo usando sudo, y nuestro paquete será purgado.

Tenga en cuenta que el término purga es usado por ambos apt así como por dpkg para indicar que queremos purgar absolutamente un paquete en lugar de simplemente desinstalarlo, lo que dejará los archivos de configuración.

Asegurándose

Confío en que empiece a apreciar el poder, el control y la granularidad que dpkg puede proporcionarle al administrar paquetes en su distribución basada en Debian, como Ubuntu o, para este caso, Mint. Sería fácil, a modo de ejemplo, buscar restos de archivos de configuración de paquetes previamente desinstalados simplemente ejecutando:

dpkg -l | grep '^rc'

Salida de listado de dpkg para archivos de configuración comunes de javascript

Antes de quitar cualquiera de estos archivos de configuración, querrá asegurarse doblemente de que no haya paquetes instalados con un nombre equivalente. A modo de ejemplo, para este caso, podemos ejecutar:

dpkg -l | grep 'javascript'

dpkg -l |  salida grep 'javascript'

Observe cómo eliminamos la segunda parte de 'javascript-common' buscar 'javascript'.

¿Es seguro eliminarlo o no? Puedes ver cómo un gran poder implica una gran responsabilidad, como siempre en la vida. La decisión de eliminarlo o no es tuya. Por lo general, hay tres cosas que debe tener siempre en cuenta al trabajar con dpkg:

primeramente, querrá verificar, verificar dos veces y verificar tres veces para estar seguro. A modo de ejemplo, en la primera salida anterior, podríamos haber seguido adelante y haber eliminado con indiferencia javascript-common sin chequear si había otros paquetes de Javascript en el sistema.

¿Fue el mejor curso de acción? Tal vez, pero el nivel de garantía / confianza ciertamente bajó tan pronto como hicimos nuestra primera verificación, puesto que definitivamente hay otros paquetes de Javascript en el sistema.

Al mismo tiempo, tenga en cuenta que verdaderamente no hay nada roto aquí. Está bien dejar los archivos de configuración para este paquete aparentemente eliminado. El viejo adagio “Si no está roto, no lo arregles” ciertamente parecería aplicarse para este caso. Es bueno tenerlo en cuenta al utilizar dpkg.

en segundo lugar, es esencial recordar que apt es un administrador de paquetes que mantiene todas las conexiones (dicho de otra forma, versiones y dependencias) entre paquetes en mente al instalar, desinstalar o depurar paquetes.

Este no es el caso de dpkg, que está mucho más basado en paquetes. Hay más granularidad, pero además más riesgo de romper cosas. Si un paquete se basa en otro o en una biblioteca, alguien ciertamente romperá las cosas simplemente desinstalando el paquete principal usando dpkg.

En tercer lugar, la mayoría de los paquetes de Linux disponen muchos dependencias. Por eso, no se recomienda utilizar simplemente dpkg para la administración de paquetes estándar, reiterando nuestro consejo original de usar apt por defecto y cambiar a dpkg cuando sea necesario.

Para quitar / desinstalar un paquete en lugar de purgarlo (dicho de otra forma, dejar los archivos de configuración), puede usar el --remove (o -r) opción a dpkg. Para verificar un paquete, use --verify (o -V). los --audit (o -C) contra un paquete comprueba la coherencia y la cordura de la base de datos para el paquete (o para todos los paquetes si no se especifica ningún paquete).

Para obtener más opciones, consulte man dpkg ejecutado desde su terminal. Además hay comandos específicos y más complejos que se pueden utilizar para varios problemas del sistema de empaque. Para estos, de forma general es mejor emplear su motor de búsqueda favorito para el problema o situación específica que se observa en el momento en que ocurre. A menudo, alguien más ya se ha encontrado con él y ha documentado los detalles. Si descubre algo nuevo, tómese unos minutos para registrar sus hallazgos en algún foro o hilo de discusión relevante.

Terminando

En este post, empezamos a explorar dpkg y cómo puede ayudarnos con la administración granular de paquetes, a diferencia de apt, que manejará paquetes y todas sus dependencias. Recuerde, en estas situaciones complejas de depuración de problemas de administración de paquetes, un gran poder implica una gran responsabilidad.

Además vimos cómo seguir un enfoque más reacio al riesgo mientras nos dimos cuenta de que la depuración en profundidad de la administración de paquetes es equivalente al arte, y cuanto mejor es un pintor, más exitosa es la pintura; ejem, el reinicio será.

Suscribite a nuestro Newsletter

No te enviaremos correo SPAM. Lo odiamos tanto como tú.