Удаленная компиляция C-программы на сервере raspi, работающем под управлением lighttpd: запуск по пути пользователя
Я работал над очень простым веб-интерфейсом для gcc на сервере raspberry pi под управлением Debian 7.6. Конечным результатом является то, что вы можете скомпилировать однофайловую программу C, которую вы вводите в форму HTML, обслуживаемую Pi, и она отправляет код C на сервер через ajax, а скрипт bash cgi на сервере декодирует HTML, пишет файл в нечто вроде main.c, а затем компилирует его. Как пользователь, вы получаете результаты вашей компиляции (либо ошибки, либо сообщение, что оно успешно скомпилировано). Это так далеко.
Я получаю эту ошибку при попытке скомпилировать файл удаленно:
Error: gcc: error trying to exec 'cc1': execvp: No such file or directory
Я не получаю это предупреждение, когда отправляю текст того же c-файла в cgi вручную, отправляя его через stdin (то есть, как данные поста извлекаются в удаленном методе), поэтому я предполагаю, что это как-то связано с путь к серверу и имя сервера, на котором выполняется сценарий, который, как мне кажется, в данном случае является www-данными (в моем файле lighttpd.conf в качестве имени пользователя и имени группы сервера указаны "www-data"). Когда я запускаю /usr/bin/env в сценарии cgi, путь не включает местоположение cc1, которое find
вернулся.
Мое решение состояло в том, чтобы поместить расположение утилиты cc1, которую использует gcc, в сам скрипт cgi:
PATH=$PATH:/usr/lib/gcc/arm-linux-gnueabihf/4.6
export PATH
Это работает, но я уверен, что то, что я делаю здесь, не является правильным способом сделать это и что этого будет недостаточно в публичном контексте. Мой вопрос:
Как лучше разрешить удаленным пользователям запускать сценарии cgi с правильными путями (например, чтобы мне не нужно было указывать в файле путь двоичного файла, которого нет в пути пользователя www-data)?
Я довольно новичок в администрировании веб-сервера и управлении сценариями cgi: я не знаю, чего не знаю.