ambiente sudo: “g++: comando não encontrado”

ambiente sudo: “g++: comando não encontrado”

Eu tenho uma instalação relativamente nova do RHEL 6.5, na qual instalei a partir da fonte GCCC 4.9. Depois de instalar o GCC 4.9, desinstalei a versão mais antiga do GCC fornecida pela distribuição por meio de:

sudo yum remove gcc

CCGpareceesteja corretamente instalado e visível para os usuários e root, mas quando tento emitir um sudocomando que precisa do compilador, ele não pode ser encontrado.

Parece-me que isso PATHnão aponta g++durante sudo, mas não entendo o porquê.

g++está instalado em:

[john@haley boost_1_55_0]$ which g++
/usr/local/bin/g++

E obtendo a versão como usuário e como rootconsegue:

[john@haley boost_1_55_0]$ g++ --version
g++ (GCC) 4.9.0
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

[john@haley boost_1_55_0]$ sudo su -
root@haley /root # g++ --version
g++ (GCC) 4.9.0
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Mas sudo g++ --versionfalha:

john@haley boost_1_55_0]$ sudo g++ --version
[sudo] password for john: 
sudo: g++: command not found
[john@haley boost_1_55_0]$ 

Verificando PATHcomo sudo:

[john@haley boost_1_55_0]$ sudo echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/home/john/bin:/usr/local/bin
                                                                             ^^^^^^^^^

... parece indicar que a localização g++está realmente no caminho.

Por que isso está falhando e o que posso fazer para corrigir isso?

Respondendo perguntas nos comentários:

sim, posso executá-lo usando caminhos explícitos em sudo:

[john@haley boost_1_55_0]$ sudo /usr/local/bin/g++ --version
[sudo] password for john: 
g++ (GCC) 4.9.0
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

[john@haley boost_1_55_0]$ 

Observou-se que eu estava fazendo errado ao verificar o arquivo sudo PATH. Fazer isso da maneira certa revela que na verdade /usr/local/binénãoem sudo:PATH

[john@haley boost_1_55_0]$ sudo env | grep PATH
13:PATH=/sbin:/bin:/usr/sbin:/usr/bin
[john@haley boost_1_55_0]$ 

Responder1

Estou postando isso como resposta porque descobri essa solução através de comentários no OP, mas não tenho certeza se foi isso que eudevefazer.

Posso fazer isso funcionar executando sudo visudoe editando o secure_patharquivo /usr/local/bin.

No meu sistema, a linha original é:

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin

Alterando para:

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin

"corrige" o problema:

[john@haley boost_1_55_0]$ sudo g++ --version
g++ (GCC) 4.9.0
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

[john@haley boost_1_55_0]$ 

informação relacionada