После изучения проблемы я обнаружил, проверив httpd.conf
, что httpd запускает httpd-foreground
под daemon
пользователем, а не root.
Пользователь daemon
не имеет шебанга по умолчанию:
$ docker run -it httpd cat /etc/passwd | grep daemon
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
Но даже если мы добавим
runuser - daemon -c "export PERL5LIB=/somedir" -s /bin/bash
С
по command:
переменная не будет передана в perl, поскольку httpd запускает CGI-скрипты в отдельных изолированных процессах, поэтому оболочка тоже изолирована. Мы можем управлять переменными ENV только с помощью директив mod_env SetEnv
и PassEnv
.
Итак, для передачи /somedir
в @INC
нам нужно добавить
echo "SetEnv PERL5LIB /somedir" >> /usr/local/apache2/conf/httpd.conf