Reinstalando todos os pacotes Debian

Eu matei por engano um processo dpkg em execução em segundo plano e gostaria de reinstalar todos os pacotes para ter certeza de que está tudo 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 há 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 no checksums:

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

O que devo fazer para reinstalar tudo?

Editar: Problema resolvido. O problema era outro (veja os comentários). Eu entendo que é algo a evitar com o Debian.

Comentários

  • Recentemente, tive um travamento ao tentar instalar um pacote. Quando reiniciei e tentei reinstalar esse 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 seus arquivos de configuração. Pude então instalar o pacote do zero. Tente executar esse comando.
  • Ele não ‘ não fez nada, então acho que nada está quebrado. Vou tentar mais tarde para verificar se meus problemas de driver estão resolvidos.
  • Reinstalando todos os pacotes == ideia realmente ruim. (a) É ‘ quase sempre desnecessário (b) provavelmente irá falhar ( c) Se o seu sistema estiver realmente tão bagunçado, basta reinstalá-lo. Apenas conserte os problemas que você realmente encontrar.

Resposta

Tente isso, lembrando que eu não teste:

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

Fontes:

Comentários

  • 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 testado).
  • Isso não ‘ t funcionará e quebrará completamente o sistema. A linha 3 irá desinstalar o apt, então ‘ não será possível reinstalar tudo, depois.
  • @rkjnsn: Eu atualizei a resposta, verifique se funciona.
  • 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 Construindo árvore de dependências Estado de leitura informações … Concluído 0 atualizado, 0 recém-instalado, 0 para remover e 0 não atualizado. alguma ideia?
  • Um motivo pelo qual acho que seu código não ‘ funcionará é porque o comando dpkg --get-selections list também desinstala pacotes.

Resposta

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.

Comentários

  • Bom e conciso!

Resposta

Por precaução, tente reinstalar cada um pacote :

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

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

Resposta

Em um dos recursos citado por Lucas Malor eu encontrei um script chamado populator que parece ser perto da solução. Se você definir a variável de seleção de pacotes para a lista de todos os seus pacotes

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

você pode então 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 do 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 

Resposta

Tente fazer isso, pois sua saída será uma linha gigante com espaços separando os nomes de arquivo.

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 mudança em sua postagem original é adicionar a segunda instrução awk, que provavelmente poderia ser feita em linha com a primeira para criar o arquivo que você deseja.

Esta mudança forçará o apt- faça o download correto dos pacotes e todas as dependências ausentes que não foram instaladas na primeira vez e reinstale-os em ordem.

Se fizermos inline, acredito que ficaria assim:

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

E então certifique-se de que o sistema realmente possui os pacotes corretos (ou mais recentes), limpe o cache do apt, atualize-o e baixe novamente todos os arquivos (você pode pular as duas primeiras etapas se quiser apenas o que tem 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 que estava desligado. Usar dpkg –configure -a finalizou a instalação (estava na fase final). Em seguida, executei isso para reinstalar tudo corretamente.

Ou conforme declarado em https://superuser.com/questions/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, já que alguns dos componentes do X ou seu gerenciador de janelas favorito pode não gostar de ser reinstalado.

Comentários

  • A menos que você ‘ tenha modificado o IFS , sem aspas $(cat file) tokeniza em qualquer espaço em branco e dá exatamente o mesmo resultado, quer o arquivo seja delimitado por novas linhas ou espaços. --reinstall pode ajudar, mas já foi dado duas vezes antes disso.

Resposta

Fazer isso por meio de apt é muito simples:

apt list --installed | cut --delimiter=/ --fields=1 | xargs apt reinstall -y

O apt list --installed parte faz exatamente o que se poderia imaginar. O caractere | canaliza a saída padrão do comando apt para a entrada padrão do cut comando. A parte cut --delimiter=/ diz ao comando cut para usar / como delimitador e --fields=1 diz a cut para usar o primeiro campo, isto é, o texto antes do primeiro / que aparece na saída do comando apt list --installed. Neste caso, o resultado do comando cut é uma lista de todos os pacotes instalados sem todas as informações adicionais que não precisamos do apt list --installed comando.

O próximo | canaliza a saída padrão do comando cut, a lista de todos os instalados pacotes, para a entrada padrão do comando xargs, que, por sua vez, invoca apt reinstall -y para cada um dos pacotes que estão instalados atualmente .

Observação : dependendo da configuração do apt, o apt reinstall -y part pode instalar atualizações para seus pacotes existentes em vez das versões exatas que você instalou atualmente.

Resposta

Ao usar RPM, caso você cause uma corrupção no banco de dados do pacote, há uma opção para reconstruir este banco de dados, evitando assim que você tenha que passar por b asicamente uma reinstalação. Como um usuário aqui apontou, isso é feito no Debian por dpkg --configure -a.

Comentários

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *