Eu tenho um Kali Linux instalado recentemente, mas devido à sua seleção inflexível de espelho, todos os pacotes deb são baixados de um espelho no qual não confio. É possível dizer ao apt/dselect para baixar novamente e reinstalar todos os pacotes, assumindo que o sources.list foi atualizado para usar o novo espelho?
Responder1
Como Alex destacou:
sudo apt-get clean
sudo apt-get install --reinstall $(dpkg --get-selections | grep -w 'install$' | cut -f 1)
O primeiro garante que o cache do apt esteja vazio. Dessa forma, o apt-get precisará baixar os pacotes dos repositórios. A segunda, primeiro você precisa de uma lista de todos os pacotes instalados, que é o que a $(...)
parte está fazendo, e então você está usando o apt-get para reinstalá-los. Há outra maneira com o aptitude:
sudo aptitude --reinstall install '~i'
A ~i
busca por "pacotes instalados".
Para ambos os métodos você terminará sem nenhum pacote instalado automaticamente, portanto você deve usar apt-mark showauto > packages
antes de fazer isso e sudo apt-mark auto $(cat packages)
restabelecer a lista.
Responder2
As respostas aqui me ajudaram a resolver o problema. Esta solução provavelmente não é a mais eficiente, mas dá conta do recado.
#!/bin/bash
for package in `dpkg --get-selections | grep -w 'install$' | cut -f 1`; do
apt-get install --reinstall $package;
done
Responder3
Eu usei esse script e de vez em quando me pediam para dar um Y(es). Então o script continuou. Mas como demora um pouco, o tempo de conclusão é muito mais longo. Eu mudei o script inserindo --yes force-yes
Recomendar forçando a aceitação automática de def/configuração antiga também
#!/bin/bash
for package in `dpkg --get-selections | grep -w 'install$' | cut -f 1`; do
apt-get --yes --force-yes -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" install --reinstall $package
done