Reinstalando todos los paquetes de Debian

Maté por error un proceso dpkg ejecutándose en segundo plano y me gustaría reinstalar todos los paquetes para asegurarme de que todo está bien.

Primero, traté de obtener una lista de todos los paquetes y reinstalarlos

dpkg --get-selections | grep -v deinstall | awk "{print $1}" > list.log apt-get install --reinstall $(cat list.log) 

Pero hay mensajes como:

E: Couldn"t configure pre-depend debconf:i386 for console-setup:i386, probably a dependency cycle. 

Intenté apt-get -f install, sin éxito.

Como último recurso, reinstalé todos los programas que fallaron sumas de comprobación:

dpkg -l | grep ^ii | awk "{ print $2 }" | xargs debsums -s -a 

¿Qué debo hacer para reinstalar todo?

Editar: Problema resuelto. El problema era otra cosa (ver los comentarios). Sin embargo, entiendo que es algo que se debe evitar con Debian.

Comentarios

  • Recientemente tuve un bloqueo al intentar instalar un paquete. Cuando reinicié e intenté reinstalar ese paquete, recibí el mensaje » E: dpkg fue interrumpido, debes ejecutar manualmente ‘ dpkg –configure -a ‘ para corregir el problema. «. Ejecutar ese comando eliminó dicho paquete y sus archivos de configuración. Luego pude instalar el paquete desde cero. Intenta darle una oportunidad a ese comando.
  • No ‘ no hizo nada, así que supongo que no hay nada roto. Intentaré más tarde comprobar si mis problemas con el controlador están resueltos.
  • Reinstalar todos los paquetes == realmente mala idea. (a) Es ‘ casi siempre innecesario (b) probablemente fallará ( c) Si su sistema está realmente tan estropeado, simplemente vuelva a instalarlo. Simplemente solucione los problemas que realmente ve.

Respuesta

Prueba esto, recordando que hice no pruébelo:

dpkg --get-selections > selections sudo dpkg --clear-selections sudo dpkg --set-selections < selections sudo apt-get --reinstall dselect-upgrade 

Fuentes:

Comentarios

  • Mi problema fue completamente diferente: no estaba arrancando el kernel correcto (!). Aceptaré su respuesta ya que parece hacer lo que yo quería (pero no probado también).
  • Esto no ‘ t funcionará y romperá completamente el sistema. La línea 3 desinstalará apt, por lo que ‘ no será posible reinstalar todo, luego.
  • @rkjnsn: Actualicé la respuesta, verifique si funciona.
  • Intentando hacer esto, no se está reinstalando nada, aunque el archivo de selecciones está poblado: pi @ prodpi ~ $ sudo apt-get –reinstall dselect-upgrade Leyendo listas de paquetes … Listo Construyendo árbol de dependencias Estado de lectura información … Hecho 0 actualizado, 0 recién instalado, 0 para eliminar y 0 no actualizado. ¿Alguna idea?
  • Una razón por la que creo que su código no ‘ no funciona es porque el comando dpkg --get-selections list también se desinstala paquetes.

Respuesta

Al usar Aptitude, hay una manera fácil y rápida de hacerlo:

sudo aptitude reinstall "~i"

que reinstalará todos los paquetes instalados actualmente.

Comentarios

  • ¡Agradable y conciso!

Respuesta

Por si acaso, intente reinstalar cada paquete :

for i in $(cat list.log); do apt-get install --reinstall "$i"; done 

Es posible que también desee agregar la opción de respuesta sí a todas las preguntas.

Responder

En uno de los recursos citados por Lucas Malor encontré un script llamado populator que parece ser cerca de la solución. Si establece la variable de selección de paquetes en la lista de todos sus paquetes

PKGLIST=$(dpkg --get-selections | grep -v deinstall| cut -f1)

puede ejecutar el script y reinstalar todos los paquetes pero el sistema probablemente tendrá algunos problemas. Sería mejor probarlo primero en una máquina virtual.

Aquí hay una variante del script del enlace anterior:

