Eliminación de dependencias no utilizadas utilizando "autoremove"


25

Pensé que ejecutar apt-get autoremovesin ningún argumento siguiente elimina todas las dependencias no utilizadas que quedan en el sistema, mientras que la ejecución apt-get autoremove xxxelimina xxx y sus dependencias no utilizadas.

Sin embargo descubrí lo contrario. La ejecución apt-get autoremove xxxno solo elimina xxx y sus dependencias no utilizadas, sino que también elimina todas las demás dependencias no utilizadas.

Luego intenté ejecutar apt-get remove --auto-remove xxx, pensando que esto eliminaría solo xxx y sus dependencias no utilizadas. Para mi sorpresa, esto también eliminó xxx, sus dependencias no utilizadas y todas las demás dependencias no utilizadas.

Esto me lleva a dos preguntas relacionadas.

(1) ¿Es este el comportamiento previsto de los comandos?

(2) ¿Hay una manera fácil de eliminar xxx y sus dependencias no utilizadas sin eliminar otras dependencias no utilizadas?

(Parece que aptitude removetambién se comporta de manera similar).

Respuestas:


21

Mirando el archivo cmdline/apt-get.ccdel archivo tar de origen en http://packages.ubuntu.com/source/maverick/apt , puedo ver que --auto-removees un argumento que permite la APT::Get::AutomaticRemoveconfiguración.

Los comandos autoremovey removeambos llaman a la función DoInstall.

El comando "autoremove" APT::Get::AutomaticRemovetambién se configura y, por lo tanto, hace lo mismo que --auto-remove.

Mirando en la DoAutomaticRemovefunción, es claramente visible que habilitar la APT::Get::AutomaticRemoveconfiguración ( --auto-removey autoremovehace esto) hace que Apt recorra todos los paquetes instalados y marca los paquetes no utilizados para su eliminación.

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 función 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);
   }
   }

No puedo hablar si está destinado o no, puede llenar un error / hacer una pregunta en launchpad.net .


Por el momento, no es posible excluir paquetes de la eliminación por apt-get autoremove. Si desea conservar los paquetes, ejecute apt-get -s autoremove, copie los paquetes de la lista y elimine los paquetes de la lista que desea conservar. Finalmente, elimine esos paquetes: sudo apt-get purge [packages-to-be-removed](la purga también elimina los archivos de configuración, si los hay)


¿Qué recomiendas para eliminar solo xxx y sus dependencias no utilizadas? Incluya eso en la respuesta para mi aprendizaje, ¡gracias!

1
No puede excluir paquetes de la eliminación automática, si desea evitar que los paquetes se eliminen automáticamente, elimínelos con apt-get purgeo apt-get remove.
Lekensteyn
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.