Reinstalando todos os pacotes Debian

19

Eu matei por engano um processo do dpkg em execução em segundo plano e gostaria de reinstalar todos os pacotes para garantir que tudo esteja bem.

Primeiro, tentei obter uma lista de todos os pacotes e reinstalá-los

dpkg --get-selections | grep -v deinstall | awk '{print $1}' > list.log
apt-get install --reinstall $(cat list.log)

Mas existem mensagens como:

E: Couldn't configure pre-depend debconf:i386 for console-setup:i386, probably a dependency cycle.

Eu tentei apt-get -f install, sem sucesso.

Como último recurso, reinstalei todos os programas que falharam nas somas de verificação:

dpkg -l | grep ^ii | awk '{ print $2 }' | xargs debsums -s -a

O que devo fazer para reinstalar tudo?

Edit: Problema resolvido. A questão era outra coisa (veja os comentários). Eu entendo que é algo a evitar com o Debian.

alex_reader
fonte
1
Recentemente, tive uma falha ao tentar instalar um pacote. Quando reiniciei e tentei reinstalar o pacote, recebi a mensagem "E: dpkg foi interrompido, você deve executar manualmente 'dpkg --configure -a' para corrigir o problema.". A execução desse comando removeu o referido pacote e os arquivos de configuração. Pude instalar o pacote a partir do zero. Tente dar esse comando.
embedded.kyle
Não fez nada, então acho que nada está quebrado. Tentarei mais tarde verificar se meus problemas de driver foram resolvidos.
22913 alex_reader
1
Reinstalar todos os pacotes == péssima idéia. (a) É quase sempre desnecessário (b) provavelmente irá falhar (c) Se o seu sistema estiver realmente tão desarrumado, basta reinstalá-lo. Basta corrigir os problemas que você realmente vê.
Faheem Mitha

Respostas:

9

Tente isso, lembrando que eu não testei:

dpkg --get-selections > selections
sudo dpkg --clear-selections
sudo dpkg --set-selections < selections
sudo apt-get --reinstall dselect-upgrade

Fontes:

Marco Sulla
fonte
Meu problema era completamente diferente: eu não estava inicializando o kernel correto (!). Aceitarei sua resposta, pois parece fazer o que eu queria (mas também não foi testado).
alex_reader
Isso não funcionará e quebrará completamente o sistema. A linha 3 desinstalará o apt, portanto não será possível reinstalar tudo depois.
rkjnsn
@rkjnsn: Atualizei a resposta, verifique se funciona.
Marco Sulla
1
Tentando fazer isso, nada está sendo reinstalado, embora o arquivo de seleções esteja preenchido: pi @ prodpi ~ $ sudo apt-get --reinstall dselect-upgrade Lendo listas de pacotes ... Concluído Criando árvore de dependência Lendo informações de estado ... Concluído 0 atualizado , 0 recém-instalado, 0 para remover e 0 não atualizado. qualquer ideia?
andig
Uma razão pela qual acho que seu código não funcionará é porque a dpkg --get-selectionslista de comandos também desinstala os pacotes.
Ortomala Lokni
2

Apenas no caso, tente reinstalar cada pacote :

for i in $(cat list.log); do apt-get install --reinstall "$i"; done

Você também pode adicionar a resposta sim a todas as perguntas.

Covarde
fonte
cat: list.log: Esse arquivo ou diretório não
existe
2
@IgorGanapolsky Execute dpkg --get-selections > list.logprimeiro.
precisa saber é o seguinte
2
list.logé retirado da pergunta.
Stephen Kitt
2

Em um dos recursos citados por Lucas Malor, encontrei um script chamado populator que parece estar próximo da solução. Se você definir a variável de seleção de pacotes na lista de todos os seus pacotes

PKGLIST=$(dpkg --get-selections | grep -v deinstall| cut -f1)

você pode executar o script e reinstalar todos os pacotes, mas o sistema provavelmente terá alguns problemas. Seria melhor testá-lo em uma máquina virtual primeiro.

Aqui está uma variante do script no link acima:

#!/bin/bash
#
# Script to pre-populate apt-get proxy for faster later downloads.
# It uses apt-get and wget to pull all the specified packages.
#

# Make sure only root can run our script
if [[ $EUID -ne 0 ]]; then
   echo "You're not root, are you?" 1>&2
   exit 1
fi

# Specify wanted packages
PKGLIST="exaile" 

# Clears out the local repository of retrieved package files
apt-get clean

# Resynchronize the package index files from their sources
apt-get update

# Re-install specified packages at the newest version. 
apt-get install --reinstall $PKGLIST

Se for mostrado um erro de que pacotes específicos não podem ser reinstalados, execute este comando para tentar novamente:

sudo apt-get -y autoremove
Ortomala Lokni
fonte
1

Tente fazer isso, pois ele pegará sua saída e criará uma linha gigante com espaços que separam os nomes dos arquivos.

dpkg --get-selections | grep -v deinstall | awk '{print $1}' > list.log awk '$1=$1' ORS=' ' list.log > newlist.log apt-get install --reinstall $(cat newlist.log)

A única alteração na postagem original é adicionar a segunda declaração do awk, que provavelmente poderia ser feita em linha com a primeira para criar o arquivo desejado.

Essa alteração forçará o apt-get a baixar novamente novamente os pacotes e todas as dependências ausentes que não foram instaladas na primeira vez e os reinstalará em ordem.

Se o fizermos em linha, acredito que ficaria assim:

dpkg --get-selections | grep -v deinstall | awk '{print $1}' | awk '$1=$1' ORS=' ' > list.log

E certifique-se de realmente garantir que o sistema tenha pacotes corretos (ou mais recentes), limpe o cache apt, atualize-o e faça o download novamente de todos os arquivos (você pode pular as duas primeiras etapas se quiser apenas o que possui no cache reinstalado):

apt-get clean && apt-get update && apt-get install --reinstall $(cat list.log)

Eu tinha mais de 2k pacotes instalados em um sistema que atualizei com um problema. O uso do dpkg --configure -a concluiu a instalação (estava na fase final). Eu executei isso para fazer tudo reinstalar corretamente.

Ou conforme indicado em /superuser/298912/reinstall-debian- while-keeping-installed-packages- and-data :

sudo apt-get install --reinstall $(dpkg --get-selections | grep -w 'install$' | cut -f1)

Apenas certifique-se de executar um "init 2" antes de qualquer reinstalação, pois alguns componentes do X ou do seu gerenciador de janelas favorito podem não gostar de ser reinstalados.

Covarde anônimo
fonte
A menos que você tenha modificado o IFS, o $(cat file)token não citado em qualquer espaço em branco e fornece exatamente o mesmo resultado, independentemente de o arquivo ser delimitado por novas linhas ou espaços. --reinstallpode ajudar, mas já foi administrado duas vezes antes disso.
Dave_thompson_085
0

Ao usar o Aptitude, há uma maneira fácil e rápida de fazer isso:

sudo aptitude reinstall '~i'

que reinstalará todos os pacotes atualmente instalados.

goetzc
fonte
-1

Ao usar o RPM, no caso de você causar uma corrupção no banco de dados do pacote, existe uma opção para reconstruir esse banco de dados, impedindo que você precise passar basicamente por uma reinstalação. Como um usuário aqui apontou, isso é feito no Debian by dpkg --configure -a.

mdpc
fonte
1
A função de dpkg --configure -aé configurar todos os pacotes descompactados e não configurados. Veja as páginas de manual do dpkge dpkg-reconfiguretambém debian.org/doc/manuals/debian-faq/ch-pkg_basics.en.html
Ortomala Lokni