web-dev-qa-db-fra.com

Comment reproduire le message d'erreur "Le package ... doit être réinstallé, mais je ne trouve pas d'archive" pour le tester?

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.

5
Zanna

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.


Comment gérer les paquets cassés

  1. 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.

  2. 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.

  3. 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.

  4. 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
    
  5. 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.


Recréer ce problème

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"

5
Panther