
Corrí accidentalmente apt install '*'
. Aunque no instaló nada debido a conflictos (por ejemplo, múltiples versiones del vim
editor), todos los paquetes instalados perdieron su propiedad "automática", lo que significa que ya no puedo disfrutar de la verificación automática de dependencia de APT. Es decir, si elimino vim
, apt ya no me solicita que lo elimine vim-runtime
. Estoy usando una versión simplificada de Advanced Packaging Tool, por lo que apt-mark
no está disponible. ¿Cómo puedo restaurar la automatic
propiedad de aquellas que dependen de otro?
Nota : Tengo apt
, apt-get
, apt-cache
y disponibles.apt-config
apt-key
Respuesta1
En Debian y derivados, la información sobre la instalación manual y automática se almacena en formato /var/lib/apt/extended_states
. No hay copias de seguridad automáticas ni registros. Si tiene una copia de seguridad de ese archivo, restáurela.
Si no tiene una copia de seguridad, primero haga una en caso de que la recupere. Luego, para cada paquete, cambie la línea Auto-Installed: 0
para Auto-Installed: 1
marcar el paquete como instalado manualmente.
APT en sí no realiza un seguimiento de las dependencias de los paquetes instalados, eso lo hace dpkg. La información está /var/lib/dpkg/status
en Debian. Aptitude tiene una funcionalidad de búsqueda avanzada que puede operar en dependencias, pero no en apt. Puede realizar un análisis ad hoc de /var/lib/dpkg/status
. El siguiente script (mínimamente probado) genera una lista de paquetes de los que depende algún paquete instalado:
</var/lib/dpkg/status awk '
/^Package:/ {package=$2}
/^Status:/ && $4 != "installed" {package=""}
/^(Depends|Pre-Depends|Recommends|Suggests):/ && package != "" {
sub(/^[^:]*: */, "");
gsub(/ (\([^()]*\))/, "");
split($0, dependencies, /[|, ]+/);
for (d in dependencies) print dependencies[d]}
' | sort -u >dependencies.txt
Revise esa lista y tal vez elimine algunas líneas que son paquetes que resultan ser dependencias pero que sabe que querrá mantener iguales de todos modos. Luego usa esto para modificar /var/lib/apt/extended_states
:
</var/lib/apt/extended_states awk '
BEGIN {
while (getline <"dependencies.txt") auto[$0]=1;
RS="";
}
$2 in auto {sub(/\nAuto-Installed: 0/, "\nAuto-Installed: 1")}
{print $0 "\n"}
' >extended_states.new
Revise el archivo de salida y muévalo a su lugar si está satisfecho.