Suppression des dépendances inutilisées à l'aide de «autoremove»


25

Je pensais que l'exécution apt-get autoremovesans aucun argument suivant supprimait toutes les dépendances inutilisées laissées sur le système, tandis que l'exécution apt-get autoremove xxxsupprimait xxx et ses dépendances inutilisées.

Cependant j'ai découvert le contraire. L'exécution apt-get autoremove xxxsupprime non seulement xxx et ses dépendances inutilisées, mais également toutes les autres dépendances inutilisées.

J'ai ensuite essayé de courir apt-get remove --auto-remove xxx, pensant que cela ne supprimerait que xxx et ses dépendances inutilisées. À ma grande surprise, cela a également supprimé xxx, ses dépendances inutilisées et toutes les autres dépendances inutilisées.

Cela m'amène à deux questions connexes.

(1) Est-ce le comportement prévu des commandes?

(2) Existe-t-il un moyen simple de supprimer xxx et ses dépendances inutilisées sans supprimer d'autres dépendances inutilisées?

(Il semble que aptitude removese comporte également de manière similaire.)

Réponses:


21

En regardant dans le fichier cmdline/apt-get.ccdepuis l'archive tar source à http://packages.ubuntu.com/source/maverick/apt , je peux voir que --auto-removec'est un argument qui permet le APT::Get::AutomaticRemoveréglage.

Les commandes autoremoveet les removedeux appellent la fonction DoInstall.

La commande "autoremove" est APT::Get::AutomaticRemoveégalement définie et elle fait donc la même chose que --auto-remove.

En regardant dans la DoAutomaticRemovefonction, il est clairement visible que l'activation du APT::Get::AutomaticRemoveparamètre ( --auto-removeet autoremovefait cela) provoque une boucle Apt à travers tous les packages installés et marque les packages inutilisés pour la suppression.

De main():

CommandLine::Args Args[] = {
   // ... stripped to save space
   {0,"auto-remove","APT::Get::AutomaticRemove",0},
   // ...
}
CommandLine::Dispatch Cmds[] = { // ...
                                {"remove",&DoInstall},
                                {"purge",&DoInstall},
                                {"autoremove",&DoInstall},
                                // ...
}
// ...
// Parse the command line and initialize the package library
CommandLine CmdL(Args,_config);

De DoInstall():

 unsigned short fallback = MOD_INSTALL;
   if (strcasecmp(CmdL.FileList[0],"remove") == 0)
      fallback = MOD_REMOVE;
   else if (strcasecmp(CmdL.FileList[0], "purge") == 0)
   {
      _config->Set("APT::Get::Purge", true);
      fallback = MOD_REMOVE;
   }
   else if (strcasecmp(CmdL.FileList[0], "autoremove") == 0)
   {
      _config->Set("APT::Get::AutomaticRemove", "true");
      fallback = MOD_REMOVE;
   }

De la fonction DoAutomaticRemove:

   bool doAutoRemove = _config->FindB("APT::Get::AutomaticRemove", false);
   // ...
   // look over the cache to see what can be removed
   for (pkgCache::PkgIterator Pkg = Cache->PkgBegin(); ! Pkg.end(); ++Pkg) {
       if (doAutoRemove) {
       if(Pkg.CurrentVer() != 0 && 
          Pkg->CurrentState != pkgCache::State::ConfigFiles)
          Cache->MarkDelete(Pkg, purgePkgs);
       else
          Cache->MarkKeep(Pkg, false, false);
   }
   }

Je ne peux pas dire si c'est prévu ou non, vous pouvez combler un bug / poser une question sur launchpad.net .


Pour le moment, il n'est pas possible d'exclure des packages de la suppression par apt-get autoremove. Si vous souhaitez conserver des packages, exécutez apt-get -s autoremove, copiez les packages de la liste et supprimez les packages de cette liste que vous souhaitez conserver. Enfin, supprimez ces packages: sudo apt-get purge [packages-to-be-removed](la purge supprime également les fichiers de configuration, le cas échéant)


Que recommandez-vous de supprimer uniquement xxx et ses dépendances inutilisées? Veuillez inclure cela dans la réponse pour mon apprentissage, merci!

1
Vous ne pouvez pas exclure des packages de la suppression automatique, si vous souhaitez empêcher la suppression automatique des packages, supprimez-les avec apt-get purgeou apt-get remove.
Lekensteyn
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.