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 sudo
comando que precisa do compilador, ele não pode ser encontrado.
Parece-me que isso PATH
nã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 root
consegue:
[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 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 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 visudo
e editando o secure_path
arquivo /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]$