entorno sudo: "g++: comando no encontrado"

entorno sudo: "g++: comando no encontrado"

Tengo una instalación de RHEL 6.5 relativamente nueva, en la que instalé desde la fuente GCCC 4.9. Después de instalar GCC 4.9, desinstalé la versión anterior de GCC proporcionada por la distribución a través de:

sudo yum remove gcc

CCGaparecepara estar correctamente instalado y visible tanto para los usuarios como para root, pero cuando intento emitir un sudocomando que necesita el compilador, no lo puedo encontrar.

Me parece que eso PATHno apunta g++adurante sudo, pero no entiendo por qué.

g++está instalado en:

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

Y obteniendo la versión como usuario y como rootéxito:

[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.

Pero sudo g++ --versionfalla:

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

Comprobando el 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 la ubicación de g++está realmente en el camino.

¿Por qué falla esto y qué puedo hacer para solucionarlo?

Respondiendo preguntas en comentarios:

sí, puedo ejecutarlo usando rutas explícitas en 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]$ 

Se observó que lo estaba haciendo mal al verificar el archivo sudo PATH. Hacerlo de la manera correcta revela que, de hecho, /usr/local/binesnoEn sudos 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]$ 

Respuesta1

Estoy publicando esto como respuesta porque descubrí esta solución a través de comentarios en el OP, pero no estoy seguro de que esto sea lo quedeberíahacer.

Puedo hacer que esto funcione ejecutando sudo visudoy editando el archivo secure_pathpara incluirlo /usr/local/bin.

En mi sistema, la línea original es:

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

Cambiándolo a:

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

"soluciona" el 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]$ 

información relacionada