De vez en cuando, los usuarios de Ubuntu encuentran errores deapt
oapt-get
, de la forma:
The package some-package needs to be reinstalled, but I can't find an archive for it.
Quiero saber qué causa este error para poder reproducirlo e intentar encontrar formas seguras de solucionarlo, incluso cuando el paquete roto es importante y tiene muchas dependencias.este pocodelcódigo fuente APTPodría dar una pequeña pista, pero no sé cómo los paquetes obtienen el estado que causa el error.
¿Cómo puedo producir este error al realizar pruebas en mi sistema (Ubuntu MATE 17.10)?
Esto es impulsado poresta pregunta reciente de Ask Ubuntuy mi malestar de larga data con las preguntas finales sobre este error contraApt/Synaptic necesita reinstalar el paquete pero no puede encontrar el archivo correspondiente, cuya respuesta se utiliza dpkg --force-all
para eliminar el paquete infractor.Comentarios anónimossugiere que esta solución ha funcionado para muchos usuarios, pero no estoy seguro de que su uso --force-all
no cause problemas posteriores o que sea una buena idea utilizar este método para eliminar paquetes importantes como APT.
Respuesta1
El error "Apt/Synaptic necesita reinstalar el paquete pero no puede encontrar el archivo" a veces no es específico.
La vez más común que veo este error es cuando actualizo Ubuntu de una versión a otra.
Nota: Ubuntu está convirtiendo de apt-get a apt, pero estoy usando apt-get en esta publicación. Para obtener información adicional consulte man apt
yhttps://www.debian.org/doc/manuals/debian-reference/ch02.en.html
La causa más común de este error es cuando un usuario instaló un paquete y luego eliminó el .deb, generalmente consudo apt-get clean
http://manpages.ubuntu.com/manpages/zesty/man8/apt-get.8.html
limpio
clean clears out the local repository of retrieved package files. It removes everything but the lock file from /var/cache/apt/archives/ and /var/cache/apt/archives/partial/
Luego, en algún momento, dpkg --reconfigure
es llamado, ya sea por el usuario, o por actualización, o en algún momento el usuario intenta reinstalar el paquete sudo apt-get --reinstall foo
o alguna variación.
Si apt no puede ubicar el .deb en el repositorio, ya sea porque los paquetes se eliminaron (poco frecuente), el repositorio se eliminó del sistema o porque actualizó y el paquete no está en el nuevo repositorio, obtendrá el error "Apt/Synaptic necesita reinstalar el paquete pero no puede encontrar el archivo"
Pero el error puede deberse a otras causas.
Citando las secciones relevantes de la página de manual de dpkg (Verhttp://manpages.ubuntu.com/manpages/trusty/man1/dpkg.1.htmlpara detalles )
INFORMACIÓN SOBRE PAQUETES dpkg mantiene información útil sobre los paquetes disponibles. La información se divide en tres clases: estados, estados de selección y banderas. Estos valores están pensados para cambiarse principalmente con dselect.
Estados del paquete
not-installed The package is not installed on your system. config-files Only the configuration files of the package exist on the system. half-installed The installation of the package has been started, but not completed for some reason. unpacked The package is unpacked, but not configured. half-configured The package is unpacked and configuration has been started, but not yet completed for some reason. triggers-awaited The package awaits trigger processing by another package. triggers-pending The package has been triggered. installed The package is unpacked and configured OK.
COMPORTAMIENTO
-i, --install package-file... Install the package. If --recursive or -R option is specified, package-file must refer to a directory instead. Installation consists of the following steps: 1. Extract the control files of the new package. 2. If another version of the same package was installed before the new installation, execute prerm script of the old package. 3. Run preinst script, if provided by the package. 4. Unpack the new files, and at the same time back up the old files, so that if something goes wrong, they can be restored. 5. If another version of the same package was installed before the new installation, execute the postrm script of the old package. Note that this script is executed after the preinst script of the new package, because new files are written at the same time old files are removed. 6. Configure the package. See --configure for detailed information about how this is done.
--configurar paquete...|-a|--pendiente
Configure a package which has been unpacked but not yet configured. If -a or --pending is given instead of package, all unpacked but unconfigured packages are configured. To reconfigure a package which has already been configured, try the dpkg-reconfigure(8) command instead. Configuring consists of the following steps: 1. Unpack the conffiles, and at the same time back up the old conffiles, so that they can be restored if something goes wrong. 2. Run postinst script, if provided by the package. /var/lib/dpkg/status Statuses of available packages. This file contains information about whether a package is marked for removing or not, whether it is installed or not, etc. See section INFORMATION ABOUT PACKAGES for more info.
Si las páginas de manual son tl;dr -> Como parte de la instalación, .deb/dpkg/apt ejecuta scripts previos y posteriores a la instalación y otras funciones. Si estos scripts de instalación/eliminación fallan por cualquier motivo, un paquete se marcará como "medio instalado" (o en algún estado distinto a no instalado/instalado). En ese estado sucio, es posible que a veces también vea el error "Apt/Synaptic necesita reinstalar el paquete pero no puede encontrar el archivo". En este ejemplo, el problema no es un archivo comprimido faltante, sino un problema en los scripts previos y posteriores a la instalación que no se puede resolver volviendo a ejecutarlos. Por tanto, el error es a veces inespecífico.
Cómo gestionar paquetes rotos
Primero, intente solucionar las dependencias asegurándose de que los repositorios/ppa apropiados estén habilitados, por ejemplo, el universo, o cualquier repositorio que sea necesario.
Entonces el infame
sudo apt-get install -f
Leercualquier mensaje de salida y error y publique el comando y la salida aquí si necesita ayuda.
Intenta reconfigurar
sudo dpkg --configure -a
Esto ejecutará los scripts de configuración. Puede especificar un paquete en lugar de -a, pero -a es más útil cuando tiene problemas.
Leercualquier mensaje de salida y error y publique el comando y la salida aquí si necesita ayuda.
Intente observar cualquier secuencia de comandos fallida y, si es posible, solucione el error/problema en la secuencia de comandos.
Intente retirar el paquete infractor, por la fuerza si es necesario. Debe tener mucho cuidado aquí, ya que puede forzar la eliminación de un paquete crítico o, peor aún, de un conjunto de paquetes críticos. Los siguientes comandos van de educados a menos educados y a fuerza absoluta. Pruébelos en orden.
sudo dpkg --remove $broken_package sudo dpkg --remove --force-remove-reinstreq $broken_package sudo dpkg --remove --force-all $broken_package
Si alguno de ellos funciona, ejecute
sudo apt-get update && sudo apt-get upgrade
, es posible que necesite ejecutarsudo apt-get -f install
y/osudo dpkg --configure -a
también.Si eso falla, deberá eliminar manualmente los paquetes. Esto puede implicar encontrar todos los componentes de su sistema y eliminarlos manualmente.
Utilice el siguiente procedimiento
Eliminar la información de dpkg (ver arriba)
cd /var/lib/dpkg/info sudo rm -i package_name*
Tenga cuidado de no eliminar más de lo necesario aquí.
Finalmente elimine el paquete infractor.
sudo dpkg --remove --force-remove-reinstreq package_name
Entonces deberías poder usar apt
sudo apt-get update sudo apt-get install -f sudo apt-get upgrade
Solo si es necesario, busque y elimine manualmente los archivos que queden en el sistema. Este es un procedimiento manual y puede incluir archivos de configuración en
/etc
páginas de manual o datos compartidos. Utilice buscar o localizar para identificar posibles archivos restantes.Obviamente debes tener mucho cuidado al eliminar archivos del sistema. No elimine cosas que no comprenda y no utilice
rm -Rf
sin comprender qué hará ese comando.rm -i
Probablemente sea mejor ya que la-i
opción solicita confirmación.
Recrea este problema
Es posible que pueda reproducir este mensaje de error editando manualmente el archivo de estado dpkg de cualquier paquete /var/lib/dpkg/info
y cambiando el estado a medio instalado.
sudo nano /var/lib/dpkg/info/some_package
Edite la línea de Estado para que diga
Estado: purga reinstreq medio instalada
Entonces intenta correr apt-get
.
Si eso no funciona, instale un paquete desde un ppa, ejecute apt-get clean, elimine el ppa y luego intente reinstalar o reconfigurar el paquete.
Perdón por la publicación tan larga, pero espero que esto le brinde información sobre la causa y la resolución de este complejo mensaje de error "Apt/Synaptic necesita reinstalar el paquete pero no puede encontrar el archivo".