
Eu acidentalmente corri apt install '*'
. Embora não tenha instalado nada devido a conflitos (por exemplo, múltiplas versões do vim
editor), todos os pacotes instalados perderam sua propriedade "automática", o que significa que não posso mais aproveitar a verificação automática de dependência do APT. Ou seja, se eu remover vim
, o apt não solicitará mais que eu remova vim-runtime
. Estou usando uma versão simplificada do Advanced Packaging Tool, portanto apt-mark
não está disponível. Como posso restaurar a automatic
propriedade daqueles que dependem de outra pessoa?
Nota: tenho apt
, apt-get
, apt-cache
e disponíveis apt-config
.apt-key
Responder1
No Debian e derivados, as informações sobre instalação manual versus instalação automática são armazenadas em arquivos /var/lib/apt/extended_states
. Não há backups automáticos nem registros. Se você tiver um backup desse arquivo, restaure-o.
Se você não tiver um backup, primeiro faça um, caso você faça as pazes. Em seguida, para cada pacote, altere a linha Auto-Installed: 0
para Auto-Installed: 1
para marcar o pacote como instalado manualmente.
O próprio APT não rastreia as dependências dos pacotes instalados, isso é feito pelo dpkg. A informação está /var/lib/dpkg/status
no Debian. O Aptitude possui uma funcionalidade de pesquisa avançada que pode operar em dependências, mas não no apt. Você pode fazer uma análise ad hoc do arquivo /var/lib/dpkg/status
. O script a seguir (minimamente testado) gera uma lista de pacotes dos quais alguns pacotes instalados dependem:
</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 essa lista e talvez remova algumas linhas que são pacotes que são dependências, mas que você sabe que deseja manter independentemente. Então use isso para ajustar /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 o arquivo de saída e mova-o para o lugar se estiver satisfeito.