De temps en temps, les utilisateurs d’Ubuntu rencontrent des erreurs de apt
ou apt-get
, de la forme:
_The package some-package needs to be reinstalled, but I can't find an archive for it.
_
Je veux savoir ce qui cause cette erreur afin de pouvoir la reproduire et essayer de trouver des moyens sûrs de la réparer, même lorsque le paquet cassé est important et comporte de nombreuses dépendances. Ce bit du code source APT peut donner un indice, mais je ne sais pas comment les paquets obtiennent le statut qui cause l'erreur.
Comment puis-je générer cette erreur pour effectuer des tests sur mon système (Ubuntu MATE 17.10)?
Ceci est provoqué par cette récente question Ask Ubunt et mon inconfort de longue date avec les dernières questions sur cette erreur contre Apt/Synaptic doit réinstaller le paquet mais ne trouve pas l'archive correspondante , dont la réponse utilise _dpkg --force-all
_ pour supprimer le package en cause. Commentaires anonymes suggère que cette solution a fonctionné pour de nombreux utilisateurs, mais je ne suis pas convaincu que l’utilisation de _--force-all
_ ne causera pas de problèmes ultérieurs, ni que c’est une bonne idée d’utiliser cette méthode pour supprimer les éléments importants. des paquets comme APT.
L'erreur "Apt/Synaptic a besoin de réinstaller le package mais ne trouve pas l'archive correspondante" est parfois non spécifique.
La plupart du temps, je vois cette erreur lors de la mise à niveau d’Ubuntu d’une version à l’autre.
Note : Ubuntu convertit d'apt-get en apt, mais j'utilise apt-get dans ce post. Pour plus d'informations, voir man apt
et https://www.debian.org/doc/manuals/debian-reference/ch02.en.html
La cause la plus courante de cette erreur survient lorsqu'un utilisateur a installé un package, puis supprimé le fichier .deb, généralement avec Sudo apt-get clean
.
http://manpages.ubuntu.com/manpages/zesty/man8/apt-get.8.html
nettoyer
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/
Ensuite, à un moment donné, dpkg --reconfigure
est appelé, par l'utilisateur ou par une mise à niveau, ou à un moment donné, l'utilisateur tente de réinstaller le paquet est réinstallé Sudo apt-get --reinstall foo
ou une variante.
Si apt ne peut pas localiser le fichier .deb dans le référentiel, soit parce que les paquetages ont été supprimés (rare), que le référentiel a été supprimé du système, ou mis à niveau et que le paquet ne se trouve pas dans le nouveau référentiel, vous obtiendrez l'erreur "Apt/Synaptic a besoin de réinstaller le paquet mais ne trouve pas l'archive "
Mais l'erreur peut provenir d'autres causes.
Citation des sections pertinentes de la page de manuel dpkg (voir http://manpages.ubuntu.com/manpages/trusty/man1/dpkg.1.html pour plus de détails)
INFORMATIONS SUR LES PAQUETS dpkg conserve certaines informations utilisables sur les paquets disponibles. Les informations sont divisées en trois classes: états, états de sélection et drapeaux. Ces valeurs sont destinées à être modifiées principalement avec dselect.
États du colis
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.
ACTIONS
-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.
--configure package ... | -a | --pending
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 la ou les pages de manuel sont tl; dr -> Dans le cadre de l’installation, .deb/dpkg/apt exécute des scripts avant/après l’installation et d’autres fonctions. Si ces scripts d'installation/de suppression échouent pour diverses raisons, un package sera marqué comme "à moitié installé" (ou dans un état autre que non installé/installé). Dans cet état impur, vous pouvez aussi parfois voir l'erreur "Apt/Synaptic doit réinstaller le paquet, mais ne peut pas trouver l'archive". Dans cet exemple, le problème n'est pas une archive manquante, mais un problème dans les scripts de pré/post-installation qui ne peut pas être résolu en les réexécutant. Ainsi, l'erreur est parfois non spécifique.
Commencez par essayer de réparer les dépendances en vous assurant que les ppa/référentiels appropriés sont activés, par exemple, l’univers ou le ou les référentiels nécessaires.
Puis l'infâme
Sudo apt-get install -f
Lisez tous les messages de sortie et d'erreur, puis publiez la commande et la sortie ici si vous avez besoin d'aide.
Essayez de reconfigurer
Sudo dpkg --configure -a
Cela exécutera les scripts de configuration. Vous pouvez spécifier un paquet plutôt que -a, mais -a est plus utile lorsque vous rencontrez des problèmes.
Lisez tous les messages de sortie et d'erreur, puis publiez la commande et la sortie ici si vous avez besoin d'aide.
Essayez de regarder tout script qui échoue et, si possible, corrigez l’erreur/le problème dans le script.
Essayez de supprimer le paquet incriminé, de force si nécessaire. Vous devez faire très attention à ce que vous puissiez forcer la suppression d'un paquet critique ou d'un ensemble plus mauvais de paquets critiques. Les commandes suivantes vont d'une force polie à une force moins polie à une force absolue. Essayez-les dans l'ordre.
Sudo dpkg --remove $broken_package
Sudo dpkg --remove --force-remove-reinstreq $broken_package
Sudo dpkg --remove --force-all $broken_package
Si l'un d'entre eux fonctionne, exécutez Sudo apt-get update && Sudo apt-get upgrade
, vous devrez peut-être également exécuter Sudo apt-get -f install
et/ou Sudo dpkg --configure -a
.
Si cela échoue, vous devrez alors supprimer manuellement les packages. Cela peut impliquer de rechercher tous les composants de votre système et de les supprimer manuellement.
Utilisez la procédure suivante
Supprimer les informations de dpkg (voir ci-dessus)
cd /var/lib/dpkg/info
Sudo rm -i package_name*
Veillez à ne pas supprimer plus que nécessaire ici.
Enfin, supprimez le paquet incriminé
Sudo dpkg --remove --force-remove-reinstreq package_name
Vous devriez alors pouvoir utiliser apt
Sudo apt-get update
Sudo apt-get install -f
Sudo apt-get upgrade
Si nécessaire, recherchez et supprimez manuellement les fichiers restants sur le système. Ceci est une procédure manuelle et peut inclure des fichiers de configuration dans /etc
ou des pages de manuel ou des données partagées. Utilisez find ou localiser pour identifier les fichiers restants potentiels.
Évidemment, vous devez faire très attention lorsque vous supprimez des fichiers système. Ne supprimez pas les choses que vous ne comprenez pas et n'utilisez pas rm -Rf
sans comprendre ce que cette commande fera. rm -i
est probablement meilleur car l'option -i
demande une confirmation.
Vous pourrez peut-être reproduire ce message d'erreur en modifiant manuellement le fichier d'état de dpkg de n'importe quel paquetage dans /var/lib/dpkg/info
et en modifiant l'état à moitié installé.
Sudo nano /var/lib/dpkg/info/some_package
Modifier la ligne d'état pour qu'elle se lit
Etat: purge reinstreq à moitié installée
Ensuite, essayez de lancer apt-get
.
Si cela ne fonctionne pas, installez un paquet à partir d'un ppa, lancez apt-get clean, supprimez le ppa, puis essayez de réinstaller ou de reconfigurer le paquet.
Désolé pour le long message, mais j'espère que cela vous donnera un aperçu de la cause et de la résolution de ce message d'erreur complexe "Apt/Synaptic doit réinstaller le package mais ne peut pas trouver l'archive correspondante"