#!/bin/bash # # Script to pre-populate apt-get proxy for faster later downloads. # It uses apt-get and wget to pull all the specified packages. # # Make sure only root can run our script if [[ $EUID -ne 0 ]]; then echo "You"re not root, are you?" 1>&2 exit 1 fi # Specify wanted packages PKGLIST="exaile" # Clears out the local repository of retrieved package files apt-get clean # Resynchronize the package index files from their sources apt-get update # Re-install specified packages at the newest version. apt-get install --reinstall $PKGLIST 

Si se muestra un error que indica que no se pueden reinstalar paquetes específicos, ejecute este comando para volver a intentarlo:

sudo apt-get -y autoremove 

Respuesta

Intente esto en su lugar, ya que tomará su salida y la convertirá en una línea gigante con espacios que separan los nombres de archivo.

dpkg --get-selections | grep -v deinstall | awk "{print $1}" > list.log awk "$1=$1" ORS=" " list.log > newlist.log apt-get install --reinstall $(cat newlist.log)

El único cambio en su publicación original es agregar la segunda declaración awk, que probablemente podría hacerse en línea con la primera para crear el archivo que desea.

Este cambio forzará a apt- llegar a volver a descargar correctamente los paquetes y las dependencias faltantes que no se instalaron la primera vez y reinstalarlos en orden.

Si lo hacemos en línea, creo que se vería así entonces:

dpkg --get-selections | grep -v deinstall | awk "{print $1}" | awk "$1=$1" ORS=" " > list.log

Y luego asegúrese de que el sistema tenga los paquetes correctos (o los más recientes), limpie el caché de apt, actualícelo y luego vuelva a descargar todos los archivos (puede omitir los dos primeros pasos si solo desea lo que tiene en el caché reinstalado):

apt-get clean && apt-get update && apt-get install --reinstall $(cat list.log)

Tenía más de 2k paquetes instalados en un sistema que actualicé que tenía un bloqueo. Usando dpkg –configure -a terminó la instalación (estaba en la fase final). Luego ejecuté esto para que todo se reinstale correctamente.

O como se indica en https://superuser.com/questions/298912/reinstall-debian-while-keeping-installed-packages-and-data :

sudo apt-get install --reinstall $(dpkg --get-selections | grep -w "install$" | cut -f1)

Solo asegúrese de ejecutar un «init 2» primero antes de cualquier reinstalación, ya que algunos de los componentes de X o Puede que a su administrador de ventanas favorito no le guste que lo reinstalen.

Comentarios

  • A menos que ‘ haya modificado IFS , unquoted $(cat file) tokeniza en cualquier espacio en blanco y da exactamente el mismo resultado ya sea que el archivo esté delimitado por nuevas líneas o espacios. --reinstall podría ayudar, pero ya se le dio dos veces antes de esto.

Respuesta

Hacer esto a través de apt es bastante simple:

apt list --installed | cut --delimiter=/ --fields=1 | xargs apt reinstall -y

El apt list --installed parte hace exactamente lo que uno supondría. El carácter | canaliza la salida estándar del comando apt a la entrada estándar del cut comando. La parte cut --delimiter=/ le dice al comando cut que use / como delimitador y --fields=1 le dice a cut que use el primer campo, es decir, el texto antes del primer / que aparece en la salida del comando apt list --installed. En este caso, el resultado del comando cut es una lista de todos los paquetes instalados sin toda la información adicional que no necesitamos del apt list --installed comando.

El siguiente | canaliza la salida estándar del comando cut, la lista de todos los instalados paquetes, a la entrada estándar del comando xargs, que, a su vez, invoca apt reinstall -y para cada uno de los paquetes que están instalados actualmente .

Nota : dependiendo de su configuración de apt, el apt reinstall -y part puede instalar actualizaciones a sus paquetes existentes en lugar de las versiones exactas que tiene instaladas actualmente.

Respuesta

Cuando utilice RPM, en caso de que cause una corrupción en la base de datos del paquete, existe una opción para reconstruir esta base de datos, evitando así tener que pasar por b asicamente una reinstalacion. Como un usuario señaló aquí, esto se hace en Debian por dpkg --configure -a.

Comentarios

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *