O RPM falha ao desinstalar usando o sudo rpm -e

5

Eu encontrei um problema estranho e irritante ao tentar desinstalar certos pacotes rpm gerados internamente usando sudo . Quando faço o seguinte:

sudo rpm -e mypackage  
rpm -qa | grep mypackage

Eu acho que o pacote ainda está listado! Isso ocorre apesar da execução de rpm -e sem nenhum erro óbvio. Isso me impede de remover outros pacotes dos quais este pacote depende.

Após algumas investigações, descobri que o pacote inclui um script-let de desinstalação que parece falhar. O script-let simplesmente tenta remover um diretório, por exemplo,

rm -rf /some_directory

Descobri então que, ignorando esse script, o pacote será desinstalado. Então, se eu fizer:

sudo rpm -e --noscripts mypackage  
rpm -qa | grep mypackage

o pacote não é mais listado. Agora, minha pergunta é por que usar o sudo impede que um script tão simples seja executado e, em segundo lugar, por que o comando rpm não relata um problema?

BTW, a seguinte sequência de comandos também funciona, portanto, remover o diretório é certamente possível:

sudo rm -rf /some_directory  
sudo rpm -e mypackage  
rpm -qa | grep mypackage

Nenhuma delas é realmente uma solução aceitável, pois preciso de uma maneira genérica confiável de desinstalar corretamente os pacotes rpm que não estão sob meu controle. Também não é possível fazer isso como root porque estou escrevendo um script que outros usuários devem ser capazes de executar.

Finalmente, em desespero, experimentei a opção -H do sudo, ou seja,

sudo -H rpm -e mypackage

Agora, isso também parece funcionar, mas alguém pode explicar por que definir $HOME to /root poderia fazer alguma diferença? Devido a processos rigorosos em meu ambiente de trabalho, não posso realmente enviar isso como uma solução sem um argumento convincente, ou seja, devo ser capaz de explicar por que -H é necessário e provar que meu script é robusto. Apenas dizer que sudo -H parece funcionar na minha máquina não vai cortá-lo com o meu chefe, infelizmente!

Espero que algum especialista aqui possa explicar o que está acontecendo, e qualquer ajuda seria muito apreciada!

    
por user556144 02.08.2013 / 20:21

1 resposta

3

Agora descobri a explicação, mas pode ser útil para outras pessoas no futuro. Eu encontrei um arquivo chamado .rpmmacros na minha área de origem que não estava presente na área de origem do root. Daí o impacto de definir -H ao chamar sudo.

Este arquivo .rpmmacros configurou% _topdir para um diretório que não foi montado (na verdade, um vob clearcase). Montando o diretório ou excluindo o arquivo, resolvi meu problema, ou seja, consegui desinstalar o RPM sem a opção -H.

    
por 05.08.2013 / 10:44

Tags