Detect empty $PATH environmental var
Summary:
By default, PHP-FMP (an alternate PHP FCGI SAPI) cleans the entire environment
for child processes. This means we have no $PATH.
This causes some confusing failures for reasons I don't fully understand. If you
do these things:
exec_manual('env');
exec_manual('export');
...they show no $PATH, as expected. If you do this:
exec_manual('echo $PATH');
...it shows a path. And this works (i.e., it finds the executable):
exec_manual('ls');
...but this fails (it says "no ls in ((null))"):
exec_manual('which ls');
So, basically, the sh -c process itself gets a default PATH somehow, but its
children don't. I don't realllly get why this happens, but clearly an empty
$PATH is a misconfiguration, and can easily be remedied.
See discussion here: https://github.com/facebook/libphutil/issues/7
Test Plan: Applied patch to Centos6 + nginx + PHP-FPM machine, ran setup, the
configuration issue was detected and I was given information on resolving it.
Reviewers: btrahan, jungejason
Reviewed By: btrahan
CC: aran
Differential Revision: https://secure.phabricator.com/D1413
This commit is contained in:
@@ -122,6 +122,26 @@ class PhabricatorSetup {
|
||||
"consequences of leaving it unconfigured.\n");
|
||||
}
|
||||
|
||||
$path = getenv('PATH');
|
||||
if (empty($path)) {
|
||||
self::writeFailure();
|
||||
self::write(
|
||||
"Setup failure! The environmental \$PATH variable is empty. ".
|
||||
"Phabricator needs to execute system commands like 'svn', 'git', ".
|
||||
"'hg', and 'diff'. Set up your webserver so that it passes a valid ".
|
||||
"\$PATH to the PHP process.\n\n");
|
||||
if (php_sapi_name() == 'fpm-fcgi') {
|
||||
self::write(
|
||||
"You're running php-fpm, so the easiest way to do this is to add ".
|
||||
"this line to your php-fpm.conf:\n\n".
|
||||
" env[PATH] = /usr/local/bin:/usr/bin:/bin\n\n".
|
||||
"Then restart php-fpm.\n");
|
||||
}
|
||||
return;
|
||||
} else {
|
||||
self::write(" okay \$PATH is nonempty.\n");
|
||||
}
|
||||
|
||||
self::write("[OKAY] Core configuration OKAY.\n");
|
||||
|
||||
self::writeHeader("REQUIRED PHP EXTENSIONS");
|
||||
|
||||
Reference in New Issue
Block a user