ambiente sudo: “g ++: command not found”

3

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:

sudo yum remove gcc

O GCC aparece para ser corretamente instalado e visível para ambos os usuários e root , mas quando tento emitir um comando sudo que precisa do compilador, ele não pode ser encontrado.

Parece-me que PATH não aponta para 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 root é bem-sucedido:

[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++ --version falha:

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 o PATH como 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 de g++ está realmente no caminho.

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

Responder a 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]$ 

Foi observado que eu estava fazendo errado ao verificar o sudo PATH . Fazer isso da maneira correta revela que, de fato, /usr/local/bin não é em 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]$ 
    
por John Dibling 21.06.2014 / 16:54

1 resposta

4

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

Eu posso fazer isso funcionar executando sudo visudo e editando o secure_path para incluir /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]$ 
    
por 21.06.2014 / 17:13

Tags