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 sudo
comando que necesita el compilador, no lo puedo encontrar.
Me parece que eso PATH
no 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++ --version
falla:
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 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 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/bin
esnoEn sudo
s 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 visudo
y editando el archivo secure_path
para 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]$