Reinstalando pacotes com arquivos ausentes / corrompidos

15

Após um desligamento impuro e um fsck colorido, um monte de arquivos desapareceu. A saída de 'rpm -Va' tem várias centenas de linhas (a maioria dos arquivos ausentes, mas também alguma soma de verificação e outras incompatibilidades). Existe uma maneira fácil de reinstalar os pacotes que possuem arquivos ausentes e / ou corrompidos?

O sistema operacional em questão é o Fedora 22.

    
por jaymmer 17.07.2015 / 12:38

2 respostas

14

Por referência e completude, um comando que seria capaz de alcançar o que inicialmente pediu seria algo assim (rapidamente manipulado, mas está funcionando)

rpm -qf $(rpm -Va 2>&1 | grep -vE '^$|prelink:' | sed 's|.* /|/|') | sort -u

Aqui está uma breve explicação das várias partes:

rpm -Va 2>&1

Será executada uma verificação completa em todos os pacotes atualmente instalados / listados no banco de dados rpm. Ele também irá redirecionar stderr para stdout, pois aqui na minha caixa alguns erros que são causados pelo prelink sendo ativado são reportados como erros, mas nós os queremos no stdout.
Atenção: Precisa ser executado como root para poder verificar todos os arquivos, permissões e proprietário / grupo.

grep -vE '^$|prelink:'

suprime a exibição de linhas vazias e os erros de pré-ligamento (exemplo de tal erro: prelink: /tmp/#prelink#.B14JBi: Recorded 10 dependencies, now seeing -1 )

sed 's|.* /|/|')

filtrará a saída rpm -Va para mostrar apenas os nomes dos arquivos

rpm -qf $()

consultará todos os nomes de arquivos obtidos em que o pacote está contido e exibirá o nome e a versão do pacote

| sort -u

suprimirá combinações duplicadas de nome / versão de pacote.

Ao todo, você receberá uma lista de pacotes que falharam na verificação.

rpm -Va ainda pode mostrar alguns problemas não relacionados, pois também verifica as dependências entre os pacotes, que podem precisar ser suprimidos adicionando --nodeps .

    
por 19.07.2015 / 18:16
2

Recentemente, tive um problema semelhante com arquivos ausentes no openSUSE 13.2 e corrigi-lo com:

rpm -Va --nodeps --nodigest --noscripts --nosignature --nofiledigest --nosize --nomode --nordev --nouser --nogroup --nomtime\
| awk -e '($1=="missing") && ($2=="d") {system("rpm -qf "$3);}; ($1=="missing") && ($2!="d") && ($2!="c") {system("rpm -qf "$2);}'\
| sort -u | xargs zypper in -f

As opções para o rpm e a chamada para o awk se destinam a economizar tempo no meu caso, porque nenhuma corrupção ocorreu.

    
por 13.08.2015 / 08:14

Tags