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!