我一直在运行 debian 7.6 的树莓派服务器上为 gcc 开发一个非常基本的 Web 前端。最终结果是,您可以编译一个单文件 C 程序,将其输入到 Pi 提供的 HTML 表单中,然后它通过 ajax 将 C 代码发布到服务器,服务器上的 bash cgi 脚本解码 html,写道该文件类似于 main.c,然后编译它。作为用户,您将获得编译结果(错误或成功编译的消息)。到目前为止就是这样。
尝试远程编译文件时出现此错误:
Error: gcc: error trying to exec 'cc1': execvp: No such file or directory
当我通过标准输入(这是在远程方法中检索发布数据的方式)手动将相同的 c 文件的文本发送到 cgi 时,我没有收到此警告,所以我认为它与服务器路径以及服务器运行脚本的身份,我认为在这种情况下是 www-data(我的 lighttpd.conf 文件将“www-data”作为服务器用户名和组名)。当我在 cgi 脚本中运行 /usr/bin/env 时,路径不包括find
返回的 cc1 的位置。
我的解决方案是将 gcc 使用的 cc1 实用程序的位置放在 cgi 脚本本身中:
PATH=$PATH:/usr/lib/gcc/arm-linux-gnueabihf/4.6
export PATH
这行得通,但我确信我在这里所做的不是解决这个问题的正确方法,而且在面向公众的环境中也不够。我的问题是:
允许远程用户使用适当的路径运行 cgi 脚本的更好方法是什么(例如,我不必将不在 www-data 用户路径中的二进制文件的路径放在文件中)
我对网络服务器管理员和管理 cgi 脚本很陌生:我不知道我不知道什么。